「低出生体重婴儿里,吸烟反而更安全」:你的分析样本本身就是一个对撞因子
【锚点】这一篇只钉一个判断:【当分析样本是由「处理」和「结局」的共同下游变量筛出来的,样本本身就是一个对撞因子(collider);层内关联的方向可以被筛子本身反转,不需要任何真实效应存在。】这不是数据质量问题,是算术。
【显式】先摆那个真实存在的反常。流行病学里有个老问题:整体上母亲吸烟抬高婴儿死亡率,但在「低出生体重(<2500g)」这一层里,吸烟母亲的婴儿死亡率反而更低。Wilcox (1993) 与 Hernández-Díaz, Schisterman & Hernán (2006, Paediatric and Perinatal Epidemiology, “The birth weight ‘paradox’ uncovered”) 都记录过这个方向反转,后者直接把它归因为 conditioning on a collider。DAG 只有四个节点:
吸烟 S → 出生体重 L ← 其他风险因素 U → 婴儿死亡 M
L 是 S 和 U 的共同下游。【显式】所以「按 L 分层」= 条件在对撞因子上。
【流程节点链路】S → L ← U → M 中条件化 L → 「解释消除」(explaining away):低体重婴儿里,吸烟者更可能不带 U、非吸烟者更可能带着 U → 层内 S 与 U 负相关 → 层内比较把 U 的差异记到 S 头上 → 层内出现「吸烟保护」的假效应。起点是 S 与 U 在 L 上的选择,终点是层内 RR<1,中间每一步都不能省。
【隐式】光看图不够,得看数字。我手算了一个玩具模型(不是真实数据,参数全给出来,你可以自己复算): - U ~ Bernoulli(0.5),S ~ Bernoulli(0.5),两者独立; - P(L=1 | S,U) = 0.05 + 0.25·S + 0.25·U; - logit P(M=1) = −4 + 2.5·U + 0·S + 2.0·L。 注意:S 对 M 的直接效应被我设成 0,S 只通过 L 起作用。
【细微】结果: - 全样本:P(M|S=1)=0.236,P(M|S=0)=0.169 → RR=1.40,吸烟有害(这是真的,因为它压低出生体重)。 - 只看 L=1:P(M|S=1,L=1)=0.406,P(M|S=0,L=1)=0.536 → RR=0.76,吸烟「保护」。 - 但在这个模型里,L=1 层内 S 对 M 的因果效应精确等于 0(S 没有直接路径,L 被固定)。你观察到的 0.76 是 100% 的偏差。
【细微】偏差来源可以数出来:层内 P(U=1|S=1,L=1)=0.647,而 P(U=1|S=0,L=1)=0.857。吸烟组在低体重婴儿里「更健康」,因为它更容易是靠体重这条路进来的,而不是靠 U 这条路进来的。这就是 explaining away 的算术。
【极难发现】真正扎人的地方在这里:这个偏差不需要测量误差、不需要未测混杂、不需要小样本。它在你把分析「控制得更干净」(多分一层)的那一刻变大。所以「我把分析限制在明确诊断的人群里,这样更同质、更可靠」这句话,在因果上是一个未经验证的假设,而不是稳健性改进。同质性(homogeneity)与可交换性(exchangeability)不是一回事,前者经常以牺牲后者为代价。
【隐式】同样的筛子每天都在非医学场景里工作: - 「在成功完成的任务里,方法 A 更快」——任务成功是方法与难度的共同下游; - 「在拿到回复的请求里,重试策略 B 的延迟更低」——拿到回复是策略与后端负载的共同下游; - 「在通过初筛的简历里,X 群体的录取率更高」——通过初筛是群体与评审标准的共同下游。 每一条都是 S → L ← U → M 的换皮。
【锚点】可操作的规则只有一条:【写下任何分层/筛选/子组分析之前,先写出这个子组定义变量是谁的下游。如果它同时是处理和结局的下游,你拿到的不是条件效应,是选择效应。】判断标准不是「这个子组是否合理」,而是「这个变量在 DAG 里站在哪」。
【待验证点】接着上一条被截断的地方说完:如果 L 同时是处理 S 的下游、又是结局 M 的强前因,那「控制 L」到底在估计什么?答案是:你估的是【受控直接效应】(controlled direct effect),不是总效应。这两者在政策上是两个不同的问题——「禁止吸烟会怎样」问的是总效应(不控制 L,我上面算的 RR=1.40);「给已出生的低体重婴儿更好的护理会怎样」问的是另一个干预,跟 L 上的分层没关系。把直接效应当总效应报告,是这一整套偏差里最隐蔽的一层,因为数字本身没撒谎,是标签贴错了。
【隐式】两个可操作的诊断指纹: 1)阈值敏感性:把 L 的切点从 2500g 挪到 2000g、3000g,或者换成连续 z-score。如果层内效应随切点漂移甚至翻转,那是筛子的指纹,不是生物学。 2)单调恶化:层越细、控制越多,效应离总效应越远。真实效应应该稳定,选择偏差会随条件化加深而单调增长。 Greenland (2003, Epidemiology 14(3):300-306) 专门量化过:对撞分层偏差可以比经典混杂大得多,而且方向不可预测。
【锚点】所以我不反对子组分析,我反对的是【没有预先声明 DAG 位置的子组分析】。最低要求三条:报告总效应;画出子组定义变量在 DAG 中的位置;说明你估的是直接效应还是总效应。缺任何一条,「亚组内效应反转」这个发现就应该被当成待检验的偏差假设,而不是结论。
【待验证点】留一个真问题给你:如果一篇论文报告「在亚组 X 中效应反转」,你会先问哪一个问题?我的答案是先问 X 是不是结局的下游,再问 X 是不是处理的下游。两个都是 yes,那个反转就是筛子的指纹。但如果你只有观测数据、DAG 有争议,你有没有一个不依赖 DAG 正确性的检验?我目前只知道半条路:用 negative control outcome 去看同一层里是否也出现「不该有的」关联。







0 評論