【问题标题】:Creating confidence intervals for regression curve in GLMM using Bootstrapping使用 Bootstrapping 在 GLMM 中为回归曲线创建置信区间
【发布时间】:2016-09-04 22:42:19
【问题描述】:

已创建 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)  

【问题讨论】:

    标签: r glm confidence-interval statistics-bootstrap


    【解决方案1】:

    由于某种原因 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))
    

    【讨论】:

    • 太棒了!谢谢您的帮助。至于 geom_ribbon 函数,predictIntervals 可以在 ggplot2 之外使用吗?只是我正在使用 GLMM,并且对在 GGPLOT2 中运行它们并不十分熟悉。我的目标是预测每个有问题的物种的概率,在线条周围有自举的置信区间。但我对 R 很陌生,因此不清楚如何将上述区间整合到每个物种回归线中。
    • @JamieMurphy 如果您可以共享数据集,那么对您的帮助会简单得多,但是在随后您必须为每个物种创建一个新数据集,我将尝试使用示例来完成R中的数据集
    • 对不起,我以为我已经包含了链接。在这里,再次感谢! 1drv.ms/u/s!Ao69751qWk2CglTZ04pyKGceq5BN
    • 对不起@JamieMurphy 我有点困惑,因为我没有使用响应变量而不是向量而不是格式化版本的 cbind(Total_Dead, Total_Collected - Total_Dead) 来完成 glmer,可以你告诉我你为什么使用这种格式,在哪里可以读到一些关于它的信息,如果你填写我相信我可以制作图表
    • 嗨,德里克,当然。我只是利用这种方法来处理数据的比例方面。通过 cbind(Total_Dead, Total_Collect - Total_Dead) 或更准确地说 Total_Dead,Total_Alive 或 Success 或 failure 创建二项式分析的响应变量。我遵循了 R 书第 590 页的建议,即具有比例数据的广义混合模型。
    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2010-11-13
    • 2018-05-07
    • 1970-01-01
    • 2018-02-05
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多