我正在尝试从我的模型做出预测:
mod<-lme(height~direction+time+distnest+loop+twc+twc:direction,random=~1|bird_id/FT_no,data=dat,correlation=corAR1(0.5))
不幸的是,我有一个嵌套的随机和5个固定效果,并且真的不知道如何处理它们。
所有固定效果都是数字,除了“方向”和“时间”,它们是两级因子(“陆地”或“海洋”;“白天”或“夜晚”)。
对于模型预测,我尝试过以下方法:
newdat<-data.frame(loop=seq(min(dat$loop),max(dat$loop),length=100),
direction=factor("land",levels(dat$direction)),
time_code=factor("1",levels(dat$time)),
distnest=mean(dat$distnest),
twc=mean(dat$twc))
newdat$pred<-predict(mod,newdata=newdat,level=0)
plot(dat$loop,dat$height,pch=16,las=1,cex.lab=1.2)
lines(newdat$loop,yhat,lwd=2) ### for plotting one of the fixed effects
newdat$predse<-predict(mod,newdat,se.fit=TRUE)$se.fit
但是当使用se.fit = TRUE时会出现错误:“predict.lme中的错误(mod3,newdat,se.fit = TRUE):无法在'newdata'上评估所需级别的组”
se.fit不适用于lmes吗?省略级别= 0不起作用。代码错了吗?
我也尝试过glmm.wikidot的代码:
newdat<-expand.grid(direction=c("land","sea"),time_code=c("1","2"),loop30=c(0.08,1),distne st=c(0.01,99.43),twc=c(-56.88744,57.93735))
newdat$pred<-predict(mod3,newdat,level=0)
Designmat <- model.matrix(eval(eval(mod3$call$fixed)[-2]), newdat[-ncol(newdat)])
predvar <- diag(Designmat %*% mod3$varFix %*% t(Designmat))
newdat$SE <- sqrt(predvar)
newdat$SE2 <- sqrt(predvar+mod3$sigma^2)
library(ggplot2)
pd <- position_dodge(width=0.4)
g0 <- ggplot(newdat,aes(x=loop30,y=pred,colour=direction))+
geom_point(position=pd)
g0 + geom_linerange(aes(ymin=pred-2*SE,ymax=pred+2*SE), position=pd)
## prediction intervals
g0 + geom_linerange(aes(ymin=pred-2*SE2,ymax=pred+2*SE2), position=pd)
但情节完全错了。任何人都可以帮我正确的代码吗?非常感谢。
祝福,安娜
答案 0 :(得分:0)
对于预测,您需要模型的RHS中的所有项目... _as_named _:
direction + time + distnest + loop + twc
...and... bird_id ...and... FT_no
目前您将time
变量命名为time_code
并且未能包含任何“随机效应”变量。以下是来自nlme :: lme帮助页面的相关位:“固定和随机效果模型中使用的所有变量以及分组因子必须存在于数据框中。如果缺少,则返回拟合值。”< / p>