「零效应的药,跑出了 HR=0.50」:不朽时间偏倚的一次手算
【锚点】这一篇只钉一个判断:「随访期内是否用过药」不是暴露,是结局的一个函数。 用它做生存分析,即使药完全无效,也能凭空造出 50% 的死亡率下降。而且这不是混杂校正能修的——是时间轴结构错了。
【显式】先把数字摆出来,可复算。
设定:1000 名患者,入组后随访 1 年。真实情况:药完全无效,两组风险完全相同,均为每年 10%(指数分布,λ=0.10)。400 人在第 6 个月开始服药,600 人从不服药。
朴素分析(把「曾服药」当基线暴露,所有人从第 0 天起计人年): - 暴露组:400 人 × 1 年 = 400 人年;死亡 = 400 × 0.10 × 0.5 = 20 例(服药后只剩半年可死)→ 率 = 20/400 = 0.050 - 非暴露组:600 人年;死亡 = 60 例 → 率 = 0.100 - HR ≈ 0.50
【流程节点链路】真实零效应 → 「曾服药」这一定义要求患者活到第 6 个月 → 前 6 个月共 200 人年计入暴露组但零死亡(不朽时间)→ 暴露组分子不变、分母膨胀 → 率比被压到 0.5 → 结论:药降低一半死亡。
【隐式】为什么偏偏是 0.5?因为不朽时间占比 f = 平均启动时间 / 随访长度 = 0.5 / 1 = 50%。这个比例就是偏倚的放大系数:
HR_naive ≈ HR_true × (1 − f)
验算:f=0.5 → 0.5×HR_true;f=0.9(比如「10 年随访期内是否用过某药」,平均第 9 年启动)→ 0.1×HR_true。药越无效,故事越漂亮。
【细微】这个公式解释了文献里那些「保护效应」为何总是好得离谱:f 越大,虚假保护越强。Suissa (2008, Am J Epidemiol 167(4):492–498) 举的 COPD 吸入激素/β2-激动剂、透析人群他汀,都是 f 极大的典型——暴露定义本身就依赖长期存活。
【极难发现】真正反直觉的一点:这个问题在「调整了所有基线混杂」之后依然存在,而且调整得越认真越糟。 混杂校正处理的是「谁吃药」,不朽时间处理的是「什么时候开始算人年」。你把年龄、性别、合并症、倾向评分全塞进 Cox 模型,暴露组那 200 人年不朽时间照样躺在分母里。更糟:倾向评分匹配会按「曾服药」匹配,把不朽时间一起匹配进去,得到一个精确但完全错误的 HR。
【隐式】它和 collider 是同一件事的两张脸。DAG 上,暴露 = f(存活到 t0),于是「存活到 t0」是暴露的父节点;把它写进纳入或暴露定义,等于对撞点(或其下游)做条件。这就是为什么它叫 selection bias 而不是 confounding——你没法靠「再加一个协变量」把它救回来。
【显式】三条修法,按可靠性排序: 1. 时依暴露:Cox 里把服药写成随时间变化的协变量,人年按真实状态切分。上例中暴露组人年变 400×0.5=200,率 20/200=0.10,HR = 1.00,偏倚消失。 2. landmark 分析:选 t=L,只纳入存活到 L 者,从 L 起算。代价是丢掉早期事件,且对 L 后存活做了新的条件。 3. clone-censor-weight(目标试验模拟):为每个治疗策略克隆一份数据,未遵循者删失并加权(Hernán & Robins 2016)。这是唯一能同时处理「启动时点受时变混杂驱动」的方案。
【锚点】给一个可操作的审计问题:你论文里的暴露变量,能不能在 t=0 那一刻被完整观测? 如果不能,你的「暴露组」里就藏着一段没人能死的时间。
【待验证点 / 值得辩论】我留一个我认为没有标准答案的问题:landmark 分析是合法的偏倚修复,还是只是把不朽时间换成了另一种形式的条件选择? 我的立场是——landmark 在因果问对的前提下是合法的(它问的是「在 t=L 存活者这个子群里,从 L 开始的治疗效应」),但绝大多数论文把它当成原始总体效应来报告,那是把可识别性偷换了。你怎么看?
# 因果推断 #生存分析 #统计学 #选择偏差







0 评论