首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用allow.new.levels=TRUE进行glmer预测

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

Stack Overflow用户
提问于 2015-07-17 20:50:22
回答 2查看 1.6K关注 0票数 0

我看过Prediction with lme4 on new levels,其中引用了allow.new.levels=TRUE的R文档。

我不明白“如果为allow.new.level=TRUE,则预测将使用具有以前未观察到的水平(或NAs)的数据的无条件(人口级别)值”的实际含义。

在我的例子中,我有一个名为exdata的data.frame

代码语言:javascript
复制
 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随机效果模型,因此我使用

代码语言:javascript
复制
model <- glmer(y~x1+x2+ (1|subjects), family=binomial(link="logit"), data=exdata[exdata$subjects!=5,], nAGQ=1)

我只使用前4个主题,因为我想使用最后一个主题进行预测。模型的结果是82.55的随机效应的方差和估计

代码语言:javascript
复制
(Intercept) -14.8377
x1            4.0366
x2            0.1056

对新课题的预测是

代码语言:javascript
复制
prediction <- predict(model, newdata=exdata[exdata$subjects==5,], type="response", allow.new.levels=TRUE)

给予

代码语言:javascript
复制
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文档,所以我不能理解预测是如何做出的。

EN

回答 2

Stack Overflow用户

发布于 2015-07-17 21:58:46

在此特定示例中,仅使用模型的固定部分(因为这是具有单一随机效果的模型的总体级别模型):

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2015-07-18 13:56:49

因此,这意味着lme4 (或另一个R包)没有对新级别进行预测的功能,仍然可以估计新级别的随机效果。来自@ulfelder的建议是最简单的,但它会在每次添加新的主题时改变我的估计,并且主题5的预测是基于一个模型,该模型使用了主题5的数据。我希望避免这种情况,因为可以说,该模型被设计为预测自己的值。这是由@BenBolker避免的,但我不知道如何实现它。

你觉得把这两种方法结合起来怎么样?

  1. 使用包含主题5的观测值的数据运行新模型(model1)。
  2. 为主题5查找ranef()。
  3. 按照@Roland的方式计算预测(仍使用初始模型的估计等)
  4. 添加随机效果。

那是

代码语言:javascript
复制
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时使用这些变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31476255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档