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

时间:2016-09-04 22:42:20

标签: r glm confidence-interval statistics-bootstrap

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

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)  

1 个答案:

答案 0 :(得分:0)

出于某种原因,Bootmer遇到了问题,你必须使用mertools软件包

library(merTools)
preds <- predictInterval(glmm1, newdata = your.datarame, n.sims = 1000)

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

现在请耐心等待,您实际上想为图表制作新的标准化数据集。如果您使用此代码,它将起作用:

glmm1 <- glmer(cbind(Total_Dead, Total_Collected - Total_Dead) ~  
             Species + timeseries + (1|Location),
           data = dat,family= "binomial")

适合您的模型,然后创建您的新数据集,这将为您的第一个位置(阿克伦)的每个物种提供1至16的时间序列,请注意,如果您需要,则必须为每个位置执行此操作每个位置的图表,只需将[]从1更改为2到最多17个位置即可。

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))

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

preds <- predictInterval(glmm1, newdata = new.data, n.sims = 1000)

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

new.data <- cbind(new.data, preds)

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

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))

如果您不明白某些事情,请不要犹豫,不断询问,目前您的标准错误非常大,所以先检查一下您是否喜欢这样的

ggplot(new.data, aes(x = timeseries, y = fit)) + geom_line(aes(color=Species))