使用allow.new.levels = TRUE进行glmer预测

时间:2015-07-17 12:50:22

标签: r predict lme4

我查看了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文档,我无法理解预测是如何进行的。

2 个答案:

答案 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可以避免这种情况,但我不知道如何实现它。

您如何看待两种方法的结合?

  1. 使用包含对主题5的观察的数据运行新模型(model1)。
  2. 找到主题5的ranef()。
  3. 计算@Roland所做的预测(仍然使用初始模型的估算等)
  4. 添加随机效果。
  5. 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时使用这些变化。