R 粗略精确匹配打印匹配对

问题描述

我正在尝试实现一对一粗化的精确匹配。我正在关注此处提供的帮助包: https://cran.r-project.org/web/packages/cem/cem.pdf

现在,我正在尝试在来自匹配包的 lalonde 数据集上的第 3 页上实现示例。我的代码如下:

library(cem)
library(Matching)

data(lalonde)
mat <- cem(treatment="treat",data=lalonde,drop="re78",k2k=TRUE,method = "euclidean",keep.all=FALSE)
#variable name "treat" is different from cran documentation
print(mat)

> print(mat)
             G0  G1
  All       260 185
  Matched    87  87
  Unmatched 173  98

这似乎完美地工作。使用“print(mat)”打印出匹配的数量,“mat”对象似乎有多个对象,除了匹配对的信息。这似乎是一个微不足道的问题,但我无法从文档中找出匹配对的信息。

有人能指出如何获得匹配的成对观察吗?例如。 Obs 1 - Obs 100 等。我希望得到匹配在一起的对。

我能看到的最近的物体是:

mat[["matched"]]

然而,这并没有告诉我治疗组中的哪个观察结果与对照组中的观察结果(以及观察结果 ID)相匹配。

我知道我在这里遗漏了一些简单的东西。任何帮助将不胜感激。

提前致谢。

解决方法

这不能用 cem 完成。它实际上并不创建匹配对;在由粗化协变量定义的每个层内,它确保每个层内处理单元和控制单元的数量相同。可以导出层,您可以尝试查找哪些单元属于哪个层。

MatchIt 包中粗化精确匹配的实现确实具有此功能。以下是您将如何使用 MatchIt 执行匹配:

library(MatchIt)
data("lalonde",package = "MatchIt") #note,different from lalonde in Matching

m.out <- matchit(treat ~ age + educ + race + married + nodegree + re74 + re75,data = lalonde,method = "cem",k2k = TRUE,k2k.method = "euclidean")

匹配对的身份存储在 match.matrix 输出对象(即 m.out)的 m.out$match.matrix 属性中。例如,参见 here。每行对应一个处理单元,列中的条目对应匹配的控制单元。要创建仅包含匹配单位的数据集,您可以在 match.data() 上运行 m.out。输出中的 subclass 列包含对成员资格。请参阅 MatchIt vignette on estimating effects after matching 了解如何在考虑配对成员资格时估计影响。 “After Pair Matching without Replacement”部分适用于使用 k2k = TRUE 的粗化精确匹配。

请注意,在 MatchIt 中实现粗化精确匹配的方式与在 cem 中的方式略有不同。与 MatchIt 粗化精确匹配的 help page 解释了这些差异,因此如果两个包之间的结果不同,请不要惊慌。我是 MatchIt 的维护者并编写了它的文档,所以如果您有任何其他问题,请告诉我。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...