我想在多次插补后进行倾向评分,但我认为R尽管没有显示错误仍然存在错误。
当加载包"钴"时,有一个合并的数据集:lalonde_mis,我们将在这个例子中使用它。
多个输入数据如下:
library(mice)
library(cobalt)
library(MatchIt)
data(lalonde_mis)
m <- 10
imp <- mice(lalonde_mis, m = m, print = FALSE)
imp.data <- complete(imp, "long", include = FALSE)
imp.data <- imp.data[with(imp.data, order(.imp, .id)),]
现在计算倾向得分:
imp.data$ps <- imp.data$match.weight <- rep(0, nrow(imp.data))
for (i in levels(imp.data$.imp)) {
in.imp <- imp.data$.imp == i
imp.data$ps[in.imp] <- glm(treat ~ age + educ + race +
married + nodegree +
re74 + re75,
data = imp.data[in.imp,],
family = "binomial")$fitted.values
m.out <- matchit(treat ~ ps, data = imp.data[in.imp,],
distance = imp.data$ps[in.imp])
imp.data$match.weight[in.imp] <- m.out$weights
}
上述公式的这一部分应该计算并给出倾向得分:
imp.data$ps <- imp.data$match.weight <- rep(0, nrow(imp.data))
for (i in levels(imp.data$.imp)) {
in.imp <- imp.data$.imp == i
imp.data$ps[in.imp] <- glm(treat ~ age + educ + race +
married + nodegree +
re74 + re75,
data = imp.data[in.imp,],
family = "binomial")$fitted.values}
然而,当我回顾数据集时,imp.data $ match.weight和imp.data $ ps都保持为0; R虽然没有出现错误;这里发生了什么?
修改 sessionInfo()用于分析
R version 3.4.4 (2018-03-15)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
答案 0 :(得分:0)
问题是mice
将.imp
输出中complete()
变量的变量类型从factor
更改为numeric
。因此,它没有级别,并且levels(imp.data$.imp)
返回NULL
,因此循环永远不会运行。将levels
替换为unique
,这样可以解决错误。我将在下一个版本中更新cobalt
小插图以反映这一点。