R 粗化精确匹配(打印出匹配对)

R Coarsened Exact Matching (Printing out matched pairs)

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

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

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

匹配对的标识存储在 m.out 输出对象(即 m.out$match.matrix)的 match.matrix 属性中。请参阅 for example. Each row corresponds to a treated unit and the entries in the column correspond to the matched control units. To create a dataset containing only the matched units, you can then run match.data() on m.out. The subclass column in the output contains pair membership. See the MatchIt vignette on estimating effects after matching 了解有关如何在考虑对成员资格时估计影响的信息。 “无需替换的配对匹配后”部分适用于与 k2k = TRUE.

的粗化精确匹配

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