2

首先:这个问题可能是这个stackoverflow帖子的重复/已经解决的问题。

我想使用该MatchIt包使用马氏距离在我的数据集中执行完全阻塞匹配。我有两个要用于匹配的观察到的协变量(年龄和性别)。

我知道我可以使用以下参数执行基于 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)

但这仅使用最近邻执行基于马氏的匹配。如果我想更严格怎么办?是否可以在马氏匹配中引入卡尺?想法如下:对于少数群体中的每个单元,在多数群体中找到一个马氏距离最小且位于定义的 caliper 内的单元。如果多数群体中没有单位,则应丢弃少数群体中的相应单位。

结果应该是大小相等的治疗组和对照组,其中包含在各自协变量中接近的单位对。“接近度”应该可以通过卡尺设置的严格程度来控制。更严格的卡尺会导致更多的少数群体被丢弃。

也许我对基于 mahalanobis 的匹配过程也有错误的理解,但是否可以(并推荐)这样做MatchIt

4

1 回答 1

3

是的,使用MatchIt4.0.0 及更高版本很简单。如果要在马氏距离上进行匹配但包含倾向得分卡尺,则distance参数需要与倾向得分相对应,并且mahvars参数控制执行马氏距离匹配的协变量。例如,要在估计包含除这两个变量之外的其他变量(例如和)的倾向得分上sex和之后执行马氏距离匹配,您将运行以下代码:ageraceeduc

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")

如果出于任何原因(例如,卡尺或公共支持)需要估计倾向得分,则必须使用第一种语法。如果不涉及倾向得分,则第二种语法有效。只要卡尺位于其他提供的变量上,您仍然可以使用第二种语法将卡尺放在对上;例如,要放置 0.25 标准差的卡尺age,您可以输入caliper = c(age = .25)。您可以一次将卡尺放在多个变量上,如果使用第一种语法,则包括倾向得分。

这在最近邻匹配的帮助页面中都有详细说明,可以在此处或使用进行查看?method_nearest

于 2020-11-25T22:39:49.713 回答