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

R语言倾向得分匹配(PSM)匹配结果与预期不符问题咨询

问题分析与解决方案

首先,我们先明确你的数据集和匹配目标:你的propScore数据中,group=0是对照组(4个样本:行1-4),group=1是处理组(6个样本:行5-10)。你期望处理组中前4个样本(行5-8,与对照组行1-4的dep和public完全一致)分别匹配对应的对照组样本,而处理组后2个样本(行9-10)因无对应协变量的对照组样本无法匹配,但实际MatchIt返回的结果和预期不符。

你操作中的核心问题

默认的matchit()设置和你的预期匹配逻辑不一致,主要有两点:

1. 默认使用倾向得分而非直接协变量匹配

你当前的代码matchit(group ~ dep + public, data = propScore, method = "nearest", ratio = 1)默认会先通过logit模型估计倾向得分(即给定dep和public时,样本属于处理组的概率),然后基于倾向得分的欧氏距离进行最近邻匹配,而不是直接基于dep和public的原始值匹配。

虽然你的前4个处理组和对照组样本的dep、public完全一致,它们的倾向得分也会完全相同,但MatchIt的匹配顺序、样本优先级规则可能导致它没有优先匹配这些完全一致的样本。

2. 匹配方向与样本优先级的影响

MatchIt默认以处理组为匹配基准(因为group=1被识别为处理组),当处理组样本数多于对照组时,它会按倾向得分的排序规则选择处理组样本进行匹配,而非优先匹配协变量完全一致的样本。

如何修正得到你预期的结果

要实现你期望的“协变量完全匹配”效果,你需要修改matchit()的参数,指定直接基于协变量的匹配逻辑:

方法1:使用马氏距离匹配(直接基于协变量)

指定distance="mahalanobis",让MatchIt直接基于dep和public的马氏距离进行最近邻匹配,优先匹配协变量最接近(这里是完全一致)的样本:

m.out = matchit(group ~ dep + public, data = propScore, method = "nearest", 
                ratio = 1, distance = "mahalanobis")

方法2:强制精确匹配dep和public

如果你希望只有dep和public完全一致的样本才能匹配,可以添加exact=c("dep","public")参数,直接限定匹配的精确条件:

m.out = matchit(group ~ dep + public, data = propScore, method = "nearest", 
                ratio = 1, exact = c("dep", "public"))

这两种方法都会让处理组的行5-8分别匹配对照组的行1-4,而行9-10因无对应协变量的对照组样本,匹配结果为NA,和你的预期完全一致。

验证匹配结果

运行修正后的代码后,你可以用match.data(m.out)查看匹配后的完整数据集,或者用summary(m.out)查看匹配统计,此时dep和public会完全平衡,符合你的预期。

内容的提问来源于stack exchange,提问作者Juanma Mascarás Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:07:38