You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中1:3倾向匹配后实际比例为1:2.7但SMD理想,结果是否合理?

问题描述

我尝试匹配两组样本(对照组n=181,处理组n=39),常规1:1或1:2匹配无法得到理想的SMD结果,遂改为设置caliper=0.2的1:3最近邻倾向匹配。目前多数SMD<0.1,结果理想,但匹配后对照组为95例、处理组为35例,比例为1:2.7,与设定的1:3不符。我不理解R的matchit函数是如何执行匹配的,附上代码及控制台输出结果,恳请专业人士解答。

代码

set.seed(1000)
match_obj <- matchit(cabg_indication_new ~ age + gender + dm + dialysis + htn + copd + bav + pvd + cvd + previous_cabg + previous_mi + afib + reop, data = project2, method = "nearest", distance ="glm", ratio = 3, caliper = 0.2, replace = FALSE)

summary(match_obj, un = FALSE) 

控制台输出

Sample Sizes:
              Control Treated
All             181.       39
Matched (ESS)    87.5      35
Matched          95.       35
Unmatched        86.        4
Discarded         0.        0
问题解答

出现匹配比例与设定的1:3不符,是以下几个规则共同作用的结果:

  • 卡尺(caliper)限制:你设置了caliper=0.2,只有倾向得分差异在0.2范围内的对照样本才能被匹配给处理组样本。部分处理组样本可能找不到3个满足该要求的对照,只能匹配到更少的数量。
  • 无放回匹配(replace=FALSE):禁用放回匹配后,每个对照样本只能被匹配给一个处理组样本。当符合条件的对照数量有限时,先匹配的处理组会占用可用对照,导致后续处理组无法找到足够的匹配对象。
  • 未匹配的处理组样本:控制台显示有4例处理组样本未被匹配,这部分样本因找不到任何符合卡尺要求的对照被排除,最终参与匹配的处理组仅35例。而这35例中,并非每一例都能找到3个符合条件的无放回对照,最终合计匹配到95例对照(95/35≈2.7)。

简言之,matchit的1:3最近邻匹配会优先保证匹配质量(满足卡尺)和无放回规则,而非强制达到设定的匹配比例。如果想更接近1:3比例,可以尝试:

  • 适当放宽卡尺范围(比如调到0.25),但需注意不能过度放宽导致匹配质量下降;
  • 开启放回匹配(replace=TRUE),允许同一对照被匹配给多个处理组,但这可能引入样本重复使用的偏倚,需谨慎评估。

内容的提问来源于stack exchange,提问作者AdaWang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:03:19