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
相关产品推荐
相关产品推荐

