我正在尝试预测在我的二项式数据上运行的glmer模型随时间推移的值(x轴中的天数)。 Total Alive和Total Dead是计数数据。这是我的模型,以及下面的相应步骤。
full.model.dredge<-glmer(cbind(Total.Alive,Total.Dead)~(CO2.Treatment+Lime.Treatment+Day)^3+(Day|Container)+(1|index),
data=Survival.data,family="binomial")
我们已经在代码中看到了过度离散(1:index)。
然后我们使用dredge命令确定具有主效应的最佳拟合模型(CO2.Treatment,Lime.Treatment,Day)及其相应的相互作用。
dredge.models<-dredge(full.model.dredge,trace=FALSE,rank="AICc")
然后为他们创建了工作区变量
my.dredge.models<-get.models(dredge.models)
然后我们进行了模型平均以平均最佳拟合模型的系数
silly<-model.avg(my.dredge.models,subset=delta<10)
但是现在我想要创建一个图形,Y轴上的Total Alive和X轴上的Days,以及取决于模型输出的拟合线。我理解这很棘手,因为模型连接了Total.Alive和Total.Dead(请参阅模型中的cbind(Total.Alive,Total.Dead)
。
当我尝试运行预测命令时,我收到错误
# 9: In UseMethod("predict") :
# no applicable method for 'predict' applied to an object of class "mer"
答案 0 :(得分:14)
您的大多数问题是您使用的是1.0之前版本的lme4
,但未实现predict
方法。 (更新将是最简单的,但我相信,如果由于某种原因你不能,http://glmm.wikidot.com/faq有一个方法可以通过提取固定效应设计矩阵和系数来手动进行预测......)实际上并不是预测的问题,它预测了对数概率(默认情况下)或概率(如果type="response"
);如果你想预测数字,你必须适当地乘以N.
你没有给出一个,但这里是一个可重现的(虽然有些微不足道)使用内置cbpp
数据集的例子(我确实得到了一些警告信息 - no non-missing arguments to max; returning -Inf
- 但是我认为这可能是因为模型中只有一个非平凡的固定效应参数?)
library(lme4)
packageVersion("lme4") ## 1.1.4, but this should work as long as >1.0.0
library(MuMIn)
方便以后使用(ggplot
)为比例添加变量:
cbpp <- transform(cbpp,prop=incidence/size)
适合模型(您也可以使用glmer(prop~..., weights=size, ...)
)
gm0 <- glmer(cbind(incidence, size - incidence) ~ period+(1|herd),
family = binomial, data = cbpp)
dredge.models<-dredge(gm0,trace=FALSE,rank="AICc")
my.dredge.models<-get.models(dredge.models)
silly<-model.avg(my.dredge.models,subset=delta<10)
预测确实有效:
predict(silly,type="response")
创建情节:
library(ggplot2)
theme_set(theme_bw()) ## cosmetic
g0 <- ggplot(cbpp,aes(period,prop))+
geom_point(alpha=0.5,aes(size=size))
设置预测框架:
predframe <- data.frame(period=levels(cbpp$period))
在人口级预测 (ReForm=NA
- 在lme4`1.0.5中可能必须是REForm=NA
:
predframe$prop <- predict(gm0,newdata=predframe,type="response",ReForm=NA)
将其添加到图表中:
g0 + geom_point(data=predframe,colour="red")+
geom_line(data=predframe,colour="red",aes(group=1))