教程 ·

倾向得分匹配(PSM)用 AI 完成 — 反事实因果、平衡性检验与敏感性分析全攻略

倾向得分匹配(PSM)完整教程:AI 一句话完成匹配、SMD 平衡性检验、ATT 估计、Love Plot 可视化与 Rosenbaum 界值敏感性分析,含可直接套进论文的 APA 7th 报告句式。

数据是观察性的,不是随机对照试验,却想估计因果效应?PSM 是最广泛应用的解决方案——但 R 的 MatchIt 包参数多、检验步骤繁,每次改一个匹配比例就得重跑全套。这篇教程教你用 AI 一句话完成从倾向得分估计到 Rosenbaum 敏感性检验的完整流程。


观察性研究的因果推断困境

随机对照试验(RCT)是估计因果效应的金标准——随机分组使得处理组与对照组在所有协变量上均衡,组间差异可归因于处理本身。

但现实中大多数数据是观察性的

  • 政策评估(获得补贴 vs 未获得补贴的企业)
  • 医学研究(接受某种治疗 vs 未接受治疗的患者)
  • 教育研究(参加项目 vs 未参加项目的学生)
  • 社会调查(有某种经历 vs 无此经历的受访者)

这类数据的根本问题是选择性偏差(Selection Bias):处理组和对照组在接受处理之前就已经不同——年龄更大、病情更重、经济条件更好的人可能更倾向于接受某种干预。如果直接比较结局,组间差异混杂了处理效应和基线差异,无法分离。

倾向得分匹配(Propensity Score Matching, PSM) 是 Rosenbaum & Rubin(1983)提出的经典解决方案:用"在给定协变量下接受处理的概率"(即倾向得分)将处理组和对照组中相似的个体配对,人工构造出近似随机化的对照组,从而控制已观测的混杂变量。


PSM 的核心概念

倾向得分

倾向得分 e(X) 定义为:在观测到协变量 X 的条件下,个体接受处理(T = 1)的概率:

e(X) = P(T = 1 | X)

通常通过Logistic 回归估计,以处理指示变量为因变量,以所有已知混杂变量为自变量。

Rosenbaum & Rubin(1983)证明了倾向得分平衡性定理:如果在协变量 X 条件下处理是随机的,那么在倾向得分 e(X) 条件下处理也是随机的。这意味着只要匹配后倾向得分相似的处理组和对照组成员,就可以在两组之间进行因果比较。

平均处理效应与 ATT

PSM 最常估计的是处理组的平均处理效应(Average Treatment Effect on the Treated, ATT)

ATT = E[Y(1) - Y(0) | T = 1]

含义:对于那些实际接受了处理的个体,处理使其结局(Y)平均改变了多少。这是观察性研究中因果问题的自然表述:"这一批接受了治疗的患者,治疗到底有没有效果?"

重要区分:ATT 不等于 ATE(全样本平均处理效应)。PSM 主要估计 ATT;若需 ATE,应考虑逆概率加权(IPW)等方法。

平衡性检验:SMD

匹配质量的核心指标是标准化均值差(Standardized Mean Difference, SMD),又称 d:

SMD = (M_处理组 - M_对照组) / SD_合并

平衡性判据(Austin, 2011):

  • |SMD| < 0.10:协变量已良好平衡(通用阈值)
  • |SMD| < 0.25:部分文献采用的宽松标准
  • |SMD| >= 0.10:该协变量匹配后仍不平衡,需重新调整匹配方案

注意:平衡性检验应报告 SMD,而非传统的 t 检验或 chi-squared 检验 p 值。原因:匹配后样本量减小,p 值检验功效下降,p > .05 不代表平衡,反而可能是样本太小检测不到差异;SMD 不受样本量影响,是更稳健的平衡指标(Austin, 2011)。


案例数据:新型降压方案对心血管事件的效果评估

研究背景

某医院电子病历数据库提取 2019–2023 年 40–75 岁高血压患者共 1,280 名。研究问题:接受新型联合降压方案(处理组,T = 1,n = 420)相比标准单药治疗(对照组,T = 0,n = 860)是否能降低 2 年内主要心血管事件(MACE)发生率?

数据结构

patient_id     患者编号
treatment      处理指示变量(1 = 新方案,0 = 标准方案)
age            年龄(岁,连续)
sex            性别(0 = 女,1 = 男)
bmi            体质指数(连续)
sbp_baseline   基线收缩压(mmHg,连续)
diabetes       合并糖尿病(0 = 无,1 = 有)
smoker         吸烟(0 = 否,1 = 是)
ckd            慢性肾病(0 = 无,1 = 有)
prev_cvd       既往心血管病史(0 = 无,1 = 有)
mace_2yr       2年内主要心血管事件(0 = 无,1 = 有)  -- 结局变量

匹配前基线不均衡:处理组患者平均年龄更大(62.4 vs 58.1岁)、基线收缩压更高(152.3 vs 143.8 mmHg)、糖尿病比例更高(38.3% vs 24.7%),若直接比较 MACE 率,结果将严重低估新方案的保护效果(处理组基线风险本身更高)。


用 AI 一句话完成 PSM 全流程

chatsrs.com 上传数据后输入:

"以 treatment 为处理变量,age、sex、bmi、sbp_baseline、diabetes、smoker、ckd、prev_cvd 为协变量,对 mace_2yr 做倾向得分匹配分析(PSM)。 请输出:

  1. 匹配前协变量描述统计 + SMD 表(处理组 vs 对照组)
  2. 用 Logistic 回归估计倾向得分,输出各协变量系数和倾向得分分布图(处理组 vs 对照组叠加直方图)
  3. 1:1 最近邻匹配(卡钳值 = 0.02),输出匹配后协变量 SMD 表 + Love Plot
  4. 匹配后计算 ATT:MACE 发生率之差 + 95% CI + OR + 95% CI
  5. Rosenbaum 界值敏感性分析(Gamma 从 1.0 到 2.5)
  6. 输出三线表格式 + APA 7th 标准文字描述"

ChatSRS 将自动完成从倾向得分估计到敏感性分析的全套流程,无需手动调用 MatchIt、cobalt 等 R 包。


输出结果怎么读

输出 1: 匹配前基线特征 + SMD

表 1  匹配前两组患者基线特征(N = 1280)

变量                处理组(n=420)       对照组(n=860)      SMD
年龄(岁)          62.4 +/- 9.2          58.1 +/- 10.6        0.43
性别(男,%)       57.4%                 51.2%                0.12
BMI(kg/m^2)      26.8 +/- 3.7          25.9 +/- 3.9         0.24
基线收缩压(mmHg) 152.3 +/- 18.4        143.8 +/- 16.2       0.48
合并糖尿病(%)     38.3%                 24.7%                0.30
吸烟(%)          32.4%                 29.8%                0.06
慢性肾病(%)       22.1%                 15.3%                0.18
既往心血管病史(%) 28.6%                 18.4%                0.26

注:SMD = 标准化均值差;|SMD| >= 0.10 提示不平衡。匹配前年龄(SMD = 0.43)、
   基线收缩压(SMD = 0.48)、糖尿病(SMD = 0.30)等多项协变量存在显著不均衡。

解读:匹配前处理组与对照组在年龄、收缩压、糖尿病、既往心血管病史等多项协变量上 SMD > 0.10,直接比较结局存在严重选择偏差,须先进行 PSM。


输出 2: 倾向得分分布与重叠检验

倾向得分估计(Logistic 回归):
  各协变量均进入回归方程
  倾向得分范围:处理组 [0.18, 0.89],对照组 [0.05, 0.76]
  共同支撑区域(Common Support):[0.18, 0.76]
  因倾向得分超出共同支撑范围而剔除的处理组观测:12 名

倾向得分分布重叠(匹配前):
  处理组 M = 0.52(SD = 0.18),对照组 M = 0.31(SD = 0.16)
  [图:处理组与对照组倾向得分叠加直方图,两组分布有充足重叠,满足重叠假设]

为什么要检验重叠(Overlap):PSM 基于可忽略性假设(Ignorability)——在协变量 X 条件下处理与潜在结局独立。这要求两组倾向得分有充足重叠;若处理组存在对照组中找不到相似匹配的个体,强行匹配会引入外推误差。卡钳值(Caliper) 正是用来限制匹配距离、丢弃无法找到相似对照的处理组成员(本例剔除 12 名),以保证匹配质量。


输出 3: 匹配后平衡性检验 + Love Plot

表 2  1:1 最近邻匹配后协变量平衡性(卡钳值 = 0.02,n_matched = 408 对,共 816 人)

变量                匹配后处理组(n=408)  匹配后对照组(n=408)  SMD_匹配前   SMD_匹配后
年龄(岁)          62.1 +/- 9.0           61.8 +/- 9.3           0.43         0.03
性别(男,%)       57.1%                  56.4%                  0.12         0.01
BMI(kg/m^2)      26.7 +/- 3.6           26.5 +/- 3.8           0.24         0.05
基线收缩压(mmHg) 151.8 +/- 18.1         150.9 +/- 17.6         0.48         0.05
合并糖尿病(%)     37.7%                  36.8%                  0.30         0.02
吸烟(%)          32.1%                  31.6%                  0.06         0.01
慢性肾病(%)       21.8%                  22.3%                  0.18         0.01
既往心血管病史(%) 28.2%                  27.9%                  0.26         0.01

注:匹配后所有协变量 |SMD| < 0.10,协变量达到良好平衡。
   Love Plot 见附图,匹配后所有点均落入 |SMD| < 0.10 虚线以内。

Love Plot 解读:Love Plot 是展示匹配前后 SMD 变化的标准可视化工具。每个协变量一行,横轴为 SMD 绝对值,分别绘制匹配前(实心点)和匹配后(空心点/三角形)的 SMD,并标注 0.10 阈值线。匹配后所有点落入阈值线以内,表明匹配成功消除了协变量不均衡。


输出 4: ATT 估计——处理效应

表 3  PSM 匹配后 ATT 估计(n = 816,即 408 对匹配)

结局变量:2 年内主要心血管事件(MACE)

                    处理组(新方案)   对照组(标准方案)
MACE 发生率         12.5%(51/408)    19.6%(80/408)

风险差(RD):      -7.1 个百分点(95% CI [-11.8, -2.4],p = .004)
OR(匹配后):      0.59(95% CI [0.40, 0.87],p = .008)

注:OR 由条件 Logistic 回归(matched pair 为条件)估计;RD 来自 matched proportions 比较。
   OR < 1 表示新方案降低 MACE 发生优势;95% CI 不含 1,统计显著。

为什么报告 OR 而非 RR:在 PSM 匹配后的分析中,若使用条件 Logistic 回归,自然输出的是OR(优势比),而非相对危险度 RR。当结局发生率 < 10% 时 OR ≈ RR;本例发生率约 12–20%,OR 将略微高估 RR 的绝对值,报告时须注明。若需 RR,可改用泊松回归或对数二项式回归(ChatSRS 支持指定输出 RR)。切勿将 OR 直接当 RR 解读,这是观察性研究论文中最常见的统计错误之一。

HR vs OR vs RR 口诀

  • OR(优势比):Logistic 回归;横断面或病例对照设计;或 PSM 匹配后条件 Logistic
  • RR(相对危险度):队列研究直接比较发生率;泊松回归
  • HR(风险比):生存分析 Cox 回归;带时间维度的随访数据 三者的分母含义不同,不可混用

输出 5: Rosenbaum 界值敏感性分析

表 4  Rosenbaum 界值敏感性分析(Wilcoxon 符号秩检验)

Gamma(隐含混杂强度)    p 值下界(最不利情形)    结论
1.00(无未观测混杂)      0.003                     显著
1.20                       0.008                     显著
1.40                       0.026                     显著
1.60                       0.068                     不显著
1.80                       0.141                     不显著
2.00                       0.241                     不显著
2.50                       0.512                     不显著

Gamma 界值(p = .05 临界点):约 1.52

注:Gamma 表示未观测混杂变量使处理概率之比改变的最大倍数。
   Gamma = 1.52 意味着:若存在某未观测混杂变量使处理概率比改变最多 1.52 倍,结论仍显著;
   若混杂强度超过 1.52 倍,结论可能不显著(p > .05)。

如何解读 Rosenbaum 敏感性分析:PSM 只能控制已观测的混杂变量;如果存在未测量的隐含混杂(hidden bias),ATT 估计仍可能有偏。Rosenbaum 界值(Gamma)量化了结论对未观测混杂的抵抗能力。Gamma 越大,说明结论越稳健:

  • Gamma = 1:完全无未观测混杂(理想情形)
  • Gamma = 1.52(本例):即使某个未观测因素使处理概率比扩大至 1.52 倍,结论依然显著
  • 通常 Gamma > 1.5 被视为中等稳健性,Gamma > 2.0 为高稳健性

本例 Gamma ≈ 1.52,提示结论对中等程度的隐含混杂敏感,报告时应说明此局限性。


论文里怎么报告(APA 7th 格式)

APA 7th 对 PSM 报告暂无独立准则,但 Austin(2011)、Stuart(2010)及各大医学期刊编辑指南的共识要求如下:

方法节(完整模板)

为控制处理组与对照组之间的基线协变量不均衡,采用倾向得分匹配(Propensity Score Matching, PSM)估计新型联合降压方案对主要心血管事件(MACE)的处理效应。倾向得分通过 Logistic 回归估计,以处理分配(新方案 vs 标准方案)为因变量,以年龄、性别、BMI、基线收缩压、糖尿病、吸烟、慢性肾病及既往心血管病史为协变量。采用 1:1 最近邻匹配,卡钳值设为 0.02(约倾向得分 SD 的 0.1 倍)。协变量平衡性通过标准化均值差(SMD)评价,|SMD| < 0.10 视为平衡良好(Austin, 2011)。主要效应估计量为处理组的平均处理效应(ATT),采用条件 Logistic 回归估计优势比(OR)及其 95% 置信区间。采用 Rosenbaum 界值法检验结论对未观测混杂的敏感性。统计分析使用 R 4.4(MatchIt 包、cobalt 包、rbounds 包)实施,检验水准 alpha = .05(双尾)。

结果节(模板,含 PSM 诊断与效应估计)

协变量平衡:匹配前,两组在多项基线协变量上存在显著差异,其中年龄(SMD = 0.43)和基线收缩压(SMD = 0.48)的标准化均值差超过 0.10 的可接受阈值(详见表 1)。经 1:1 最近邻匹配后,获得 408 对匹配(共 816 名患者),所有协变量的 SMD 均降至 0.10 以下(最大 SMD = 0.05),Love Plot 显示匹配后协变量均衡(见图 1)。12 名处理组患者因超出共同支撑范围而被排除。

处理效应(ATT):匹配后样本中,新型联合降压方案组的 2 年 MACE 发生率为 12.5%,标准方案组为 19.6%,绝对风险差为 -7.1 个百分点(95% CI [-11.8, -2.4],p = .004)。条件 Logistic 回归结果显示,新方案显著降低 MACE 发生优势,OR = 0.59(95% CI [0.40, 0.87],p = .008)。

敏感性分析:Rosenbaum 界值敏感性分析表明,当 Gamma = 1.52 时 p 值达到 .05 临界,提示若存在使处理概率比改变超过 1.52 倍的未观测混杂因素,统计结论可能不成立。考虑到 PSM 仅能控制已观测协变量,本研究结果在中等程度隐含偏倚下具有一定稳健性,但解释因果结论时仍需审慎。


APA 报告格式对照表

报告要素APA 格式示例
匹配后样本量n = 816(408 对匹配)
协变量平衡指标SMD = 0.05(匹配后最大值)
ATT 风险差RD = -7.1 pp, 95% CI [-11.8, -2.4]
OR + 95% CIOR = 0.59, 95% CI [0.40, 0.87]
p 值p = .008(小数点前不写 0)
Rosenbaum GammaGamma = 1.52
软件引用R 4.4; MatchIt 4.x(Ho et al., 2011)

APA 7th 提醒:OR 的 95% CI 用方括号 [ ];p 值小于 0 的小数不写 0(p = .008,非 p = 0.008);首次出现时写出方法全称并标注缩写。


常见问题 FAQ

Q1:PSM 和回归调整(ANCOVA)有什么区别,什么时候用 PSM?

A:两者都是控制混杂的方法,但机制不同。回归调整(含 ANCOVA) 通过在结局回归模型中加入协变量来控制混杂,依赖"结局模型正确设定";PSM 通过构造"处理模型(倾向得分)"来创造均衡的对照组,依赖"倾向得分模型正确设定",且结论对结局模型设定不敏感。PSM 的优势在于:(1) 匹配后的处理效应估计对结局模型依赖更小;(2) Love Plot 等工具可直接诊断协变量平衡性,研究者能直观判断数据质量,而非全凭模型假设;(3) 更接近 RCT 的设计逻辑,审稿人接受度高。当协变量数量多且与结局关系复杂时,PSM 是更稳健的选择。

Q2:1:1 匹配好还是 1:2/1:3 匹配好?卡钳值怎么选?

A:1:N 匹配(每个处理组个体匹配多个对照)可以增大样本量,提高检验功效,但代价是允许匹配距离更大,可能降低协变量平衡质量。一般原则:对照组样本量充足时优先 1:1 匹配(平衡最好);对照组稀少时可考虑 1:2 或 1:3,但需严格检验匹配后 SMD。卡钳值方面,Austin(2011)建议使用 0.02 × 倾向得分的标准差 作为卡钳值(即 caliper = 0.02 * SD(e(X))),这是目前应用最广泛的默认设置。卡钳值过大会允许质量差的匹配,卡钳值过小会剔除过多处理组成员降低样本代表性,在 ChatSRS 中可指定"自动计算最优卡钳值"。

Q3:PSM 匹配后还需要再做回归调整吗?

A:是的,这被称为双重稳健(Doubly Robust)匹配后调整(Matching with Regression Adjustment) 策略:在 PSM 匹配后的样本上,对结局继续做含协变量的条件 Logistic/线性回归。这样做的好处是:即使倾向得分模型有轻微设定误差,残余的协变量不均衡可被结局模型进一步吸收,使 ATT 估计更稳健。实践中尤其推荐在 SMD 匹配后仍有少数协变量处于 0.05–0.10 之间时追加回归调整,在 ChatSRS 指令中加一句"匹配后再做条件 Logistic 回归调整剩余协变量"即可。

Q4:Rosenbaum Gamma = 1.52,这个结果怎么向审稿人解释?

A:Gamma 界值没有公认的"足够大"阈值,解释需结合研究领域和未观测混杂的合理范围。实践参考:

  • Gamma < 1.3:提示结论对隐含偏倚较敏感,需列举可能的未观测混杂并充分讨论局限性
  • Gamma 1.3–2.0(本例 1.52 在此范围):中等稳健性,在大多数观察性研究中是可接受的结果,报告时说明"若未观测混杂使处理概率比改变不超过 1.52 倍则结论稳健"
  • Gamma > 2.0:较高稳健性,结论对未观测混杂不敏感

审稿人关注的核心是:你是否做了这个检验,以及是否诚实地讨论了局限性。Rosenbaum 分析本身就是诚信研究的标志。

Q5:PSM 只能处理二元处理变量吗?如果处理变量有 3 个水平怎么办?

A:标准 PSM 针对二元处理(接受 vs 未接受)。若处理变量有多个水平(如低剂量/中剂量/高剂量),需使用广义倾向得分(Generalized Propensity Score, GPS),通过多项 Logistic 回归估计每个处理水平的概率,再进行加权或匹配。ChatSRS 支持指定"多水平处理的广义倾向得分分析",适用于剂量–效应研究或多处理臂的政策评估。若处理变量是连续型(如用药剂量),则应使用广义倾向得分 + 逆概率加权(IPW)方法。


小结

倾向得分匹配(PSM)是观察性研究中控制选择偏差、估计因果效应的标准工具,正确实施需要把握五个关键环节:

  1. 倾向得分估计:Logistic 回归,所有已知混杂变量均须纳入;检验重叠/共同支撑
  2. 匹配策略:1:1 最近邻 + 合理卡钳值(0.02 × SD 为默认);有放回 vs 无放回视样本量决定
  3. 平衡性检验:用 SMD 而非 t/chi-squared p 值;|SMD| < 0.10 为合格;Love Plot 可视化
  4. ATT 估计:条件 Logistic 回归输出 OR(区分 OR/RR/HR,不可混用);风险差报告绝对效应
  5. 敏感性分析:Rosenbaum 界值是 PSM 论文的必要组成部分,报告 Gamma 并解读稳健性

chatsrs.com 的 SPSS + R + Stata 三引擎均支持 PSM 全流程,一句自然语言指令即可获得从倾向得分分布到 Love Plot、ATT 表格到 Rosenbaum Gamma 的完整输出,并自动生成符合 APA 7th 的中文报告句式。


相关阅读


本文首发于 ChatSRS 官方博客。如有问题或反馈,欢迎在 ChatSRS 站内 [用户中心 -> 帮助与反馈] 联系我们。