8.3 DAG 与观察性识别:控制变量也可能制造偏差
观察性因果推断的核心不是某个算法,而是:哪些假设让数据中的比较等价于目标反事实比较?
本课目标
- 用 DAG 区分混杂、媒介与对撞变量;
- 写出一致性、可交换性和正值性假设;
- 理解回归、匹配和加权能够解决与不能解决的问题;
- 审查工具变量、差分中的差分和回归不连续的识别条件。
1. 从相关问题改写为因果问题
先写目标试验的基本要素:
- 符合条件的总体;
- 处理策略及其时间零点;
- 对照策略;
- 结果与随访窗口;
- 分配机制;
- estimand 与分析方案。
例如“训练较多的队伍成功率更高”只是关联;“对符合条件队伍,把训练从 10 小时增加到 20 小时,对未来 30 天任务成功率的平均影响”才接近可识别问题。
资格判断、处理分配和随访起点应对齐。尤其不能用未来是否完成训练定义起点时的处理组,再把完成前必须保持存活或无事件的时间计入处理组;这会制造 immortal time bias。日期不对齐也可能造成其他偏差,不能统称为不死时间偏差。见 Hernán 等关于目标试验的研究。
2. DAG 表达的是假设
考虑:
经验 ──→ 训练时长 ──→ 协作熟练度 ──→ 成功率
└────────────────────────────→ 成功率
训练时长 ──→ 受伤 ──← 任务难度 ──→ 成功率- 经验同时影响处理与结果,是混杂变量;
- 协作熟练度位于处理到结果的路径上,是媒介;
- 受伤由训练时长和任务难度共同导致,是对撞变量。
估计训练的总效应时,应阻断经验造成的后门路径,但通常不控制协作熟练度;在这个图里控制受伤还会打开 训练时长 → 受伤 ← 任务难度 → 成功率 路径。
DAG 的箭头来自领域知识、时间顺序和机制证据,不是从相关矩阵自动生成真相。遗漏变量的节点即使没有数据也应画出来,因为它决定识别是否可能。
下面用抽象的中心化变量验证对撞偏差,按 NumPy 代码块顺序运行。设
import numpy as np
A = np.array([-1., -1., 1., 1.])
U = np.array([-1., 1., -1., 1.])
C = A + U
Y = U.copy()
plain = np.linalg.lstsq(np.column_stack([np.ones(4), A]), Y, rcond=None)[0]
adjusted = np.linalg.lstsq(np.column_stack([np.ones(4), A, C]), Y, rcond=None)[0]
print(round(plain[1], 6), round(adjusted[1], 6))
# 0.0 -1.0不控制
3. 三个基础识别条件
一致性
观测到接受处理
条件可交换性
给定充分的处理前混杂变量
它意味着没有剩余的未测混杂,是观察数据本身通常无法验证的假设。
正值性
对二元处理
若最危险任务从不接受短训练,就无法从数据比较该群体的两种策略。模型外推不能制造真实重叠。
4. 调整集不是“所有可用变量”
用后门准则识别总效应时,调整集应阻断所有后门路径,且不能包含处理的后代节点。控制受处理影响的媒介会改变目标效应;控制对撞变量还可能打开路径。关键是因果角色,而不只是变量在表里出现得早晚。
处理前变量也不必全部控制:某些工具变量式变量强烈预测处理但不直接预测结果,在有限样本中可能增加方差并放大未测混杂偏差。变量选择应由因果图和 estimand 指导,再考虑统计效率。
“分层后相关系数变小”不是充分因果分析。需要直接估计目标效应,并传播模型与抽样不确定性。
5. Outcome regression、匹配与加权
结果模型
拟合
倾向评分
倾向评分
二元处理的 ATE 逆概率权重可取
- 处理组与对照组 propensity overlap;
- 加权后的协变量平衡,而非只看 propensity 模型 AUC;
- 极端权重和有效样本量;
- 权重截尾与模型选择的敏感性。
匹配只能平衡已测且进入设计的变量。匹配后直接使用独立样本标准误也可能不正确。
下面人为设定两类单位各 10 个,接受处理的比例分别为 0.2 和 0.8,真实处理效应为 2。倾向评分在例子里已知:
L = np.repeat([0., 1.], 10)
A = np.array([1] * 2 + [0] * 8 + [1] * 8 + [0] * 2)
Y = 3 * L + 2 * A
propensity = np.where(L == 0, 0.2, 0.8)
assert np.all((propensity > 0) & (propensity < 1))
w = np.where(A == 1, 1 / propensity, 1 / (1 - propensity))
raw = Y[A == 1].mean() - Y[A == 0].mean()
weighted = np.average(Y[A == 1], weights=w[A == 1]) - np.average(
Y[A == 0], weights=w[A == 0]
)
ess = [(w[A == a].sum() ** 2 / np.square(w[A == a]).sum()) for a in (0, 1)]
print(round(raw, 6), round(weighted, 6), np.round(ess, 6).tolist())
# 3.8 2.0 [6.4, 6.4]加权前差为 3.8,加权后为 2;两组加权后的
双重稳健方法
把结果模型与处理模型结合,在适当条件下其中一个正确即可保持一致性。但“双重稳健”不防未测混杂、正值性违反或错误时间顺序。
AIPW 在结果模型给出的效应上,加上按处理概率加权的预测残差修正。用上一例分别故意写错一个模型,再同时写错两个:
def aipw(m0, m1, e):
return np.mean(m1 - m0 + A * (Y - m1) / e - (1 - A) * (Y - m0) / (1 - e))
correct_outcome = aipw(3 * L, 3 * L + 2, np.full(len(A), 0.5))
correct_propensity = aipw(np.zeros(len(A)), np.zeros(len(A)), propensity)
both_wrong = aipw(np.zeros(len(A)), np.zeros(len(A)), np.full(len(A), 0.5))
print(np.round([correct_outcome, correct_propensity, both_wrong], 6).tolist())
# [2.0, 2.0, 3.8]两个模型中一个正确时,本例都恢复 2;同时错误时得到 3.8。一般结论是满足相应正则条件的一致性,不是每份有限样本都恰好正确。用灵活机器学习拟合这两个辅助模型时,推断还需考虑交叉拟合与收敛条件。参见 Bang 与 Robins 的双重稳健估计论文。
6. 工具变量的四道审查
工具
- 相关性:
确实改变 ; - 独立性:
与影响结果的未测因素独立; - 排除限制:
只通过 影响 ; - 处理版本与干扰假设符合目标解释。
在不依从随机试验中,若再加入单调性等条件,常识别的是 compliers 的局部平均处理效应(LATE),不一定是总体 ATE。
例如二元分配使结果均值提高 0.02、实际接受率提高 0.40,在上述假设和单调性成立时,Wald 比率给出 LATE
弱工具会使估计不稳定并放大有限样本偏差。第一阶段显著不是完整证明;应报告强度诊断、置信区间和对排除限制的机制论证。
7. 准实验仍依赖设计
差分中的差分(DiD)
比较两组前后变化差。关键假设是:没有处理时,两组潜在结果会保持平行趋势。处理前趋势检验未拒绝不能证明未来平行;还需检查提前反应、同期政策与组成变化。错位采用且效应随组别或时间变化时,普通双向固定效应系数也未必等于所需平均效应。
回归不连续(RD)
处理由阈值附近的 running variable 决定。识别阈值附近的局部效应,依赖单位不能精确操纵阈值、潜在结果在阈值处连续等条件。带宽和函数形式需做稳健性分析。
这里要求连续的是潜在结果,观测结果的跳跃恰恰可能是待估计信号。阈值完全决定处理的 sharp RD,与阈值只改变接受概率的 fuzzy RD,识别和估计方法也不同。
自然实验
“自然发生”不等于随机。必须论证变化为什么对目标比较近似外生,以及谁受影响。若把这种变化作为工具变量,还需另外论证它只通过目标处理影响结果。
8. 敏感性分析与反证
观察性结论要展示在假设变化下是否稳定:
- 改变调整集、模型形式、带宽或权重截尾;
- 用负对照结果/暴露检查不应存在的关系;
- 检查处理前结果是否被“处理”预测;
- 量化多强的未测混杂才能推翻结论;
- 报告 overlap 不足的群体并缩小目标总体;
- 将不同识别策略的结果并列,而不是只挑有利者。
敏感性分析不能证明假设成立,但能说明结论依赖它到什么程度。
9. 因果报告最少包含什么
目标试验与 estimand
数据来源、纳入规则和时间零点
DAG 与调整集理由
识别假设及其不可检验部分
重叠、平衡和权重诊断
主效应、区间与绝对风险
替代模型和敏感性分析
适用总体与不能回答的问题常见误区
- 控制变量越多越接近因果:媒介和对撞变量可能改变或制造偏差。
- propensity score 匹配等于随机实验:它只处理已测混杂并依赖重叠。
- 工具与处理显著相关就够了:独立性和排除限制通常更难论证。
- DAG 从数据学出来就客观:纯观测分布通常不能唯一确定因果方向。
练习
- 为训练时长、经验、协作熟练度、受伤和成功率画 DAG,并选择总效应调整集。
- 用模拟数据展示控制对撞变量如何制造关联。
- 做倾向评分加权,报告加权前后标准化差异、overlap 和有效样本量。
- 审查一个候选工具变量的相关性、独立性、排除限制和目标 estimand。
小结
因果推断要求目标试验、因果图、时间顺序和识别假设彼此一致。方法可以在假设下估计效应,但模型运行成功不能证明这些假设。
下一章处理规模问题:当单机内存容不下数据时,先理解分区、shuffle、容错和执行语义,再决定是否采用分布式系统。