我一直在尝试分析 R 中多级模型中多重插补的结果。我知道我的 lme4 模型有效。我知道我的估算是有效的。但是使用 Zelig 或使用 mitools::MIcombine() 都会引发关于 S4 对象的类似错误。
library(lme4)
library(mitools)
data(smi)
# this model works fine
model.f.glm <- function(df) {
glm(drinkreg~wave*sex,family=binomial(), data=df)
}
# but this one will not
model.f.glmer <- function(df) {
glmer(drinkreg~wave*sex + (1|id),family=binomial(), data=df)
}
# check the base model first:
model.f.glm(smi$imputations[[1]])
model.f.glmer(smi$imputations[[1]])
# use the mitools methods:
models.glm <- lapply(smi$imputations, model.f.glm)
models.glmer <- lapply(smi$imputations, model.f.glmer)
summary(MIcombine(models.glm))
# error:
summary(MIcombine(models.glmer))
# Error in cbar + results[[i]] : non-numeric argument to binary operator
# get MIcombine for them:
betas.glm <- MIextract(models.glm, fun = coef)
vars.glm <- MIextract(models.glm, fun = vcov)
summary(MIcombine(betas.glm, vars.glm))
betas.glmer <- MIextract(models.glmer, fun = fixef)
vars.glmer <- MIextract(models.glmer, fun = vcov)
# error:
summary(MIcombine(betas.glmer, vars.glmer))
# Error in diag(vcov(object)) :
# no method for coercing this S4 class to a vector
与 Zelig 和 Amelia 一起:
library(Zelig)
library(ZeligMultilevel)
library(Amelia)
data(africa)
a.out <- amelia(x = africa, cs = "country", ts = "year", logs = "gdp_pc")
# glm:
z.out <- zelig(gdp_pc ~ trade + civlib, model = "ls", data = a.out)
summary(z.out)
# glmer:
z.out <- zelig(gdp_pc ~ trade + civlib + (1 | year), model = "ls.mixed", data = a.out)
# ERROR:
summary(z.out)
#Error in diag(vcovlist[[i]]) :
# no method for coercing this S4 class to a vector
我看过之前的这篇文章,大约四年前,@Roman Luštrik 花了很多精力来修复摘要——但这似乎又是一个问题。有什么想法吗?