上一章用 G 计算为每个患者构造了两个反事实结局,然后取全人群平均得到边际风险差。G 计算的核心依赖是结局模型:如果 设定错了,反事实预测就偏了,因果效应估计也随之偏离。问题是,结局模型在高维协变量下几乎不可能完全正确,交互项、非线性项该不该加、加几个,全凭研究者的判断。
有没有一条路径,不去建结局模型,而是转向另一个更容易建模的对象?Rosenbaum 和 Rubin 在 1983 年给出了答案:与其模型化"结局和协变量的关系",不如模型化"谁接受了处理"。这个思路催生了倾向得分方法。倾向得分建模的目标是处理分配机制,而非结局本身。只要能正确预测"谁更可能接受 RHC",就可以通过匹配或加权的方式让处理组和对照组在协变量上变得可比,从而在不依赖结局模型的前提下估计因果效应。
倾向得分的定义与降维定理
回归调整和 G 计算面临的共同困境是高维协变量。RHC 数据有 38 个协变量,如果想在协变量空间里直接匹配处理组和对照组的个体,每个协变量都要找到数值接近的配对,这在 38 维空间中几乎不可能实现。协变量越多,能找到完美配对的概率越低,分析样本越小,统计效力越差。
倾向得分把这个高维匹配问题压缩成了一维匹配问题。
倾向得分回答的问题是:根据这个病人的年龄、病情严重程度等特征,他有多大的概率会被安排上导管?一个 APACHE 评分 35 分、血压极低的患者,临床医生几乎一定会给他插管,他的倾向得分就接近 1。一个 APACHE 评分 10 分、各项指标正常的患者,医生大概率不会插管,他的倾向得分就接近 0。
给定协变量向量 ,个体 的倾向得分定义为在协变量条件下接受处理的概率:
(Rosenbaum & Rubin 1983)
这个定义很简洁:一个人的倾向得分就是"根据他的基线特征,预测他接受处理的概率"。在 RHC 数据中,倾向得分回答的问题是"给定这个患者的年龄、APACHE 评分、血压等 38 个变量,他被插右心导管的概率是多少"。
Rosenbaum 和 Rubin 1983 年的核心贡献在于证明了一条降维定理。这个定理的含义用大白话说就是:不需要在年龄、性别、APACHE、血压……这十几个变量上同时匹配,只需要在一个数字上匹配就够了。这个数字就是倾向得分。
具体来说,如果可交换性在完整协变量 上成立,即 ,那么可交换性在倾向得分 上同样成立,即 。按倾向得分匹配或分层,与按所有协变量匹配或分层,在消除混杂方面是等价的。
这条定理的实际意义是:不管你有多少个协变量,只要倾向得分估计正确,把所有协变量压缩成一个 0 到 1 之间的标量之后,处理分配在同一倾向得分值上就像是随机的。38 维的匹配问题变成了 1 维的匹配问题,维度灾难被绕过了。
Rosenbaum 和 Rubin 提出倾向得分时,因果推断面临的核心技术瓶颈是多变量调整的维度灾难。当时最常用的方法是按协变量分层或精确匹配,但协变量超过五六个之后,分层的格子就空了,精确匹配更是几乎不可能。倾向得分用一个标量替代了整个协变量向量,这在计算上的简化是革命性的。1983 年这篇论文发表在 Biometrika,至今被引用超过 30,000 次,是观察研究方法论的里程碑。
用逻辑回归估计倾向得分
降维定理告诉我们倾向得分在理论上能做什么,但实际应用中,真实的倾向得分 是未知的,需要从数据中估计。最常用的估计方法是逻辑回归:以处理变量 作为因变量,协变量 作为自变量,拟合 logistic 模型,然后提取每个个体的预测概率作为估计倾向得分 。
本章继续使用 RHC 数据集,。处理变量为 rhc,结局为 death180_bin。用全部 38 个协变量拟合倾向得分模型。
library(tidyverse)
set.seed(2026)
d <- read_csv(here::here("data", "rhc.csv"), show_col_types = FALSE) |>
mutate(death180_bin = ifelse(death180 == "Yes", 1, 0))
# 38 个协变量——第 2 章 DAG 确定的调整集
covs <- c("age", "sex", "edu", "das_index", "apache_score",
"glasgow_coma_score", "blood_pressure", "wbc", "heart_rate",
"respiratory_rate", "temperature", "pa_o2vs_fio2",
"albumin", "hematocrit", "bilirubin", "creatinine",
"sodium", "potassium", "pa_co2", "ph", "weight",
"dnr_status", "medical_insurance", "race", "income",
"cancer", "cardiovascular", "congestive_hf", "dementia",
"psychiatric", "pulmonary", "renal", "hepatic",
"gi_bleed", "tumor", "immunosupperssion", "transfer_hx", "mi")
fml <- as.formula(paste("rhc ~", paste(covs, collapse = " + ")))
# 倾向得分模型——对处理分配机制建模,不是对结局建模
ps_model <- glm(fml, data = d, family = binomial)
d$ps <- predict(ps_model, type = "response")
summary(d$ps)
倾向得分的均值为 0.381,中位数为 0.360,范围从 0.005 到 0.960。RHC 组的平均倾向得分为 0.508,对照组为 0.303。两组的分布有明显分离但存在大量重叠区域,这个重叠是后续匹配和加权能够工作的前提。
估计完倾向得分之后,第一步要做的诊断是画重叠直方图,检查两组的倾向得分分布是否有足够的重叠。对照组的密度峰值在 0.10 附近,RHC 组的密度峰值在 0.50 附近。两组有清晰的分离,但重叠区域从 0.05 延伸到 0.90 以上,覆盖了绝大多数样本。倾向得分接近 0 的区域几乎只有对照组,接近 1 的区域几乎只有 RHC 组,这些边缘区域是后续正值性讨论的重点。完整重叠分布图见 PDF 全文。
倾向得分模型的目标是平衡协变量,不是预测处理。很多研究者习惯用 AUC 或分类准确率来评价倾向得分模型的好坏,AUC 高就认为模型好。这个判断标准是错的。倾向得分模型追求的是匹配或加权之后协变量在两组之间达到平衡,而非预测能力最大化。一个 AUC 很高的模型可能过拟合了,导致倾向得分分布的重叠变差,匹配更困难。评价倾向得分模型好坏的正确指标是平衡诊断,即标准化均值差 SMD 是否低于阈值,这在本章后半部分会详细讲。
倾向得分匹配
倾向得分有多种使用方式。匹配是最直观的一种:在对照组中为每个处理组个体找到倾向得分最接近的配对,组成匹配样本后直接比较结局。
倾向得分匹配,简称 PSM,将每个处理组个体与倾向得分最接近的对照组个体配对。匹配后的样本在倾向得分上近似相等,根据降维定理,这等价于在所有协变量上近似平衡。
匹配的具体算法有很多种。最常用的是最近邻匹配加卡钳值约束:对每个处理组个体,在对照组中找到倾向得分距离最小的个体配对,同时要求两者的倾向得分差不超过一个预设的阈值,即卡钳值。卡钳值的标准选择是倾向得分 logit 值标准差的 0.2 倍。超过卡钳值的处理组个体找不到配对,会被丢弃。
这意味着 PSM 必然伴随样本损失。找不到配对的个体被排除在分析之外,这些被排除的个体通常是倾向得分极端的人群,他们在对照组中没有可比的"双胞胎"。样本损失一方面降低了统计效力,另一方面改变了目标人群的定义:匹配后的 ATE 严格来说只适用于匹配后保留下来的人群,不再是全人群的 ATE。
下面用 MatchIt 包实施 1:1 最近邻匹配。
library(MatchIt)
# 1:1 最近邻匹配,卡钳值 0.2 倍 logit PS 标准差
m_out <- matchit(fml, data = d, method = "nearest",
distance = "glm", caliper = 0.2, ratio = 1)
# 匹配后样本
m_data <- match.data(m_out)
cat("Matched sample:", nrow(m_data), "\n")
cat("RHC:", sum(m_data$rhc), " No RHC:", sum(m_data$rhc == 0), "\n")
# 匹配样本上的风险差
rd_psm <- mean(m_data$death180_bin[m_data$rhc == 1]) -
mean(m_data$death180_bin[m_data$rhc == 0])
cat("PSM Risk Difference:", round(rd_psm, 4), "\n")
匹配后保留了 3,670 人,每组 1,835 人。原始数据中 2,184 名 RHC 患者有 349 人没有找到满足卡钳约束的配对被排除,对照组 3,551 人中有 1,716 人未被匹配。匹配样本上的 180 天死亡率风险差为 0.076,95% bootstrap CI 为 。RHC 组的死亡率比对照组高约 7.6 个百分点。
在 RHC 数据上,PSM 告诉我们:匹配后 RHC 组的 180 天死亡率比对照组高 7.6 个百分点,置信区间不包含零,效应方向与回归调整和 G 计算一致。
需要注意的是,PSM 丢弃了 2,065 人,占原始样本的 36%。被丢弃的对照组患者主要是倾向得分很低的个体,即根据其基线特征几乎不可能接受 RHC 的患者。被丢弃的 349 名 RHC 患者则是倾向得分很高的个体,他们在对照组中找不到相似的配对。这种样本损失在临床研究中需要认真对待,因为它意味着分析结论不适用于那些"几乎必然接受 RHC"或"几乎必然不接受 RHC"的极端人群。
逆概率加权
加权是倾向得分的另一种使用方式,它不丢弃任何样本。
逆概率加权,简称 IPW,给每个个体赋予一个与其倾向得分成反比的权重。对于估计 ATE,权重定义为:
加权后的伪人群中,处理分配与协变量独立,等价于构造了一个伪随机试验。
倾向得分的倒数这个形式需要解释。处理组中倾向得分大的个体权重为 ,这个值偏小,因为数据里这种人本来就多,代表性已经够了,不需要放大他们的声音。处理组中倾向得分小的个体权重为 ,这个值偏大,因为这种人本来不太可能接受处理,数据里出现得少,需要放大他们的声音才能代表"如果全人群都接受处理"的情形。对照组的逻辑完全对称:倾向得分小的人权重为 ,偏小;倾向得分大的人权重为 ,偏大。
这个加权操作的本质是把观察样本的协变量分布扭回到全人群的分布。在伪人群中,高 APACHE 评分的患者在处理组和对照组中的比例变得一样,低血压的患者也一样。加权之后再比较两组结局,混杂就被消除了。
library(WeightIt)
# IPW:估计 ATE
w_ipw <- weightit(fml, data = d, method = "glm", estimand = "ATE")
summary(w_ipw)
d$w_ipw <- w_ipw$weights
# 加权后的风险差
ate_ipw <- weighted.mean(d$death180_bin[d$rhc == 1], d$w_ipw[d$rhc == 1]) -
weighted.mean(d$death180_bin[d$rhc == 0], d$w_ipw[d$rhc == 0])
cat("IPW Risk Difference:", round(ate_ipw, 4), "\n")
IPW 估计的 ATE 风险差为 0.055,95% bootstrap CI 为 。所有 5,735 个样本都被保留在分析中。权重分布显示:处理组权重范围为 1.04 到 26.45,对照组为 1.01 到 14.79。有效样本量为处理组 1,319、对照组 2,806,相比原始样本量有所下降,这是极端权重"稀释"有效信息的结果。
在 RHC 数据上,IPW 告诉我们:保留全部 5,735 名患者后,RHC 组的死亡率比对照组高 5.5 个百分点,比 PSM 的 7.6 略低,可能是极端权重对少数个体放大效应的结果。
权重最大值达到 26.45,意味着有一个 RHC 患者在伪人群中被放大了 26 倍。这种极端权重是倾向得分接近 0 或 1 时的直接后果:倾向得分为 0.04 的处理组个体权重为 ,一个人的数据贡献了 25 人的信息量。这会导致方差膨胀,估计不稳定。
IPW 的方差对极端权重非常敏感。只要有少数几个倾向得分接近 0 或 1 的个体,他们的权重就会远超正常范围,整个估计会被这几个人主导。诊断方法是检查权重分布:看最大权重是否超过正常范围的几十倍,看有效样本量相比原始样本量下降了多少。如果有效样本量只剩原始的一半甚至更少,说明极端权重在严重损耗信息。应对策略包括权重截断和使用重叠权重。权重截断的做法是把超过某个阈值的权重硬性截断到阈值,代价是引入了一点偏差换取方差的大幅下降。重叠权重则从根本上避免了极端权重的问题,下一节会详细讲。
重叠权重
重叠权重,简称 OW,是近年来被越来越多研究者采用的替代方案。它的权重形式非常简洁:处理组个体的权重是 ,对照组个体的权重是 。
重叠权重给每个个体赋予与其"被分到另一组的概率"成正比的权重:
重叠权重估计的因果效应称为 ATO,即 average treatment effect in the overlap population。
重叠权重的设计逻辑值得理解。倾向得分接近 0.5 的个体权重最大,因为这些人"有可能被分到任何一组",是两组最可比的人群。倾向得分接近 0 或 1 的个体权重趋近于 0,因为这些人几乎必然只能出现在一组中,对照组里找不到可比的人,让他们对估计的贡献降到最低是合理的。
相比 IPW,重叠权重天然避免了极端权重的问题。IPW 在倾向得分为 0.02 时给出权重 50,重叠权重在同样的位置给出权重 0.02,差了整整 2,500 倍。这就是为什么重叠权重的方差通常远小于 IPW。
代价是目标估计量变了。IPW 估计的是全人群的 ATE,而重叠权重估计的是重叠人群的 ATO。如果研究者的问题是"对所有 ICU 患者,RHC 的平均效应是什么",应该用 IPW。如果问题是"对那些处理决策存在真正临床均势的患者,RHC 的效应是什么",重叠权重更合适。在 RHC 数据中,倾向得分极端的患者要么是病情太重几乎必然插管,要么是病情太轻几乎不可能插管,这些人群的因果效应估计可靠性本来就差,聚焦于重叠人群是务实的选择。
# OW:估计 ATO,即重叠人群的平均效应
w_ow <- weightit(fml, data = d, method = "glm", estimand = "ATO")
summary(w_ow)
d$w_ow <- w_ow$weights
ate_ow <- weighted.mean(d$death180_bin[d$rhc == 1], d$w_ow[d$rhc == 1]) -
weighted.mean(d$death180_bin[d$rhc == 0], d$w_ow[d$rhc == 0])
cat("OW Risk Difference:", round(ate_ow, 4), "\n")
重叠权重估计的 ATO 风险差为 0.061,95% bootstrap CI 为 。权重分布非常温和,处理组权重范围为 0.04 到 0.96,对照组为 0.005 到 0.93,没有任何极端值。有效样本量为处理组 1,862、对照组 2,532,分别是原始样本量的 85% 和 71%,信息损耗远小于 IPW。
在 RHC 数据上,OW 告诉我们:聚焦于处理决策存在临床均势的重叠人群,RHC 组的死亡率比对照组高 6.1 个百分点,介于 PSM 和 IPW 之间,且方差最小、估计最稳定。
平衡诊断:标准化均值差与 Love plot
倾向得分方法能否消除混杂,最终要看协变量在匹配或加权之后是否达到了平衡。平衡诊断是整个分析流程中不可跳过的一步。
标准化均值差,简称 SMD,衡量某个协变量在处理组和对照组之间的差异程度:
其中 分别是处理组和对照组的协变量均值, 是对应的方差。SMD 的绝对值小于 0.1 通常被认为是良好平衡的标志。
SMD 比 值更适合用来评价平衡。 值同时依赖效应大小和样本量,大样本中微小的不平衡也会给出极小的 值,让研究者误以为平衡很差。SMD 不受样本量影响,直接反映两组均值差了几个标准差,更具临床可解读性。
Love plot 是把所有协变量的 SMD 画在一张图上的可视化工具,名称来源于统计学家 Thomas Love。图中每个点代表一个协变量在某种调整方法下的绝对 SMD,竖线标出 0.1 的阈值。所有点都落在阈值左边,说明平衡良好。
library(cobalt)
# Love plot:同时展示 PSM / IPW / OW 的平衡
love.plot(fml, data = d,
stats = "m", abs = TRUE,
thresholds = c(m = 0.1),
weights = list(PSM = m_out, IPW = w_ipw, OW = w_ow),
colors = c("#999999", "#EF6548", "#4292C6", "#66C2A5"),
shapes = c(17, 16, 15, 18),
sample.names = c("Unadjusted", "PSM", "IPW", "OW"))
在看图之前,先说明怎么读 Love plot。横轴是绝对 SMD,数值越大说明两组在该变量上的差距越大。纵轴是每个协变量的名称。图中有一条竖直虚线标在 0.10 的位置,这是公认的平衡阈值。每个协变量在不同调整方法下各有一个点:灰色三角代表未调整,红色圆形代表 PSM,蓝色方形代表 IPW,绿色菱形代表 OW。所有有色点都落在 0.10 虚线左边,就说明该方法成功地平衡了协变量。完整 Love plot 见 PDF 全文。
未调整时,apache_score、blood_pressure、pa_o2vs_fio2、hematocrit、pa_co2、weight、creatinine 等变量的 SMD 超过 0.20,最大的 apache_score 达到 0.48,blood_pressure 达到 0.49。
PSM 匹配后,绝大多数变量的 SMD 降到了 0.05 以下,但 apache_score 仍有 0.08 的残余不平衡,接近 0.1 阈值。IPW 和 OW 的平衡效果优于 PSM,几乎所有变量的 SMD 都降到了 0.05 以内,OW 的表现尤其稳定。三种方法都成功地将协变量不平衡控制在了可接受的范围内。
平衡诊断看的是协变量分布,不是模型拟合指标。发表论文时常见的错误是:报告了倾向得分模型的 Hosmer-Lemeshow 拟合优度检验通过了,就认为倾向得分方法可靠,不再检查匹配后或加权后的协变量平衡。模型拟合好不代表平衡好。诊断的正确流程是:拟合倾向得分模型,实施匹配或加权,然后检查每个协变量的 SMD。如果某些变量 SMD 仍然超过 0.1,说明模型需要调整,比如加入交互项或非线性项。平衡诊断是迭代的过程,直到所有协变量 SMD 低于阈值才算完成。
正值性违反
倾向得分方法的三大前提假设是可交换性、正值性和一致性。其中正值性要求每个协变量组合下,接受处理和不接受处理的概率都严格大于零:。
在 RHC 数据中,倾向得分的最小值为 0.005,最大值为 0.960。没有真正的 0 或 1 出现,正值性在技术上没有被"硬违反"。但 0.005 已经非常接近零了,这意味着有些患者根据其基线特征几乎不可能接受 RHC。这种"近乎违反正值性"的情况在 IPW 中会制造极端权重:倾向得分为 0.005 的对照组个体权重为 ,没什么问题;但如果这个个体碰巧出现在处理组,权重就是 ,一个人贡献了 200 人的信息量。
从临床角度看,正值性违反传递的信息是:对于某些患者,临床医生根据病情已经做出了明确的决策,不存在"随机分配到另一组"的可能。这些患者的因果效应本质上无法从观察数据中可靠估计。重叠权重通过把这些极端个体的权重自动压低到接近零,在方法层面回应了这个问题,但正值性违反背后的科学含义仍然需要研究者在论文讨论部分认真对待。
累积对比表
表 5·1 方法演进对比表,截至第 5 章
| 方法 | ATE 估计 | 95% CI | 核心假设 |
|---|---|---|---|
| 回归调整 | OR = 1.34 | [1.18, 1.52] | 模型设定正确 + 可交换性 + 正值性 |
| G 计算 | RD = 0.071 | [0.038, 0.105] | 结局模型正确 + 可交换性 + 正值性 |
| PSM | RD = 0.076 | [0.041, 0.109] | 处理模型正确 + 可交换性 + 正值性 |
| IPW | RD = 0.055 | [0.025, 0.085] | 处理模型正确 + 可交换性 + 正值性 |
| OW | RD = 0.061 | [0.033, 0.089] | 处理模型正确 + 可交换性 + 正值性 |
五种方法都指向同一个方向:RHC 增加 180 天死亡率。回归给出的是 OR 尺度的效应,不能直接与风险差比较,但 OR = 1.34 表示死亡几率比升高 34%,方向一致。G 计算的 RD = 0.071 与 PSM 的 0.076 相差不大,这并不意外,因为两者都依赖逻辑回归形式的参数模型,区别只在于一个建模结局一个建模处理分配。
IPW 给出的 RD = 0.055 偏小一些,可能是极端权重对少数个体的放大效应导致的。OW 的 RD = 0.061 介于 IPW 和 PSM 之间,方差最小。需要注意的是 PSM 和 OW 的目标人群与 IPW 不完全相同:PSM 针对匹配后保留的人群,OW 针对重叠人群,只有 IPW 估计的是全人群的 ATE。方法之间的数值差异部分来源于目标人群的不同,部分来源于统计方法的不同。
下一章将引入双重稳健估计,即 AIPW。它同时建立结局模型和处理模型,只要其中一个正确就能给出一致估计。G 计算赌结局模型对,倾向得分方法赌处理模型对,AIPW 的双重稳健性让研究者不必在两个赌注之间做选择,两根保险绳只要一根不断就安全。
数学形式:,通过逻辑回归或其他分类器估计。
使用方式:匹配、加权 IPW/OW、分层、协变量调整。
核心假设:可交换性 ,正值性 ,一致性。
R 包:MatchIt 匹配、WeightIt 加权、cobalt 平衡诊断。
优势:不依赖结局模型的函数形式;协变量平衡可直接检验;对倾向得分模型的轻度错误设定有一定容错性。
失效场景:正值性违反或接近违反时极端权重导致方差爆炸;倾向得分模型严重错误设定时平衡失败;不可观测混杂无法通过倾向得分控制。
本章知识地图
表 5·2 第 5 章核心概念与常见误解
| 核心概念 | 核心内容 | 常见误解 | 为什么错 |
|---|---|---|---|
| 倾向得分 | 给定协变量下接受处理的条件概率,将多维匹配压缩为一维 | 倾向得分是处理效应 | 倾向得分只描述处理分配机制,与结局无关 |
| 降维定理 | 按 调整等价于按全部 调整 | 倾向得分包含了结局的信息 | 定理只保证平衡协变量,不建模结局 |
| PSM | 按倾向得分最近邻配对,组成可比样本后比较结局 | 匹配后不需要检查平衡 | 匹配算法不保证所有变量平衡,必须用 SMD 诊断 |
| IPW | 用倾向得分的倒数加权,构造协变量平衡的伪人群 | AUC 高的倾向得分模型一定好 | 模型好坏看加权后的协变量平衡,不看预测能力 |
| 重叠权重 | 对重叠人群赋权,天然避免极端权重 | OW 估计的就是全人群 ATE | OW 目标是 ATO,聚焦于处理决策存在均势的人群 |
| SMD 与 Love plot | 标准化均值差衡量协变量平衡,Love plot 可视化所有变量 | 用 值判断平衡 | 值受样本量影响,大样本中小不平衡也显著 |
| 正值性违反 | 某些协变量组合下接受处理的概率趋近 0 或 1 | 倾向得分没有 0 或 1 就没问题 | 接近 0 或 1 就足以让 IPW 方差爆炸 |