在 MatchIt 包中使用马氏距离和卡尺
Use Mahalonobis distance and caliper in MatchIt package
首先:这个问题可能是duplicate/already解决了of/inthis Whosebug post.
我想使用 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)
但这仅使用最近邻执行基于马哈拉诺比斯的匹配。如果我想更严格怎么办?是否可以将卡尺引入马氏匹配?想法如下:对于少数群体中的每个单元,找到马哈拉诺比斯距离最小 并且位于定义的卡尺 内的多数群体中的一个单元。如果没有来自多数组的单元,则应丢弃来自少数组的相应单元。
结果应该是大小相等的治疗组和对照组,其中包含在各自协变量中接近的成对单位。 'closeness' 应该可以通过设置卡尺的严格程度来控制。更严格的卡尺会导致少数群体丢弃更多单位。
也许我对基于 mahalanobis 的匹配程序也有错误的理解,但是是否可以(并推荐)使用 MatchIt
来做到这一点?
是的,使用 MatchIt
4.0.0 及更高版本很简单。如果您想在马氏距离上进行匹配但包含倾向得分卡尺,则 distance
参数需要对应于倾向得分,并且 mahvars
参数控制执行马氏距离匹配的协变量。例如,要在估计包含其他变量(例如 race
和 educ
)的倾向得分之后对 sex
和 age
执行马氏距离匹配,除了这两个,你会 运行 以下代码:
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")
如果出于任何原因(例如卡尺或共同支持度)需要估计倾向得分,则必须使用第一种语法。如果不涉及倾向得分,则第二种语法有效。只要卡尺在其他提供的变量上,您仍然可以使用第二种语法将卡尺放在对上;例如,要放置 age
的 0.25 标准差的卡尺,您可以输入 caliper = c(age = .25)
。您可以一次将卡尺放在多个变量上,如果使用第一种语法,则包括倾向得分。
这在最近邻匹配的帮助页面中有详细说明,可以查看here或?method_nearest
。
首先:这个问题可能是duplicate/already解决了of/inthis Whosebug post.
我想使用 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)
但这仅使用最近邻执行基于马哈拉诺比斯的匹配。如果我想更严格怎么办?是否可以将卡尺引入马氏匹配?想法如下:对于少数群体中的每个单元,找到马哈拉诺比斯距离最小 并且位于定义的卡尺 内的多数群体中的一个单元。如果没有来自多数组的单元,则应丢弃来自少数组的相应单元。
结果应该是大小相等的治疗组和对照组,其中包含在各自协变量中接近的成对单位。 'closeness' 应该可以通过设置卡尺的严格程度来控制。更严格的卡尺会导致少数群体丢弃更多单位。
也许我对基于 mahalanobis 的匹配程序也有错误的理解,但是是否可以(并推荐)使用 MatchIt
来做到这一点?
是的,使用 MatchIt
4.0.0 及更高版本很简单。如果您想在马氏距离上进行匹配但包含倾向得分卡尺,则 distance
参数需要对应于倾向得分,并且 mahvars
参数控制执行马氏距离匹配的协变量。例如,要在估计包含其他变量(例如 race
和 educ
)的倾向得分之后对 sex
和 age
执行马氏距离匹配,除了这两个,你会 运行 以下代码:
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")
如果出于任何原因(例如卡尺或共同支持度)需要估计倾向得分,则必须使用第一种语法。如果不涉及倾向得分,则第二种语法有效。只要卡尺在其他提供的变量上,您仍然可以使用第二种语法将卡尺放在对上;例如,要放置 age
的 0.25 标准差的卡尺,您可以输入 caliper = c(age = .25)
。您可以一次将卡尺放在多个变量上,如果使用第一种语法,则包括倾向得分。
这在最近邻匹配的帮助页面中有详细说明,可以查看here或?method_nearest
。