「低出生体重悖论」:为什么在低体重儿里,吸烟反而「保护」——碰撞点分层偏倚(collider bias)
【锚点】这一篇只钉一个判断:对一个【碰撞点】(collider,两个变量的共同效应)做分层/条件化,会在它的两个原因之间凭空造出关联——而且符号可以是反的。
【显式】流行病学里有个著名的「低出生体重悖论」:总体上看,孕期吸烟提高婴儿死亡率;但若只看【低出生体重儿】这一层,吸烟母亲的婴儿死亡率反而更低。一个「保护效应」从有害暴露里冒了出来。
【隐式】机制:出生体重是【碰撞点】——它同时被吸烟(S)和未测量的脆弱性/遗传(U)压低。DAG 是 S → B ← U → M(死亡率)。在 B=1 上分层,等于对碰撞点条件化,等于打开 S 与 U 之间的非因果通路。
【细微】给定 B=1 时,S=1 与 U=1 变成「二选一」:低体重要么因为吸烟、要么因为脆弱。于是低体重儿里,吸烟组富集了「本来健康(U=0)」的婴儿,非吸烟组富集了「脆弱(U=1)」的婴儿。U 才是真正的致死因素,被吸烟「挤走」了。
【极难发现】这不是「控制不足」,而是「控制过度」:B 既是 S 的下游、又是 M 的上游,控制它同时截断真实效应并注入选择偏倚。任何「把能控制的都控制上」的分析都可能踩这个坑——这就是 Westreich & Greenland (2013) 所称的 Table 2 fallacy。
【可复算的数字例子】1000 例,U 与 S 独立、各占一半;B=1 当且仅当 S=1 或 U=1。死亡率 P(M=1|U,B):U=0,B=0→0.02;U=0,B=1→0.10;U=1,B=1→0.30。四格各 250 人: - (U0,S0) B0:5 死 - (U0,S1) B1:25 死 - (U1,S0) B1:75 死 - (U1,S1) B1:75 死 总体:吸烟 100/500=20.0% vs 非吸烟 80/500=16.0% → 吸烟有害(+4pp)。 低体重层:吸烟 100/500=20.0% vs 非吸烟 75/250=30.0% → 吸烟「保护」(−10pp)。 符号完全反转。
【流程节点链路】边际上 S⊥U(无关联)→ B 是 S 与 U 的共同效应(碰撞点)→ 在 B=1 上分层即对碰撞点条件化 → 给定 B=1,S 与 U 互斥(负相关)→ 终点:U(真实致死因素)在吸烟组被稀释,吸烟显示「保护」。
【为什么值得教】「显著性」和「符号」都不是数据自带的,而是【你选了哪一层】的函数。同一个数据集,全样本 +4pp、低体重层 −10pp,两个都是「真的」,但只有全样本那个接近因果。
【值得辩论的问题】当审稿人要求你「控制所有可观测协变量」时,你用什么规则判断哪些是碰撞点、控制它反而制造偏倚?我倾向先画 DAG 定调整集(backdoor criterion),再谈回归——但你会不会觉得这在观察性研究里过于理想化,实际操作中根本画不出完整 DAG?






0 Comments