我看过Prediction with lme4 on new levels,其中引用了allow.new.levels=TRUE的R文档。
我不明白“如果为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如何预测这些值?我希望计算subject=5的ranef(),并使用模型中的系数来计算概率。我可以以任何方式打印subject=5的ranef()吗?因为我不理解allow.new.levels的R文档,所以我不能理解预测是如何做出的。
发布于 2015-07-17 21:58:46
在此特定示例中,仅使用模型的固定部分(因为这是具有单一随机效果的模型的总体级别模型):
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发布于 2015-07-18 13:56:49
因此,这意味着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不幸的是,与模型相比,model1中的估计(以及随机影响)发生了变化,但我正在努力避免在预测主题5时使用这些变化。
https://stackoverflow.com/questions/31476255
复制相似问题