首页 > 解决方案 > R包cem和MatchIt:不同的不平衡度量

问题描述

我正在通过包 MatchIt 运行粗化精确匹配 (CEM) 作为预处理步骤,并希望在进一步分析中使用匹配的数据。作为测试,我使用包 cem 运行 CEM,并注意到不平衡测量与通过 MatchIt 包测量的不同。例如,使用 LaLonde 数据集:

library(MatchIt)
library(cem)
data(LL)

re74cut <- seq(0, 40000, 5000)
re75cut <- seq(0, max(LL$re75)+1000, by=1000)
agecut <- c(20.5, 25.5, 30.5,35.5,40.5)
my.cutpoints <- list(re75=re75cut, re74=re74cut, age=agecut)

matchit.match <- matchit(treated ~ age + education + black + married + nodegree + 
                           re74 + re75 + hispanic + u74 + u75,
                         data = LL,
                         method = "cem",
                         cutpoints = my.cutpoints)

matchit.data <- match.data(matchit.match)

matchit.imb <- imbalance(group=matchit.data$treated,
                         data=matchit.data,
                         drop=c("treated","re78","distance",
                                "weights","subclass"))

cem.match <- cem(treatment = "treated",
                 data = LL, drop = "re78",
                 cutpoints = my.cutpoints, 
                 eval.imbalance = TRUE)

matchit.imb
cem.match$imbalance

有人知道这里发生了什么吗?感谢您的任何帮助。

标签: rmatching

解决方案


有两个原因。首先,您必须将matchit对象的权重提供给imbalance()。如果包括这些,(diff)统计数据将是正确的,但 L1 统计数据仍然是错误的。

其次,通过在对 的调用中使用matchit.data而不是,L1 统计数据的中断仅使用匹配数据而不是完整数据集应用,这会产生 L1 统计数据的不同计算。为了纠正这个问题,在对 的调用中,您应该提供原始的、未匹配的数据集,并使用匹配的权重来提供有关匹配的信息。因此,您的最终调用应如下所示:LLimbalance()imbalance()imbalance()

imbalance(LL$treated, 
          data=LL, 
          drop=c("treated", "re78"), 
          weights=matchit.match$weights)

这将产生与 相同的结果cem.match$imbalance


推荐阅读