首先:这个问题可能是重复的/已经解决了/在this stackoverflow post .
我想使用 MatchIt
包在我的数据集中使用马氏距离执行完全分 block 匹配。我有两个观察到的协变量(年龄和性别),我想将其用于匹配。
我知道我可以使用以下参数执行基于 mahalanobis 的匹配:
formula <- as.formula("group ~ sex_boolean + age")
m.out <- matchit(formula=formula,
data=data_df,
distance='mahalanobis')
site_df_matched <- get_matches(m.out,data=data_df)
但这仅使用最近邻执行基于 mahalanobis 的匹配。如果我想更严格怎么办?是否可以将卡尺引入马氏匹配?想法如下:对于少数群体中的每个单元,找到马哈拉诺比斯距离最小的多数群体中的一个单元并且位于定义的卡尺内。如果没有来自多数组的单元,则应丢弃来自少数组的相应单元。
结果应该是大小相等的治疗组和对照组,其中包含在各自协变量中接近的成对单位。 “接近度”应该可以通过设置卡尺的严格程度来控制。更严格的卡尺会导致少数群体丢弃更多单元。
也许我对基于 mahalanobis 的匹配过程也有错误的理解,但是是否可以(并推荐)使用 MatchIt
来做到这一点?
最佳答案
是的,使用 MatchIt
4.0.0 及更高版本很简单。如果您想在马氏距离上进行匹配但包含倾向得分卡尺,则 distance
参数需要对应于倾向得分,而 mahvars
参数控制马氏距离的协变量进行匹配。例如,在估计包含其他变量(例如,race
和 )的倾向得分后,对
) 除了这两个之外,您还需要运行以下代码:sex
和 age
执行马氏距离匹配educ
m.out <- matchit(treat ~ age + sex + race + educ, #variables used in PS
data = data_df, #dataset
distance = "glm", #method of estimating PS
caliper = .25, #width of caliper on PS
mahvars = ~ age + sex) #variables used in Mahalanobis distance
如果你想在不涉及倾向得分的情况下执行马氏距离匹配,下面的代码可以实现:
m.out <- matchit(treat ~ age + sex,
data = data_df,
distance = "mahalanobis")
如果出于任何原因(例如卡尺或公共(public)支持度)需要估计倾向得分,则必须使用第一种语法。如果不涉及倾向得分,则第二种语法有效。只要卡尺在其他提供的变量上,您仍然可以使用第二种语法将卡尺放在对上;例如,要放置 age
0.25 标准差的卡尺,您可以输入 caliper = c(age = .25)
。您可以一次将卡尺放在多个变量上,如果使用第一种语法,则包括倾向得分。
这在最近邻匹配的帮助页面中都有详细介绍,可以查看here或使用 ?method_nearest
。
关于r - 在 MatchIt 包中使用马氏距离和卡尺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64967860/