r - 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
有人知道这里发生了什么吗?感谢您的任何帮助。
解决方案
有两个原因。首先,您必须将matchit
对象的权重提供给imbalance()
。如果包括这些,(diff)
统计数据将是正确的,但 L1 统计数据仍然是错误的。
其次,通过在对 的调用中使用matchit.data
而不是,L1 统计数据的中断仅使用匹配数据而不是完整数据集应用,这会产生 L1 统计数据的不同计算。为了纠正这个问题,在对 的调用中,您应该提供原始的、未匹配的数据集,并使用匹配的权重来提供有关匹配的信息。因此,您的最终调用应如下所示:LL
imbalance()
imbalance()
imbalance()
imbalance(LL$treated,
data=LL,
drop=c("treated", "re78"),
weights=matchit.match$weights)
这将产生与 相同的结果cem.match$imbalance
。
推荐阅读
- php - 如何设置扩展 WordPress 编码标准的 PHP CodeSniffer + VSCode 中的自动修复错误?
- c# - 是否有基础着色器类?
- amazon-web-services - 将 PowerShell 脚本发布到 AWS Lambda
- python - fetch/gclient 同步失败作为 teamcity 的命令行
- python - 如何在 python 上规范化这些数据?我怎样才能在纸上进行计算?
- tig - Tig 不显示线条,而是显示 ~T~B (或类似的)
- javascript - 如何通过 XSS 在另一个网页上加载 javascript?
- mongodb - 如何获取子数组对象中可用的 ID 列表
- unit-testing - 为什么为每次更改编写新的单元测试是愚蠢的做法?
- php - PHP组合两个或多个数组