我正在通过 MatchIt 包运行粗化精确匹配 (CEM) 作为预处理步骤,并希望在进一步分析中使用匹配的数据。在查看匹配数据的摘要统计数据时,我注意到从匹配数据集中提取的平均值与 MatchIt 摘要输出不同。例如,使用 lalonde 数据集:
library(MatchIt)
library(doBy)
data(lalonde)
m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "cem")
summary(m.out) #Means from MatchIt summary output:
Summary of balance for matched data:
Means Treated Means Control
age 21.5441 21.1781
educ 10.2941 10.3827
black 0.8676 0.8676
hispan 0.0588 0.0588
married 0.0441 0.0441
nodegree 0.6176 0.6176
re74 456.1345 622.8740
re75 350.6728 520.7135
m.dat<-match.data(m.out)
ExtractedMeans<-summaryBy(age+educ+black+hispan+married+nodegree+re74+re75 ~ treat, data = m.dat, FUN=function(x) { c(Mean=mean(x)) } )
ExtractedMeans #Means extracted manually from matched data:
treat 1 0
age.Mean 21.544 19.628
educ.Mean 10.294 9.7179
black.Mean 0.8676 0.60256
hispan.Mean 0.0588 0.10256
married.Mean 0.0441 0.07692
nodegree.Mean 0.6176 0.75641
re74.Mean 456.13 609.61
re75.Mean 350.67 464.22
从匹配数据中手动提取的对照组均值与 MatchIt 摘要输出不一致。有人知道这是怎么回事吗?我上周将这个问题发布到 MatchIt gmane 电子邮件列表中,但尚未收到回复。感谢您的帮助。
最佳答案
“doSummary”函数未使用权重。如果将权重乘以要平均的变量,您将得到与包显示的平均值相同的平均值。例如,使用您的代码并执行以下操作:
> tapply(m.dat$age, m.dat$treat, mean)
0 1
19.62821 21.54412
> tapply(m.dat$age*m.dat$weights, m.dat$treat, mean)
0 1
21.17811 21.54412
因此,它们与 MatchIt 结果相同...
关于R包MatchIt错误汇总输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192982/