控制变量不是越多越好:出生体重悖论,与「对撞因子」如何凭空造出一个假关联
【锚点】这一篇只回答一个问题:为什么「把所有能想到的变量都塞进模型」在因果推断里不是稳健,而是自毁——以及一个叫【对撞因子】(collider) 的东西,如何在你不注意时凭空造出一条假关联。
一、【显式】一个反直觉的事实
在低出生体重(<2500g)的婴儿里,母亲孕期吸烟的婴儿死亡率反而更低——吸烟看起来「保护」了这些孩子。这不是段子,是流行病学里著名的【出生体重悖论】。Hernández-Díaz、Schisterman 与 Hernán 2006 年在 Paediatric and Perinatal Epidemiology 上把它拆开:这个「保护效应」是假的,是控制了一个不该控制的变量造出来的。
二、【隐式】机制:出生体重是共同结果,不是混杂
画个有向无环图(DAG):
吸烟 S → 低出生体重 B 先天异常/社会经济劣势 U → 低出生体重 B 吸烟 S → 婴儿死亡 D U → 婴儿死亡 D
B 同时被 S 和 U 指向——B 是一个【对撞因子】:两条箭头在它这里「对撞」。在整个人群里,S 与 U 可以无关。但一旦你【只看低出生体重儿】(条件化于 B),你就人为地让 S 与 U 产生了负相关:一个低体重儿,若妈妈吸烟,它「更可能」不是先天异常导致的;若妈妈不吸烟,它「更可能」是先天异常导致的。于是吸烟组里 U 的占比被压低、非吸烟组里被抬高——吸烟看起来就「保护」了。
【流程节点链路】:全人群 → 按出生体重分层(条件化于对撞因子 B)→ S 与 U 被诱导出负相关 → 吸烟组 U 占比↓、非吸烟组 U 占比↑ → 婴儿死亡率出现虚假的「吸烟保护」 → 结论反转。
三、【细微】「控制变量」的两种命运
同一个动作——「把变量放进模型」——在不同结构位置有完全相反的后果:
- 控制【混杂因子】(confounder):X ← C → Y,C 同时指向 X 和 Y。控制它,切断后门,减少偏倚。这是教科书教你的。
- 控制【对撞因子】(collider):X → C ← Y。控制它,打开一条后门,制造偏倚。
所以「控制所有变量」这个启发式在结构上就是错的。Pearl 的 backdoor criterion 说的不是「控制得多」,而是「控制对」。
四、【极难发现】偏倚方向事先看不出来
更麻烦的是:对撞偏倚的方向取决于未测量变量 U 的分布,而 U 在数据里看不见。于是—— 1. 你无法从数据本身判断自己是否踩了对撞; 2. 偏倚可能让效应变大、变小、甚至反号(出生体重悖论就是反号); 3. 增加样本量救不了你——这是【系统性偏倚】,不是抽样误差。N 再大,你只是更精确地估计了一个错的东西。
五、可检验的推论
如果对撞偏倚在起作用,那么:把分析限制在 B 的窄区间(如只取 2000–2500g),「吸烟保护」效应应更强;在 B 的全范围上不条件化,效应应消失或反转。Hernández-Díaz 的数据正是这个模式。这是可证伪的——任何有 collider 结构的数据集都能拿去复现。
六、留给辩论的问题
现在很多「稳健性检验」的做法是:主模型 + 逐步加入协变量,看系数稳不稳。但如果某个协变量是对撞因子,加它会让系数「变稳」——稳在一个偏的值上。那么:一个系数在加了一堆控制变量后变得非常稳定,这到底是稳健性的证据,还是对撞偏倚的证据? 在没有 DAG 的情况下,你分得清吗?







0 Comments