「低体重儿悖论」:一次统计调整如何凭空造出「吸烟保护婴儿」
【锚点】这一篇只钉一个判断:在「低出生体重儿」这个子群里比较「母亲吸烟 vs 不吸烟」,你比较的不是吸烟的效应,而是两种完全不同的低体重成因。在这里,条件化没有消除混杂,反而制造了混杂。
【显式】先把反直觉的事实摆出来。全人群层面,孕期吸烟与婴儿死亡风险升高相关(OR 约 1.2–1.4,方向在几十项研究里一致)。但只看「足月、出生体重 < 2500g」的婴儿,吸烟母亲的婴儿死亡率反而更低,OR 掉到 1 以下。这个现象 1960 年代就被记录,1990 年代被反复确认,文献里叫 birth weight paradox。Hernández-Díaz、Schisterman 和 Hernán 2006 年在 Am J Epidemiol 上用 NMIHS 数据把它拆穿了(The birth weight “paradox” uncovered)。
【隐式】关键:出生体重不是混杂,是对撞变量(collider)。它同时被两样东西决定:(a) 母亲吸烟,(b) 一大堆别的因素(胎盘病理、感染、社会经济、遗传)。而婴儿死亡同时受出生体重和那些别的因素影响。
【流程节点链路】起点:母亲吸烟 S → 中间节点一:出生体重 B(S 是 B 的一个原因)→ 中间节点二:未测因素 U 也指向 B(U → B)→ 中间节点三:在 B < 2500g 上条件化(「只看低体重儿」)→ 中间节点四:条件化一个对撞变量,在 S 与 U 之间打开一条非因果的负相关路径(S 低、U 高的组合被筛掉)→ 终点:子群里估计的 S → 婴儿死亡 Y 的关联,混入了 U → Y 的效应,符号可以被翻转。
【细微】为什么是负相关?在低体重儿里,一个不吸烟的母亲生出 2500g 以下的婴儿,更可能是被病理因素 U 推下去的;一个吸烟的母亲生出 2500g 以下的婴儿,可能只是被烟草正常地压低了生长。于是子群里的「不吸烟组」富集了高危病理,「吸烟组」相对干净。你看到的「吸烟保护」,其实是「不吸烟组的低体重更凶险」。
【极难发现】这属于「调整」这个动作本身的语义陷阱,并非「调整错了变量」这种低级错误。口语里说「控制了出生体重」,听起来像把 B 的影响扣掉;但在 DAG 上,条件化 B 会新增一条 S 与 U 之间的路径,并不会扣掉一条边。凡是「控制 XX 之后效应反转」的结果,第一反应该是「XX 在 DAG 上是不是对撞变量」,而不该是「发现了新效应」。
【显式】修法: 1. 按胎龄分层(胎龄在 S→B 路径上更靠前,且是 B 的原因),或用同胎龄的出生体重 Z 分数; 2. 用 g-formula 或标准化,在干预语义下定义对比(「如果所有人都吸烟 vs 所有人都不吸烟」),不在观测子群里做条件比较; 3. 画出 DAG,标出哪些是混杂、哪些是中介、哪些是对撞——三者需要的处理完全不同。
【隐式】这个悖论有大量同构体:住院人群里的 Berkson 悖论、心血管里的「肥胖悖论」、疫情期间「插管病人里肥胖反而保护」的报道,以及所有「按基线后变量分组」的分析。它们的共同骨架是同一句话:在原因的下游做条件化,等于在结果的上游制造偏倚。
【锚点-结论】所以「我调整了 15 个变量」不是一个可信度声明。变量数不是证据,DAG 才是。一个没画 DAG 的多变量模型,你无法判断它关上了几扇后门、又打开了几扇。
值得辩论的问题:现行证据分级体系(GRADE、NOS、RoB)系统性地惩罚「未调整混杂」,却几乎从不惩罚「调整了对撞变量」,而后者的符号翻转可能更彻底。如果一篇观察性研究预注册了 DAG 但 DAG 画错了,和一篇没预注册但结论稳健的研究,你更信哪一个?







0 Comments