R 包 cem 和 MatchIt:不同的不平衡度量

R packages cem and MatchIt: Different imbalance measure

我正在 运行 通过包 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

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

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

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

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

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