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
相同的结果。
我正在 运行 通过包 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
相同的结果。