首页 > 解决方案 > R无法根据公式生成倾向得分;没有错误还没有计算

问题描述

我想在多重插补后做倾向评分,但是我认为 R 是错误的,尽管没有显示错误。

当加载包“cobalt”时,有一个合并的数据集: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     

标签: r

解决方案


问题在于将其输出中变量mice的变量类型从更改为。正因为如此,它没有级别,并且返回,所以循环永远不会运行。替换为,这应该可以修复错误。我将在下一个版本中更新小插图以反映这一点。.impcomplete()factornumericlevels(imp.data$.imp)NULLlevelsuniquecobalt


推荐阅读