r - 在 MatchIt 包中使用马氏距离和卡尺

标签 r matching mahalanobis propensity-score-matching

首先:这个问题可能是重复的/已经解决了/在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)的倾向得分后,对 sexage 执行马氏距离匹配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/

相关文章:

MySQL 搜索单词中带有 $ 的精确单词

r - 如何在使用 Dplyr 的 Group_by 和 Summarise_at 时将 na.rm=TRUE 与 n() 一起使用

R:通过多个答案拆分数据框

r - 在dplyr中突变虚拟变量

coding-style - Ocaml:糟糕的风格,此模式匹配中的所有子句都受到保护

opencv - 线性判别分析和主成分分析的主要区别是什么

python - 带有马氏距离损失的 Keras 自定义损失函数如何

python - 如何在sklearn DistanceMetrics中使用马氏距离?

python - 在 knn crossval 网格搜索中定义距离参数 (V)(seuclidean/mahalanobis 距离度量)

r - 从 R 中每个列表的元素中减去值