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 page 与 MatchIt
的粗化精确匹配解释了这些差异,因此如果两个包的结果不同,请不要惊慌。我是 MatchIt
的维护者并编写了它的文档,所以如果您有任何其他问题,请告诉我。
我正在尝试实现一对一的粗化精确匹配。我正在关注此处提供的帮助包: 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
属性中。请参阅 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 page 与 MatchIt
的粗化精确匹配解释了这些差异,因此如果两个包的结果不同,请不要惊慌。我是 MatchIt
的维护者并编写了它的文档,所以如果您有任何其他问题,请告诉我。