我查看了Prediction with lme4 on new levels,其中引用了针对allow.new.levels = TRUE的R文档。
我不明白“if allow.new.level = TRUE,然后预测将使用无条件(人口级别)值的数据与之前未观察到的水平(或NAs)”实际上意味着。
在我的情况下,我有一个名为exdata的data.frame
subjects y x1 x2
1 0 1.6179339 0.9517194
1 0 1.4128789 1.0248514
1 0 0.9127448 1.8073684
1 0 1.5729219 2.1003925
1 0 1.6254359 1.2471660
2 0 1.6626074 8.5102559
2 0 1.3903638 6.0425018
2 0 1.1438239 2.5654422
2 0 1.1393088 2.9982242
2 0 1.1564141 2.8395960
3 0 1.1688192 13.9791461
3 0 0.9255715 18.8544778
3 0 1.2369097 4.2376671
3 0 1.3021943 9.6894289
3 0 1.2296961 12.4789910
4 0 1.0978131 2.0577688
4 0 1.1405409 1.4339044
4 0 1.0355546 1.9496732
4 0 1.1370849 1.7402332
4 0 1.1942591 1.3509880
5 0 0.4141535 2.1723957
5 0 0.9129311 0.8274350
5 0 0.9658796 1.2754419
5 0 0.8370701 2.1998756
5 0 0.5509546 2.3590774
6 0 1.2827411 1.5474088
6 0 1.1636606 0.7746669
6 0 1.1782936 1.1566909
6 0 1.1630238 1.7486415
6 0 1.1565711 0.6984409
7 0 0.8600331 0.1382253
7 0 0.8303510 0.1927431
7 0 0.8087967 0.6065926
7 0 0.7815187 0.9464185
7 0 0.7532042 0.9771646
8 0 1.1638190 1.3456340
8 0 0.5867126 1.4862727
8 0 0.6523964 0.5138441
8 0 0.9513971 2.3932337
8 0 0.9278743 2.3273670
9 1 1.0978606 1.2585635
9 1 1.0414897 1.2946008
9 0 0.6215353 0.2907148
9 0 1.0267046 1.0173432
9 0 1.1470992 0.7014759
10 0 0.9505266 0.4247866
10 0 0.8624758 0.2276577
10 0 0.8279061 0.2314898
10 0 0.7856832 0.3143003
10 0 0.7569739 0.7880622
有10个科目,y作为回答(0-1)和两个解释变量。我想将它建模为logit glm随机效应模型,所以我使用
model <- glmer(y~x1+x2+ (1|subjects), family=binomial(link="logit"), data=exdata[exdata$subjects!=5,], nAGQ=1)
我只使用前4个主题,因为我想使用最后一个进行预测。模型的结果是82.55随机效应的变化和估计值
(Intercept) -14.8377
x1 4.0366
x2 0.1056
新主题的预测是
prediction <- predict(model, newdata=exdata[exdata$subjects==5,], type="response", allow.new.levels=TRUE)
给
2.408299e-06 1.564704e-05 2.031392e-05 1.331586e-05 4.266690e-06
这些值如何预测?我希望计算主题= 5的ranef(),并使用模型中的系数来计算可能性。我可以以任何方式打印主题= 5的ranef()吗?由于我不理解allow.new.levels的R文档,我无法理解预测是如何进行的。
答案 0 :(得分:2)
在此特定示例中,仅使用模型的固定部分(因为这是具有单个随机效应的模型的总体级模型):
y1 <- as.matrix(cbind(1, exdata[exdata$subjects==5, c("x1", "x2")])) %*% fixef(model)
c(exp(y1)/(1+exp(y1)))
#[1] 2.408298e-06 1.564704e-05 2.031392e-05 1.331586e-05 4.266689e-06
答案 1 :(得分:0)
所以这意味着lme4(或另一个R包)没有一个功能可以让新级别的预测仍然估计新级别的随机效果。 来自@ulfelder的建议是最简单的,但是每次添加新主题时它都会改变我的估计,而主题5的预测基于使用来自主题5的数据的模型。我想避免这种情况,因为然后,该模型被设计为预测其自身的值,可以这么说。 @BenBolker可以避免这种情况,但我不知道如何实现它。
您如何看待两种方法的结合?
即
model1 <- glmer(y~x1+x2+ (1|subjects), family=binomial(link="logit"), data=exdata, nAGQ=1)
y1 <- as.matrix(cbind(1, exdata[exdata$subjects==5, c("x1", "x2")])) %*% fixef(model)
y2 <- y1 + unlist(ranef(model1))[5]
c(exp(y2)/(1+exp(y2)))
2.398097e-06 1.558076e-05 2.022787e-05 1.325946e-05 4.248617e-06
不幸的是,与模型相比,模型1中的估计(以及随机效应)发生了变化,但我试图避免在预测主体5时使用这些变化。