问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

因果推断中的混淆因素控制:一个药物测试案例分析

创作时间:
作者:
@小白创作中心

因果推断中的混淆因素控制:一个药物测试案例分析

引用
CSDN
1.
https://blog.csdn.net/qq_32146369/article/details/138437792

在因果推断中,如何处理混淆变量是一个关键问题。本文通过一个药物测试的案例,说明了如何通过回归分析控制混淆因素,以及在模型中添加控制变量时需要注意的问题。

案例背景

考虑一个在两家医院进行的药物测试场景。两家医院都在对一种治疗某种疾病的新药进行随机试验,感兴趣的结果是住院天数。如果治疗有效,它将减少患者在医院停留的天数。

  • 一家医院的策略是将其给予90%的患者,而10%的患者接受安慰剂
  • 另一家医院的策略是随机给10%的患者提供药物,90%的患者服用安慰剂
  • 此外,提供90%的真正药物和10%安慰剂的医院通常会得到更严重的疾病病例进行治疗

初始分析

首先,我们尝试直接对治疗结果进行回归分析:

hosp_1 = smf.ols('days ~ treatment', data=hospital).fit()
hosp_1.summary().tables[1]

但是发现了一些违反直觉的结果:治疗似乎增加了住院天数。这是因为:

  • 严重程度与在医院的天数较多呈正相关
  • 病情较重的医院也给予更多的药物
  • 因此,药物与在医院的天数呈正相关
  • 当我们将两家医院的数据合并时,未治疗者的潜在结果高于接受治疗者,因为在病情较轻的医院中,未治疗的病例较多

解决方案

有两种方法可以解决这个问题:

  1. 单独查看每家医院的平均治疗效果(ATE)
hosp_2 = smf.ols('days ~ treatment', data=hospital.query("hospital==0")).fit()
hosp_3 = smf.ols('days ~ treatment', data=hospital.query("hospital==1")).fit()

但是这种方法由于数据点不足,无法得到具有统计学意义的结果。

  1. 通过将疾病严重程度这个混淆变量包含在模型中来控制其影响
hosp_4 = smf.ols('days ~ treatment + severity', data=hospital).fit()

控制变量的影响

接下来考虑是否应该将医院纳入模型:

  • 医院直接影响治疗,但一旦控制了严重程度,医院就不再与住院天数的结果相关
  • 要成为混淆变量,该变量必须同时引起治疗和结果
  • 在本案例中,医院是一个仅导致治疗的变量

但是,我们可能还是想控制它。然而,这可能会带来负面影响:

hosp_5 = smf.ols('days ~ treatment + severity + hospital', data=hospital).fit()

通过回归系数标准误的公式可以看出,标准误差与变量X的方差成反比。如果 X 变化不大,则很难估计其对结果的影响。

在本案例中,由于医院变量是治疗而不是结果的良好预测因子(一旦我们控制了严重程度),它会降低治疗变量的方差,从而增加我们估计的误差。

最佳实践

  • 应该添加与治疗和结果(混杂因素)相关的控制,如上面模型中的严重程度
  • 还应该添加可以很好地预测结果的控制,即使它们不是混淆因子,因为它们降低了我们估计的方差
  • 但是,不应该添加只是治疗的良好预测因子的对照,因为它们会增加我们估计的方差

因果图说明

下图用因果图说明了这种情况:

在这个因果图中:

  • X表示混淆变量(严重程度)
  • T表示治疗
  • Y表示结果(住院天数)
  • 医院作为治疗的预测因子,但不是结果的预测因子
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号