R中的预测 - GLMM

3

当我们在R中使用传统的逻辑回归进行预测时,例如:

library(dplyr)
n = 300
xx<-c("r1","r2","r3","r4","r5")
xxx<-c("e1","e2","e3")
p=0.3
df1 <- data_frame(
  xx1 = runif(n, min = 0, max = 10),
  xx2 = runif(n, min = 0, max = 10),
  xx3 = runif(n, min = 0, max = 10),
 School = factor(sample(xxx, n,re=TRUE)),
 Rank = factor(sample(xx, n,re=TRUE)),
 yx = as.factor(rbinom(n, size = 1, prob = p))
)
df1
mm<-glm(yx ~ xx1 + xx2 + xx3 + School + Rank,binomial,df1)
n11 = data.frame(School="e3",Rank="r2",xx1=8.58,xx2=8.75,xx3=7.92)

我们使用:

predict(mm, n11, type="response") #No meu caso especifico

你可以使用 predict(mm, n11) 进行预测。

根据我们的兴趣,没有问题。

但当我们使用GLMM时,则需要注意。

library(lme4)
mm2 <- glmer(yx ~ xx1 + xx2 + xx3 + Rank +  (Rank | School), data = df1, 
family = "binomial",control = glmerControl(calc.derivs = FALSE))
predict(mm2, n11, type="response") #No meu caso especifico

显示错误。
 Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels

我尝试过这样做

 predict(m2,n11, re.form=(~Rank|School))

这会显示错误信息

Error in UseMethod("predict") : 
no applicable method for 'predict' applied to an object of class "glmmadmb"

在R-GLMM中,正确的预测形式是什么?

3
n11是一个数据框(Data Frame),其中包含了School(学校)、Rank(排名)、xx1、xx2和xx3等变量。其中School和Rank变量使用了df1数据框中的级别(levels),e3代表School中的第三个水平,r2代表Rank中的第二个水平。xx1、xx2和xx3是数值型变量,分别为8.58、8.75和7.92。 - Roland
@Roland,请回复为答案?我已经在这里开了一个问题(我们尝试覆盖这些情况,但显然我没有涵盖所有边缘[?]情况...) - Ben Bolker
顺便提一下,在第二个例子中,您显然正在尝试使用glmmadmb对象而不是merMod(lme4)对象进行预测... - Ben Bolker
1个回答

6

问题在于您的模型规范与您提供的新数据结构不匹配。更具体地说,(自动转换为因子)变量“School”和“Rank”的级别只有一个级别,而模型期望有三个级别。它有三个级别的参数,因此如果找不到这三个级别,则无法使用适当的设计矩阵来计算新的预测结果。

这就是为什么评论中@Roland是正确的根本原因,您必须明确创建一个具有与训练模型所用的数据相同级别的变量。

n11 <- data.frame(School=factor("e3", levels = levels(df1$School)), 
                  Rank=factor("r2", levels =levels(df1$Rank)),
                  xx1=8.58,xx2=8.75,xx3=7.92)

1
这个问题现在已经在 lme4 的开发版本中得到解决(1.1-16,在 github 上)。 - Ben Bolker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接