加了一个和暴露无关的变量,OR 从 2.25 掉到 1.75:非可折叠性不是偏差,是尺度
【锚点】这一篇只钉一个判断:【在 logistic 模型里,「调整后系数变了」不能当作「存在混杂」的证据。因为 OR 不可折叠(non-collapsible):哪怕你调整的 Z 与暴露 X 在统计上完全独立,OR 也会从 2.25 掉到 1.75,而同一份数据的风险差 RD 一动不动。】
【显式】构造(可复现):两个层 Z∈{0,1},各占 50%;X 在每层内都是 50/50,所以 X 与 Z 独立,Z 不是混杂因子。生成机制 logit P(Y=1 给定 X,Z) = α_z + βX,β = ln 2.25 ≈ 0.8109,α_0 = logit 0.1,α_1 = logit 0.6。
- Z=0:风险 0.100 → 0.200(X 从 0 到 1),条件 OR 2.25,条件 RD 0.100
- Z=1:风险 0.600 → 0.771,条件 OR 2.25,条件 RD 0.171
- 合并 50/50:风险 0.350 → 0.486,边际 OR 1.75,边际 RD 0.136
【流程节点链路】起点:logit p = α_z + βX,β = ln 2.25 → 中间节点 1:在每层内取 X=0/1 两个风险,条件 OR 恒为 2.25 → 中间节点 2:按 Z 的 50/50 分布在【风险尺度】上加权平均,得边际风险 0.350 与 0.486 → 中间节点 3:把这两个边际风险重新变回比值,得边际 OR = 1.75 → 终点:边际 OR ≠ 条件 OR,而边际 RD = 0.136 精确等于条件 RD 的加权平均(0.5×0.100 + 0.5×0.171)。同一份数据,两个数都对,只是回答两个不同问题。
【隐式】为什么会这样:混合是【线性】操作,OR 是【比值】操作。风险可以加权平均,比值不能。Jensen 方向:当条件 OR 恒定且 >1 时,边际 OR 必然被拉向 1(这里 1.75 < 2.25)。线性回归里没有这回事——Frisch–Waugh–Lovell 定理保证「加一个与 X 正交的变量,X 的系数不变」。所有从 OLS 迁移过来的直觉(调整只降方差、不改点估计)在 OR/HR 上直接失效。
【细微】这条推论推翻了一个非常流行的启发式:change-in-estimate(系数变动超过 10% 就判定有混杂)。它把【非可折叠】误读成【混杂】。正确顺序是先用 DAG 写下调整集,再看数据;混杂是因果结构问题,不是系数稳定性问题。Westreich & Greenland (2013) 的 Table 2 fallacy 是同一枚硬币的另一面:一张表里同时报暴露和协变量的调整系数,读者会以为它们共享同一个 estimand。
【极难发现】更深的盲点:在不可折叠尺度上,「真值」这个词必须绑定调整集。边际 OR 与条件 OR 是两个不同的 estimand,不是一个对一个错。这与 Lord 悖论同构(同一份数据,change score 与 ANCOVA 给出相反结论;Glymour 等 2008 用 DAG 说明两者回答不同问题)。生存分析里 HR 同样不可折叠(Martinussen & Vansteelandt 2013):倾向评分匹配给边际 HR,Cox 回归调整给条件 HR,把它们放进同一张森林图比较是范畴错误——不是精度差异,是量纲差异。
【可验证】上面的 α、β 可以直接复现。把 β 换成 ln 1.0 再做一遍,边际 OR 也回到 1——非可折叠只在效应非零时显现,这正是它最容易被误当成「混杂」的原因。
结尾问题:既然 OR/HR 不可折叠且极易被误读,流行病学是否该默认报告风险差与风险比(RR 可折叠),把 OR 降级为模型副产品?Greenland 长期主张前者,但临床预测模型又离不开 OR 的可加性。你站哪边——换尺度,还是换读者的训练?







0 Comments