「吃药的人活得更久」——因为死人在药房里排不了队:不死时间偏倚的单向性
【锚点】这一篇只钉一个判断:队列研究里最常被当成「混杂」处理掉的那个偏差,其实叫【不死时间偏倚 immortal time bias】——它不来自「谁吃了药」,来自【暴露的定义偷看了未来】。而且它有一个可怕的数学性质:偏倚方向是单向的。
# 先看一次真实的对撞
【显式】护士健康研究(Nurses’ Health Study,Grodstein et al. 1996):激素替代疗法 HRT 与冠心病,相对风险约 0.60,保护效应。 【显式】WHI 随机对照试验(2002):同一个药、同一个结局,冠心病风险比约 1.29,方向反了。
【隐式】两者之间的一部分差距,不是人群不同,是分类规则不同:在 NHS 里,一位女性如果在第一次心梗之后才去开第一张 HRT 处方,她会被永久归入【未暴露】。而在她开出处方之前的那段时间,她必须先活着——这段被保证的存活时间,被记在了未暴露组的账上,把未暴露组的死亡率抬高了。
# 一个能算的演示:药完全无效,却能算出 23% 的保护
设定:100 人入组,随访 1 年,年内共 50 人死亡、死亡在时间上均匀分布。药是惰性的,真实效应 = 0。 暴露定义(naive,也是很多论文的实际写法):出院后第 90 天之前开过药 = 暴露。
- 第 90 天前死亡约 12.3 人 → 这批人【不可能】成为暴露者,被强制归入未暴露组。
- 活到第 90 天约 87.7 人,其中一半开了药:暴露组约 43.9 人,未暴露组约 43.9 人。
- 剩余死亡 37.7 人在 87.7 人中均匀发生:暴露组死 18.9,未暴露组死 18.9。
- 未暴露组总死亡 12.3 + 18.9 = 31.2,死亡率 55.5%。
- 暴露组死亡 18.9,死亡率 43.0%。
风险比 = 0.78。一个【凭空出现的 22% 保护效应】,p 值漂亮,Table 1 平衡,倾向评分也救不了。
【流程节点链路】起点【t=0 入组 100 人,药效为零】 → 节点1【暴露定义使用了 t<90 天的处方记录,这是一个未来信息】 → 节点2【t<90 天死亡的 12.3 人不可能成为暴露者,被强制归入未暴露组】 → 节点3【未暴露组吸收全部早期死亡,死亡率被抬到 55.5%】 → 节点4【暴露组的风险从第 90 天才开始计,死亡率 43.0%】 → 终点【RR=0.78 的「保护效应」完全由分类规则制造,与药无关】。
# 图钉分级:这个偏差藏得有多深
【显式】naive 表里暴露组死亡率更低,还显著。 【隐式】两组的随访起点其实不同:暴露组从第 90 天起算,未暴露组从第 0 天起算。 【细微】两组的【人-时】分母覆盖的不是同一段时间;早死者的那 90 天从未有机会被计入暴露。要发现它,你得把 person-time 按暴露状态逐段切开比对,而不是看汇总表。 【极难发现】即使你做倾向评分匹配、多变量调整、把「基线健康程度」当协变量——偏倚仍在,因为问题不在协变量,在【暴露变量的时间戳】。更反直觉的是它的方向性:这个偏倚恒为「夸大保护效应」,它不会让你低估。推论是残酷的——【阴性结果对这种偏倚免疫,阳性结果对它毫无免疫力】。所以「观察性研究显示有效」这句话的信息量,取决于作者有没有交代暴露的时间戳,而不取决于 p 值。
# 三条修法,代价各不相同
- 【landmark analysis】把第 90 天设为新的 t=0,只分析活到第 90 天的人。干净,但扔掉约 12% 的样本,而且你估计的目标人群变了——变成「存活者中的效应」。
- 【时依暴露 Cox】暴露作为时间依赖协变量:暴露前的人-时记未暴露,暴露后切换。这是药代流行病学的标准解(Suissa 2008 正式命名并系统化)。
- 【clone-censor-weight / 目标试验模拟】每个个体复制成「立刻暴露」与「永不暴露」两个克隆,谁违背就被删失并加权。口径最干净,代价是你必须把目标试验写清楚。
# 数据可视化:把偏倚画成一根灰条
画一张 Lexis 图:横轴随访时间,纵轴每个个体一行,暴露前那段涂灰。灰条的长度就是偏倚的物理尺寸——它是一段「被保证的生存」。审稿时先看这张图,比看 Table 1 有用得多;一张图能暴露的,汇总表永远藏得住。这也是我这些年最坚持的一条可视化原则:不要画【结论的形状】,要画【数据的形状】,因为偏倚住在形状里。
# 留给你的问题
如果一种偏倚只会往一个方向推,我们是不是该停止问「这个观察性结果显著吗」,改问「这个效应量里有多大比例能被时间戳解释掉」?
更尖锐一点:在你画出那张 Lexis 图之前,你其实并不知道自己的暴露变量是不是一个未来信息。你上一次检查自己的暴露变量,是在数据收集之前,还是在审稿人问起之后?







0 评论