首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Bootstrapping为GLMM中的回归曲线创建置信区间

使用Bootstrapping为GLMM中的回归曲线创建置信区间
EN

Stack Overflow用户
提问于 2016-09-05 06:42:20
回答 1查看 541关注 0票数 0

创建了GLMM模型,并绘制了每个因素的预测概率。但是,我无法理解如何使用BootMer函数创建置信区间。我一直收到不能从非整数先验权重模拟的错误信息。我希望有人能帮上忙?提前谢谢。

代码语言:javascript
复制
glmm1 <- glmer(cbind(Total_Dead, Total_Collected - Total_Dead) ~  
                 Species + timeseries + (1|Location), 
               data = dat, family= "binomial")
dat$timeseries <- dat$Study_Date - 1998

plot(predict(glmm1, data.frame(Species="An. Arab", timeseries= dat$timeseries), 
             type="response", re.form = NA) ~
       dat$timeseries, frame=FALSE, bty="n", pch="", xaxt="n", ylim=c(0, 0.5), 
     ylab="Predicted mortality", xlab="Year", 
     main = "Predicted mortality by species", 
     cex.lab=1.6, yaxt="n")
axis(1, at=c(1:17), labels=1999:2015, cex.axis=1.8)
axis(2, las=2, at=seq(0, 1, 0.2), labels=seq(0, 1, 0.2), cex.axis=1.8) 

COLS <- c("blue", "red", "purple", "aquamarine3", "orange")
PCH <- c(17, 15, 19, 20, 5)

for(i in 1:length(unique(levels(dat$Species)))){
  points((dat$Total_Dead[dat$Species == levels(dat$Species)[i]] / 
            dat$Total_Collected[dat$Species == levels(dat$Species)[i]]) ~ 
           dat$timeseries[dat$Species == levels(dat$Species)[i]], 
         pch=PCH[i], col=COLS[i])
  lines(predict(glmm1, data.frame(Species=levels(dat$Species)[i], 
                                  timeseries = dat$timeseries), type="response", 
                re.form = NA) ~ dat$timeseries, lty=4, col=COLS[i])
}

bootstrap <- bootMer(x=glmm1, FUN= fixef, nsim=200)  
EN

回答 1

Stack Overflow用户

发布于 2016-09-05 06:59:42

出于某种原因,Bootmer在这方面遇到了问题,您必须使用mertools包

代码语言:javascript
复制
library(merTools)
preds <- predictInterval(glmm1, newdata = your.datarame, n.sims = 1000)

然后我会使用preds data.frame来绘制,得到的data.frame有拟合,上下限,然后你可以使用geom_ribbon来绘制它,如果你需要更多的帮助,请让我知道。

现在请耐心听我说,您实际上想为您的图形创建一个新的标准化数据集。如果你使用下面的代码,它将会工作:

代码语言:javascript
复制
glmm1 <- glmer(cbind(Total_Dead, Total_Collected - Total_Dead) ~  
             Species + timeseries + (1|Location),
           data = dat,family= "binomial")

拟合模型,然后创建新的数据集,这将使每个物种的时间序列从1到16,在您的第一个位置(Akron),请注意,您必须为每个位置执行此操作如果您想要每个位置的图表,您只需将[]之间的数字从1更改为2,直到您的17个位置

代码语言:javascript
复制
new.data <-data.frame(timeseries = rep(1:16, times = 5), Species = rep(unique(dat$Species), each = 16), Location = rep(unique(dat$Location)[1], each = 80))

然后预测此类数据集的值和间隔

代码语言:javascript
复制
preds <- predictInterval(glmm1, newdata = new.data, n.sims = 1000)

现在将此预测加入到您的new.data中

代码语言:javascript
复制
new.data <- cbind(new.data, preds)

最后为每个物种绘制不同的颜色

代码语言:javascript
复制
ggplot(new.data, aes(x = timeseries, y = fit)) + geom_ribbon(aes(ymax=upr, ymin =lwr, fill=Species), alpha = 0.9)+ geom_line(aes(color=Species))

如果你不理解某件事,请毫不犹豫地继续询问,目前你的标准错误相当大,所以首先检查一下你是否更喜欢它

代码语言:javascript
复制
ggplot(new.data, aes(x = timeseries, y = fit)) + geom_line(aes(color=Species))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39322111

复制
相关文章

相似问题

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