敏感性分析与未测量混杂

用 E-value 和 sensemakr 量化未测量混杂需要多强才能推翻 RHC 结论,强调敏感性分析必须搭配领域知识。

本章要回答的

理解可交换性假设为什么无法用数据验证,掌握敏感性分析的核心逻辑:未测量混杂需要多强才能推翻结论,在 RHC 数据上计算 E-value 并结合 ICU 领域知识解读,用 sensemakr 做遗漏变量偏差分析以 APACHE 评分为基准评估稳健性,建立”敏感性分析必须搭配领域知识”的分析习惯。

前面七章用了多种方法回答同一个问题,结论一致:RHC 增加了 180 天死亡率,风险差在 3 到 5 个百分点之间。这个一致性让人安心,但它建立在一个共同前提上:我们控制的 28 个协变量足以消除处理组和对照组之间的系统性差异。所有方法都假设不存在未测量的混杂变量。

这个假设合理吗?医生决定是否插 RHC 时,除了 APACHE 评分、血压、肌酐这些数据里有的指标,还会参考床旁即时反应、家属意愿、设备空闲情况。这些因素都没有记录。如果其中某个因素同时影响了医生的决策和患者的存活,所有估计都会偏移。本章不产出新的 ATE 估计,它做的事情是压力测试:前面得到的结论有多经得起”万一还有没控制住的混杂”这个质疑?

8.1 不可检验的假设:可交换性

第 2 章引入了因果推断的三大识别假设:可交换性、正值性、一致性。正值性可以通过检查倾向得分分布来诊断,一致性是对处理定义的逻辑约束,这两者都有经验层面的检验手段。可交换性是个例外。

比如在 APACHE 评分都是 70 分的病人中,上导管和不上导管的人,后来死不死应该和他们是否上了导管没有关系,因为 APACHE 70 这一组里的分配已经”近似随机”了。

这个假设说的是:在协变量 LL 的每一层内,处理组和对照组的潜在结果分布相同。它之所以无法检验,是因为我们永远只能观测到一个人在实际处理状态下的结局,看不到他在另一种处理状态下会怎样。要验证可交换性,需要比较”处理组的 Y(0)Y(0)“和”对照组的 Y(0)Y(0)“,但处理组的 Y(0)Y(0) 是反事实,数据里不存在。

在 RCT 中,随机化保证了可交换性。观察性研究没有这个保障,研究者只能尽量把想得到的混杂变量都放进 LL,但”LL 是否足够全面”无法从数据中证实。这就是敏感性分析的出发点:既然无法证明可交换性成立,那就换一个问题,如果可交换性被违反了,违反需要多严重才能推翻我们的结论?

8.2 敏感性分析的思路

敏感性分析的核心逻辑是反向思考。传统分析假设没有未测量混杂,直接估计 ATE。敏感性分析反过来问:假设存在一个未测量混杂 UUUU 需要和处理与结局各有多强的关联,才能把 ATE 估计拉到零?如果答案是”UU 需要非常强才能翻盘”,结论就比较稳健。这个思路由 Rosenbaum 在 2002 年的专著中系统化,本章介绍两种更现代的工具:E-value 和 sensemakr。

8.3 E-value:需要多强的混杂才能翻盘

E-value 由 VanderWeele 与 Ding 在 2017 年提出,它把”未测量混杂需要多强”翻译成一个相对风险的尺度。

先用一个具体例子来看。假设我们估计出 RHC 增加死亡率 RR = 1.34。E-value 回答的问题是:一个我们没有测量到的混杂变量,需要多强才能把这个 1.34 完全解释掉?答案是 E-value = 1.42。意思是这个混杂变量需要同时和 RHC 使用、180 天死亡分别有至少 1.42 倍的关联。如果找不到这么强的遗漏因素,1.34 的效应就不太可能全靠混杂偏差来解释。

下面是 E-value 的正式定义。

公式里的 RRobs\mathrm{RR}_{\mathrm{obs}} 是调整了已知混杂之后的相对风险。E-value 告诉我们,未测量因素 UU 与 RHC 使用和 180 天死亡的关联强度至少要多大,才能让观测到的不利效应完全消失。E-value 越大,翻盘需要的混杂越强,结论越稳健。

8.4 在 RHC 数据上计算 E-value

本章继续使用第 1 章介绍的 RHC 数据集 n=5735n = 5735。AIPW 在第 6 章给出的风险差估计为 0.044,95% CI 为 [0.017,0.072][0.017, 0.072]。要计算 E-value,需要把风险差转换为相对风险的尺度。对照组的 180 天死亡率为 0.465,据此可得调整后的近似 RR(0.465+0.044)/0.465=1.095\mathrm{RR} \approx (0.465 + 0.044) / 0.465 = 1.095

R
set.seed(2026)
library(tidyverse)
library(EValue)

d <- read_csv(here::here("data", "rhc.csv"), show_col_types = FALSE) |>
  mutate(death180_bin = if_else(death180 == "Yes", 1L, 0L))

# 对照组基线死亡率
r0 <- mean(d$death180_bin[d$rhc == 0])

# AIPW 估计的风险差和 95% CI(来自第 6 章)
ate  <- 0.0442
se   <- 0.0139
ci_lo <- ate - 1.96 * se
ci_hi <- ate + 1.96 * se

# 转换为相对风险尺度——E-value 需要 RR 作为输入
rr_point <- (r0 + ate) / r0
rr_lo    <- (r0 + ci_lo) / r0
rr_hi    <- (r0 + ci_hi) / r0

# 计算 E-value:点估计和置信区间下界各一个
ev <- evalues.RR(rr_point, lo = rr_lo, hi = rr_hi)
print(ev)

完整代码见 code/chap08.R 。点估计的 E-value 为 1.42,置信区间下界的 E-value 为 1.23。

点估计 E-value = 1.42 的含义是:一个未测量的混杂因素 UU,需要与 RHC 使用和 180 天死亡各自的关联强度都达到 RR = 1.42 以上,才能把 AIPW 观测到的风险差 0.044 完全解释为混杂偏差。置信区间下界的 E-value = 1.23 更为关键,它意味着 UU 只需要与两端各达到 RR = 1.23,就能让效应的统计显著性消失。

在 ICU 里,能和死亡率产生 1.42 倍关联的变量是什么量级?APACHE 评分与死亡率的关联在 RR = 2 到 3 之间,血压和肌酐在 RR = 1.5 到 2.5 之间。这些变量我们都已经控制了。一个残余的、没被这 28 个变量捕捉到的因素,要同时和 RHC 使用及死亡率各达到 RR = 1.42,在临床上并非不可能,但需要一个相当有影响力的遗漏因素。

8.5 E-value 的领域锚定

1.42 孤立地看没有意义,E-value 的价值在于和领域内已知混杂因素的强度做对比。Connors 等人 1996 年的原始 RHC 论文报告了 APACHE 评分与 RHC 使用的关联约为 RR = 2.0,与 180 天死亡率的关联更强,高评分组死亡风险是低评分组的 2 到 3 倍。血压、肌酐等协变量与两端的关联在 RR = 1.5 到 2.5 之间。

我们已经控制了 APACHE 评分、血压、肌酐等 28 个变量,一个残余的未测量混杂要同时在两端都达到 RR = 1.42 的关联强度,可能性并不高但也不能排除。如果 E-value 达到 3 或 4,结论通常被认为非常稳健;1.42 处于中等偏低的位置,保护有限。

到这里我们有了第一个工具 E-value。它给出了一个数字门槛。接下来要介绍的 sensemakr 会进一步用已观测的协变量作为参照物,让这个门槛更加具体。

同样的 E-value 在不同研究领域意味着完全不同的事情。在药物临床试验中,已知混杂因素的 RR 通常在 1.2 到 1.5 之间,E-value = 1.42 已经接近上限,结论比较安全。在社会科学中,未测量混杂 RR 可达 3 到 5,同样的 E-value 几乎提供不了保护。ICU 医学介于两者之间:已知的强混杂如疾病严重程度 RR 可达 2 到 3,但已被控制。残余混杂要达到 1.42 需要一个相当有影响力的遗漏因素。

8.6 sensemakr:遗漏变量偏差的等高线

Cinelli 和 Hazlett 在 2020 年提出的 sensemakr 框架用偏 R2R^2 来刻画未测量混杂解释处理变异和结局变异的比例,并允许研究者用已观测的协变量作为基准校准”多强算强”。sensemakr 的核心概念是稳健值,英文称 Robustness Value,简称 RV。

RV 假设的是一个最坏情况的混杂:它和我们已经测量的 28 个变量都不相关,是一个全新的、我们完全没有捕捉到的因素。这比”已有变量遗漏了某些信息”更极端,因为如果新混杂和已有变量有相关性,已有变量多少能帮我们控制一部分。RV 不给你这个好处,它直接问:在最坏的情况下,这个全新因素需要解释处理和结局残差方差的多大比例,才能把效应估计拉到零?

sensemakr 还提供了基准校准功能:选择一个已观测的协变量作为参照,问”如果未测量混杂的强度是 APACHE 评分的 kk 倍,效应估计会变成多少”。研究者通常对”比 APACHE 评分强两倍的混杂因素是否存在”有直觉判断,这比纯数字输出更贴近实务决策。

8.7 sensemakr 在 RHC 数据上的应用

sensemakr 需要线性模型作为输入。线性概率模型在这个样本量下的系数估计与 logistic 回归的边际效应接近,且偏 R2R^2 分解在线性框架下有严格保证。

R
set.seed(2026)
library(tidyverse)
library(sensemakr)

d <- read_csv(here::here("data", "rhc.csv"), show_col_types = FALSE) |>
  mutate(death180_bin = if_else(death180 == "Yes", 1L, 0L),
         sex_bin      = if_else(sex == "Male", 1L, 0L),
         cancer_bin   = if_else(cancer == "No", 0L, 1L))

covs <- c("age", "sex_bin", "cancer_bin", "cardiovascular",
          "congestive_hf", "dementia", "psychiatric", "pulmonary",
          "renal", "hepatic", "gi_bleed", "tumor",
          "immunosupperssion", "transfer_hx", "mi",
          "apache_score", "glasgow_coma_score", "blood_pressure",
          "heart_rate", "respiratory_rate", "temperature",
          "albumin", "creatinine", "bilirubin", "wbc",
          "hematocrit", "das_index", "weight")

# 线性概率模型——sensemakr 需要 lm 对象
lin_mod <- lm(death180_bin ~ rhc + .,
              data = d |> select(death180_bin, rhc, all_of(covs)))

# 以 APACHE 评分为基准,分别看 1 倍、2 倍、3 倍强度的混杂
sens <- sensemakr(model = lin_mod,
                  treatment = "rhc",
                  benchmark_covariates = "apache_score",
                  kd = c(1, 2, 3))
summary(sens)

线性模型中 RHC 的系数为 0.053,标准误 0.014,t=3.86t = 3.86p<0.001p < 0.001。处理变量对结局的偏 R2R^2 仅为 0.26%,说明在控制了 28 个协变量之后,RHC 对死亡率解释的独立变异很小。

稳健值 RVq=1=5.0%\mathrm{RV}_{q=1} = 5.0\%:一个与已控制协变量正交的未测量混杂,需要同时解释处理和结局残差方差的至少 5.0%,才能把效应估计拉到零。RVq=1,α=0.05=2.5%\mathrm{RV}_{q=1, \alpha=0.05} = 2.5\%:同样的混杂只需解释 2.5% 的残差方差,就能让置信区间包含零,统计显著性消失。

以 APACHE 评分为基准的校准结果特别有信息量。APACHE 评分对 RHC 使用的偏 R2R^2 为 2.0%,对死亡率的偏 R2R^2 为 1.0%。如果未测量混杂的强度和 APACHE 评分相当,即 1 倍 apache_score,调整后的效应估计从 0.053 下降到 0.038,仍然显著。如果未测量混杂有 APACHE 评分的 2 倍强度,效应降到 0.023,置信区间的下界接近零。到了 3 倍 APACHE 评分的强度,效应仅剩 0.008,已经不再显著。

在 ICU 里,比 APACHE 评分还强两三倍的遗漏变量意味着什么?APACHE 评分本身已经综合了生理参数、年龄和慢性健康状况,是 ICU 预后预测中解释力最强的单一变量之一。一个强度达到 APACHE 两倍的遗漏因素在临床上很难想象。但让显著性消失的阈值只需要 2 倍,而医生的主观判断、床旁快速恶化程度这类未记录因素并非不可能达到这个水平。

sensemakr 等高线图。每条曲线代表一个调整后效应估计值,红色虚线为零等高线。红色菱形标记了以 APACHE 评分为基准的 1 倍、2 倍、3 倍混杂强度位置。黑色三角为未调整的原始估计 0.052。

8.8 两种方法的对照解读

E-value 和 sensemakr 从不同角度量化了同一个问题。E-value = 1.42 说的是未测量混杂与处理和结局的关联各需达到 RR = 1.42 才能翻盘。sensemakr 的基准校准则更具体:3 倍 APACHE 评分强度的混杂才能让效应消失,2 倍就能让显著性消失。两种工具给出的图景是一致的:翻盘需要一个不算弱但也谈不上极强的遗漏因素。

综合来看,RHC 增加死亡率的结论对未测量混杂有一定抵抗力,但保护程度中等。效应本身不大,RR 约为 1.10,小效应天然更容易被残余混杂解释掉。这也是 Connors 等人 1996 年原文发表后引发持续争论的原因之一。

E-value 适合快速报告:只需要点估计和置信区间就能计算,结果是一个直观的 RR 数字,适合写在论文摘要里。它的局限是缺乏内部校准,需要研究者自行提供领域参照。sensemakr 适合深入探索:它用已观测协变量的解释力作为基准,输出等高线图和分阶梯的调整后估计,让读者直观看到”混杂强到什么程度结论才翻转”。它的局限是需要线性模型作为输入,且偏 R2R^2 对非线性关系的捕捉能力有限。实际操作中,两者配合使用效果最好:E-value 给出汇总判断,sensemakr 给出细节和可视化。

敏感性分析的思路可以追溯到 Cornfield 在 1959 年为吸烟致癌辩论提供的论证。烟草公司辩称吸烟与肺癌的关联可能由遗传因素造成,Cornfield 反驳:吸烟者肺癌发病率是非吸烟者的 9 倍以上,要用遗传混杂解释,该因素需要在吸烟者中流行率高 9 倍以上,这在生物学上不合理。这个论证和 E-value 一脉相承。Rosenbaum 在 2002 年系统化了这套方法论,VanderWeele 与 Ding 的 E-value 和 Cinelli 与 Hazlett 的 sensemakr 则分别提供了更易用的工具。

下一章将转向异质性分析。前面所有方法估计的都是平均处理效应,但 ATE 是全体患者效应的均值,它可能掩盖了不同亚群之间的重要差异。也许对某些患者 RHC 确实有害,而对另一些患者反而有益,平均下来才是一个温和的正向风险差。因果森林可以估计个体化处理效应,帮助我们拆开 ATE 的”黑箱”。


8.9 方法卡


8.10 本章知识地图

核心概念核心内容常见误解为什么错
条件可交换性在协变量 LL 条件下潜在结果与处理独立,是因果识别的核心假设可以通过某种统计检验来验证可交换性验证需要观测反事实结局,而反事实在数据中永远缺失
E-value未测量混杂与处理和结局各需达到的最小 RR 才能翻盘E-value 大就说明没有未测量混杂E-value 只量化翻盘所需的混杂强度,不能排除这种混杂存在
领域锚定同一个 E-value 在不同领域含义不同,必须参照已知混杂的关联强度E-value = 2 在任何领域都算稳健药物试验中 RR > 2 的混杂罕见,社会科学中 RR > 2 的混杂常见
稳健值 RV使效应估计降至零所需的最小偏 R2R^2RV 小就说明结论一定错RV 小只说明结论容易被推翻,但小效应的 RV 天然就小
基准校准用已观测协变量的解释力作为参照系评估未测量混杂的合理强度只要超过 1 倍基准就翻盘说明结论不可信要看”kk 倍基准”在领域内是否合理,而不只看倍数大小
敏感性分析的定位压力测试,量化翻盘所需条件,搭配领域知识做判断敏感性分析是因果推断的最后一步,过了就万事大吉它回答的是”假设违反时结论多脆弱”,而不是”假设是否成立”

参考文献