共计 1985 个字符,预计需要花费 5 分钟才能阅读完成。
从医疗案例看相关性≠因果性
假设我们观察到服用维生素 C 的人群感冒率更低,这是否证明维生素 C 能预防感冒?事实上,服用维生素 C 的人可能同时具备健康意识强、收入较高等特征(confounder/ 混淆变量)。这种虚假关联在观察性数据中极为常见,需通过因果推断方法剥离混杂效应。

随机实验与观察性研究的本质差异
- 随机对照试验 (RCT):通过随机分组确保处理组(treatment group) 和对照组 (control group) 除干预措施外其他特征分布相同,黄金标准但成本高
- 观察性研究:利用自然存在的数据(如医保记录),需借助统计方法模拟随机化过程,核心挑战是处理选择偏差(selection bias)
核心方法解析
双重差分法(Difference-in-Differences, DID)
适用于处理组和对照组在干预前存在自然差异的场景,通过比较两组在干预前后的变化差异来估计因果效应:
$$\hat{\delta}{DID} = (E[Y])$$}] – E[Y_{1,C}]) – (E[Y_{0,T}] – E[Y_{0,C
其中 T / C 分别表示处理组 / 对照组,1/ 0 表示干预后 / 前。
# 使用 causalml 实现 DID
from causalml.inference import DID
import pandas as pd
# 模拟数据:time=0/1(干预前后), treated=0/1(对照组 / 处理组)
data = pd.DataFrame({'y': [3,5,4,8], # 结果变量
'time': [0,0,1,1],
'treated': [0,1,0,1]
})
did = DID(data, 'y', 'treated', 'time')
did.fit()
print(did.summary) # 输出 ATE(平均处理效应)
工具变量法(Instrumental Variable, IV)
当存在未观测混淆变量时,寻找与处理变量相关但不直接影响结果变量的工具变量 Z:
$$\hat{\beta}_{IV} = \frac{Cov(Z,Y)}{Cov(Z,X)}$$
# 使用 linearmodels 进行 IV 回归
from linearmodels.iv import IV2SLS
import numpy as np
# 生成模拟数据
n = 1000
z = np.random.normal(size=n) # 工具变量
u = np.random.normal(size=n) # 未观测混淆变量
x = z + u + np.random.normal(scale=0.1, size=n) # 内生处理变量
y = x + u + np.random.normal(scale=0.1, size=n) # 结果变量
df = pd.DataFrame({'y':y, 'x':x, 'z':z})
mod = IV2SLS.from_formula('y ~ 1 + [x ~ z]', data=df)
res = mod.fit()
print(res.summary) # 检查 x 系数是否接近真实值 1
倾向得分匹配(Propensity Score Matching, PSM)
通过估计处理概率 (propensity score) 来平衡协变量分布:
$$e(X) = P(T=1|X)$$
# 使用 causalml 实现 PSM
from causalml.match import NearestNeighborMatch
# 生成含协变量的数据
np.random.seed(42)
X = np.random.normal(size=(100,3))
treatment = (X[:,0] + X[:,1] > 0).astype(int)
y = treatment + X[:,0] + np.random.normal(size=100)
matcher = NearestNeighborMatch()
matched_data = matcher.match(X, treatment, y)
print(matched_data.groupby('treatment').mean()) # 检查协变量平衡性
避坑指南
- 混淆变量识别:
- 绘制因果图 (DAG) 标出所有可能路径
-
使用 do-calculus 规则验证可识别性
-
工具变量有效性检验:
- 相关性:第一阶段回归 F 统计量 >10
-
排他性约束:工具变量不应通过处理变量外的路径影响结果
-
常见因果图误用:
- 忽略中介变量 (mediator) 的调节作用
- 错误阻断对撞节点(collider)
- 未处理时间 -varying 混杂
思考与延伸
- 稳健性测试设计:
- placebo test:在虚假干预时间检验效应
-
更换匹配方法验证结果一致性
-
工具变量缺失时的替代方案:
- 断点回归设计(RDD)
- 双重机器学习(Double ML)
- 合成控制法(Synthetic Control)
因果推断是数据科学中的高级技能,需要理论理解与实践结合。建议从 RCT 数据开始练习,逐步过渡到复杂观察性研究。记住:没有完美的因果识别策略,关键在于评估估计结果对假设的敏感性。
正文完
