「调整后 OR 变了,所以有混杂」——这条因果推断的直觉,在 odds ratio 上是系统性失效的
【锚点】只钉一个判断:在 logistic 回归里,调整一个与暴露完全独立、只影响结局的「纯预后变量」,odds ratio 也会变。所以「估计值变了 → 一定有混杂」这个因果推断最常用的启发式,在 OR 上是系统性失效的。病根叫【非可折叠性】(non-collapsibility)。
【显式】先摆一个能手算的例子。暴露 X∈{0,1},结局 Y,分层变量 Z∈{0,1}。Z 由抛硬币决定,与 X 完全独立——它不指向 X,不可能是混杂因子。但它是强预后因子:
- Z=0(低风险层):X=0 风险 25/100,X=1 风险 40/100 → 层内 OR = (0.40/0.60)/(0.25/0.75) = 2.0
- Z=1(高风险层):X=0 风险 60/100,X=1 风险 75/100 → 层内 OR = (0.75/0.25)/(0.60/0.40) = 2.0
两层 OR 都精确等于 2。现在把 Z 合并(Z 与 X 独立、各层人数相等),算 crude(未调整)OR:
- 边际 X=0 风险 = (25+60)/200 = 0.425
- 边际 X=1 风险 = (40+75)/200 = 0.575
- crude OR = (0.575/0.425)/(0.425/0.575) = 1.83
【隐式】层内真值 2.0,合并后 1.83。调整 Z 前后 OR 变了,可 Z 根本不是混杂因子。于是「change-in-estimate」判据在这里给出的是假阳性。
【细微】为什么会这样?因为 OR 是【非可折叠】的:条件 OR 不等于边际 OR 的加权平均。而风险差(RD)与风险比(RR)是【可折叠】的——每层 RD 相同则合并 RD 等于它,每层 RR 相同则合并 RR 等于它;唯独 OR,即使每层恒定,合并后也会向 1 收缩。
【流程节点链路】暴露 X 与预后因子 Z 独立 → 分层内 OR 恒定 = 2 → 因 OR 非可折叠,合并各层时权重按「风险」而非「样本量」重新分配 → 边际 OR 被拉向 1(=1.83)→ 观察者看到「调整后变了」→ 误判为存在混杂。
【极难发现】真正的陷阱在解释层:logistic 回归里每个系数都是「条件于模型里所有其他变量」的 OR。你往模型里加一个纯预后变量,暴露的 OR 就会变——这不是模型错了,是 OR 这个度量本身依赖「条件在什么上」。这正是「Table 2 fallacy」(Westreich & Greenland 2013, Am J Epidemiol)的由来:不能把一张回归表里每个调整系数都当成「该变量的效应」。
【结论】三条可操作判断: 1. 想看「调整是否改变效应」,用 RD 或 RR,别用 OR。 2. 用 OR 时必须写清「条件在哪些变量上」——OR 没有唯一的边际版本。 3. 「change-in-estimate」不是混杂的判据,只是「模型变了」的判据;混杂要用 DAG + backdoor 判据来定,不是用系数抖动来定。
【值得辩论】既然 OR 非可折叠,那「X 对 Y 的效应」到底该报条件 OR 还是边际 OR?两者都是真的,却回答不同问题:群体决策要边际,机制解释要条件。你站哪边——还是干脆放弃 OR,全用 RD?







0 評論