后门准则:把偷偷绕过去的路堵死
「该控制哪些变量」这个问题,几十年里靠的是经验、习惯和期刊审稿人的口味。后门准则把它变成了一个图上的判定问题——有确定答案,而且可以让机器去搜。
你要估计「某种疗法 X 对康复 Y 的效果」。手上有四个变量可以放进回归:A 病情严重度(治疗前测的)、B 医院等级、M 用药量(治疗方案定下来之后决定的)、R 是否复诊(治疗之后的行为)。该放哪些?
这一章之后,这道题不需要「觉得」,可以直接判。
后门路径
第 2 章里出现过这个词,现在给精确定义。
从 X 到 Y 的一条路径,如果第一支箭头是射进 X 的(即形如 X ← …),就叫一条后门路径(backdoor path)。
X ← A → Y 这是后门(第一支箭头指着 X) X ← A ← B → Y 这也是后门 X → M → Y 这不是,这是因果通路(第一支箭头从 X 射出去)
名字的画面感很准:因果效应从前门走(顺着箭头出去),混淆从后门绕(逆着箭头进来)。两种关联在数据里长得一模一样,你要做的是把后门堵上,只留前门。
为什么「第一支箭头射进 X」这个判据抓的正好是混淆?因为箭头射进 X,意味着这条路上有东西在影响 X;而它又能通到 Y,说明它也在影响 Y(或者通过某个共同原因)。这正是第 2 章那只手的形状。
后门准则
一组变量 Z 满足关于 (X, Y) 的后门准则,如果:
- Z 里不包含 X 的任何后代;
- Z 堵住 X 与 Y 之间的所有后门路径(按第 6 章的通断规则判定)。
如果 Z 满足后门准则,那么因果效应可以算出来:
P(Y | do(X=x)) = Σ_z P(Y | X=x, Z=z) × P(Z=z)
这个式子叫调整公式(adjustment formula),第 12 章会逐项拆开。
两条要求各管一件事,而且都不能少:
- 第一条防的是「控制了不该控制的」。X 的后代包括中介(第 11 章)、对撞机(第 7 章)、以及处理之后发生的一切。这一条一刀切地把它们全排除了。
- 第二条防的是「该控制的没控制」。只要还有一条后门开着,估计就是偏的。
注意第一条的形式:它不是「Z 里不能有对撞机」。它比那个更粗暴也更安全——只要是 X 的后代,一律不要。因为在实践中你未必分得清一个后代到底是中介还是对撞机,而这条规则不需要你分清。
让机器去搜
准则是可以机械执行的,所以可以写成程序。下面这台搜索器做三件事:枚举所有后门路径、判定你选的调整集、并且穷举所有子集找出全部可用的极小集。
那张图上,从 X 到 Y 一共有:
后门路径 2 条:
X ← A → Y
X ← B → Y
有向(因果)路径 1 条:
X → M → Y ← 这条必须留着,它就是我们要测的东西
四个候选变量的 16 个子集里,满足后门准则的只有 1 个:{A, B}
而它同时也是极小的。
逐个试一遍会更有感觉:
- 只放 {A}:不通过——
X ← B → Y还开着。 - 只放 {B}:不通过——
X ← A → Y还开着。 - 放 {M}:不通过,理由是第一条——M 是 X 的后代。
- 放 {R}:不通过,同样是第一条——R 也是 X 的后代(而且它还是个对撞机)。
- 放 {A, B, M}:不通过。加了正确的 A、B,但只要多带一个 M,整个集合就废了。
最后一条值得盯着看:{A, B} 可用,{A, B, M} 不可用。后门准则不是「越多越好」,它是一个精确的集合条件——加错一个成员,整组作废。
换个角度看这件事:你剪不动真实世界的箭头,那就在算式里把后门堵上。
随机化是物理上剪断 C → X;调整是数学上让那条路失效。两者达到同一个效果——让「看到 X=1 的那些人」和「被拨成 X=1 的那些人」变成同一批人(至少在 Z 相同的每一层内部是这样)。
所以调整法也常被叫做「统计上的随机化」。但它有一个随机化没有的软肋:它只能堵住你测到了的那些后门。
这个方法最大的软肋
后门准则告诉你「哪些变量要控制」,但它有一个不能回避的前提:那张图得是对的,而且要控制的变量你得真的测到了。
现实里最常见的失败不是「选错了调整集」,是「有一个混淆变量你根本没测」——它在图上,但不在你的数据表里。这时候后门准则会诚实地告诉你:没有可用的调整集。
这个「诚实」很重要。它不会给你一个凑合的答案,它会说无解。而知道无解,比拿到一个假答案强得多——因为你会去找别的办法(第 13 章的前门,第 19–21 章的自然实验),而不是把一个有偏的数字写进报告。
你在文献里会遇到几个说法:可忽略性(ignorability)、条件独立假设(CIA)、无未测混淆(no unmeasured confounding)、选择在可观测量上(selection on observables)。
它们说的基本是同一件事,只是来自不同传统:前两个来自潜在结果框架(第 15 章),后两个一个来自流行病学、一个来自计量经济学。
而在图的语言里,它们就是「你的 Z 满足后门准则」。图的好处在于,它把一句不可检验的口头承诺,变成了一张可以指着吵架的图。
这套东西的工程用法,是把「控制变量清单」变成一次代码评审。
下次看到一份分析报告写着「我们控制了年龄、性别、地区、设备、使用时长」,可以逐条问:
- 「使用时长」是在处理之前测的,还是之后?如果之后——它是 X 的后代,第一条就否了。
- 有没有哪个明显的混淆没在这个清单里?(比如用户的付费意愿、账号的来源渠道)
- 这个清单里有没有哪个是「处理之后才发生的行为指标」?那几乎一定是对撞机或中介。
顺带说一句:DAGitty(dagitty.net)是一个免费的网页工具,画好图它就能自动给你所有的极小调整集,和这一章的搜索器做的是同一件事。R 和 Python 都有对应的包。第 24 章会给完整的入口。
{A, B} 可用而 {A, B, M} 不可用——多一个成员就整组作废。
「多控制点更保险」这个直觉之所以顽固,是因为它在预测问题里基本成立:多一个特征顶多过拟合,不会让你的预测系统性地偏。
但因果估计不是预测。在因果估计里,多一个变量可以把符号弄反。第 12 章下一章就会给你看:真值 +5.00,控制对了得 4.96,多控制一个得 3.31,只控制那一个错的得 −4.81。
这也是为什么「把所有列都丢进模型让它自己学」在因果问题上是危险的:机器不知道哪些列是处理之后才有的。
B放 A 和 B,不放 M 和 R。
A(病情严重度)和 B(医院等级)都在治疗之前定下来,且同时影响「用不用这个疗法」和「康复」——它们各自撑着一条后门,必须都堵。M(用药量)和 R(是否复诊)都发生在治疗之后,是 X 的后代,被后门准则第一条直接排除。
搜索器的答案是:16 个子集里唯一可用的是 {A, B}。
A 「全放」——违反第一条。而且不是「稍微差一点」,是让整个估计失效。 C 「放 M 不放 R」——察觉到 R 有问题(它是对撞机,很显眼),但漏了 M。M 是中介,控制它会把疗法通过用药量起的那部分作用一起抹掉。第 11 章会给你看这一刀砍掉多少:61.9%。 D 「按相关性挑」——第 7 章的教训:相关性完全区分不了混淆和对撞机。相关性是一个对称的量,装不下「谁在前」。这一章的一句话
后门准则把「该控制哪些变量」从一个手艺问题变成了一个图上的判定问题:不要处理的后代,堵住所有后门——两条,缺一不可。
下一章专攻第一条。你会看到两种「看起来完全该控制、控制了就毁掉估计」的变量:一种把真效应 1.293 砍成 0.495,另一种把 0.402 砍成 0.201。第二种尤其阴险——它和处理相关、也和结果相关,长得就像一个标准的混淆变量。