当前位置:   article > 正文

R语言广义线性混合模型(GLMM)bootstrap预测置信区间可视化

R语言广义线性混合模型(GLMM)bootstrap预测置信区间可视化

全文链接:https://tecdat.cn/?p=35552

通过线性模型和广义线性模型(GLM),预测函数可以返回在观测数据或新数据上预测值的标准误差点击文末“阅读原文”获取完整代码数据)。

相关视频

然后,利用这些标准误差绘制出拟合回归线周围的置信区间或预测区间。置信区间(CI)的重点在于回归线,其可以解释为(假设我们绘制的是95%的置信区间):“如果我们重复抽样X次,那么回归线将有95%的概率落在这个区间内”。另一方面,预测区间的重点在于单个数据点,其可以解释为(同样假设我们绘制的是95%的置信区间):“如果我们在这些特定的解释变量值上抽样X次,那么响应值将有95%的概率落在这个区间内”。

对于广义线性混合模型(GLMM),预测函数不允许推导标准误差,原因是:“没有计算预测标准误差的选项,因为很难定义一种有效的方法来将方差参数中的不确定性纳入其中”。这意味着目前没有办法将拟合的随机效应标准差的估计(其估计值可能或多或少准确)纳入预测值标准误差的计算中。不过,我们仍然可以推导置信区间或预测区间,但需要注意,我们可能会低估估计值的不确定性。

  1. library(lme4) # 加载lme4包,用于线性混合效应模型的分析
  2. # 第一个案例:简单的线性混合效应模型,从10个组中模拟100个数据点,具有一个连续的固定效应变量
  3. x <- runif(100, 0, 10) # 生成100个在010之间的均匀分布随机数,作为固定效应变量x
  4. # 固定效应系数
  5. fixed <- c(1, 0.5) # 设定固定效应系数,这里假设截距为1,x的系数为0.5
  6. # 随机效应
  7. rnd <- rnorm(10, 0, 0.7) # 生成10个来自均值为0、标准差为0.7的正态分布的随机数,作为随机效应
  8. # 模型
  9. # 使用类似predict的方法计算第一个置信区间和预测区间
  10. newdat <- data.frame(x = seq(0, 10, length = 20)) # 生成一个新的数据框newdat,其中x是从010的等差序列,长度为20

这段代码是继续上面的线性混合效应模型(LMM)分析的,它计算了预测值、预测区间和置信区间,并使用bootMer函数进行了自助法(bootstrap)来估计置信区间。接下来,我会逐步解释这段代码的内容:

  1. # 生成新数据框newdat的模型矩阵
  2. mm <- model.matrix(~x, newdat)
  3. # 根据固定效应计算新数据框的预测值
  4. newdat$y <- mm %*% fixef(m)
  5. # 使用vcov函数计算模型协方差矩阵,并使用tcrossprod计算其转置和原始矩阵的乘积
  6. # 然后与模型矩阵mm相乘,得到预测值的方差
  7. # 计算总方差,包括随机效应方差(此处仅考虑随机截距)
  8. # 注意:这里假设随机效应只有一个,即随机截距,对于更复杂的模型需要调整
  9. # 在newdat数据框中添加预测值、预测区间的下限和上限、置信区间的下限和上限
  10. newdat <- data.frame(
  11. newdat,
  12. plo = newdat$y - 1.96 * sqrt(pvar1), # 预测区间的下限
  13. # 第二版:使用bootMer进行自助法估计置信区间
  14. # 定义一个函数,该函数应用于nsim次模拟,返回拟合值
  15. predFun <- function(.) mm %*% fixef(.)
  16. # 将自助法得到的置信区间的下限和上限添加到newdat数据框中
  17. newdat$blo <- bb_se[1,]
  18. # 绘制原始数据、拟合线、预测区间和置信区间
  19. plot(y ~ x, data)
  20. lines(newdat$x, newdat$y, col="red", lty=2, lwd=3)
  21. # 添加图例
  22. legend("topleft", legend=c("Fitted line", "Prediction interval", "Confidence interval", "Bootstrapped CI"),

这段代码的主要功能是:

  1. 使用模型矩阵和固定效应系数来计算新数据点的预测值。

  2. 计算预测值的方差(pvar1),进而得到预测区间。

  3. 计算包含随机效应方差的总方差(tvar1),进而得到置信区间。

  4. 使用bootMer函数进行自助法抽样,估计置信区间。

  5. 最后,绘制原始数据、拟合线、预测区间和置信区间。

需要注意的是,这段代码假设随机效应只有一个随机截距。对于包含其他类型随机效应的模型,计算总方差时需要相应地进行调整。此外,bootMer函数可能需要较长时间来执行,特别是当模型复杂或自助法抽样次数较多时。

在上述代码中,模拟数据的生成和模型的拟合都是基于线性混合效应模型(LMM)的。然而,计算置信区间(CI)和预测区间(PI)的部分并没有给出具体的实现,因为对于线性混合效应模型,这些区间的计算通常比线性模型更复杂。通常,我们会使用自助法(bootstrap)或者基于模型的近似方法来估计这些区间。在R中,可以使用bootMer函数(来自lme4包)或predictInterval函数(来自merTools包)来近似计算这些区间。不过,这些函数的使用通常需要模型对象以及可能的其他参数,并且需要仔细考虑随机效应的影响。

645d5107da581a5d8f0c369e9e5e584e.png

这看起来相当熟悉,预测区间总是比置信区间大。


点击标题查阅往期内容

ad557851a7d63f290b398ad828a36c68.jpeg

R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)

outside_default.png

左右滑动查看更多

outside_default.png

01

b7d46db96635933e7dfec6532f2b46ce.png

02

39e650093d9dee94080cdfbef055c47d.png

03

f98dd0646b925dcccf68c470b0331ccf.png

04

53cdf280a64bd0e66688764b1a1e2d3f.png

predict.merMod函数的帮助页面中,lme4包的作者写道,bootMer应该是从广义线性混合模型(GLMM)推导置信区间的首选方法。那里的想法是从模型中模拟N次新数据,然后获取一些感兴趣的统计数据。在我们的案例中,我们感兴趣的是通过推导自举拟合值来获取回归线的置信区间。bb$t是一个矩阵,其中列是观测值,行是不同的自举样本。为了得到拟合线的95%置信区间,我们需要获取排序后的自举值的[0.025N,0.975N]范围的值。

即使对每个自举样本都计算了新的随机效应值(因为bootMer中默认use.u=FALSE),自举的置信区间也非常接近“正常”的置信区间。

现在让我们转向一个更复杂的例子,一个具有两个交叉随机效应的泊松广义线性混合模型(Poisson GLMM):

  1. # 第二个案例,具有两个交叉随机效应和泊松响应的更复杂设计
  2. m <- glmer(y ~ x + (1|f1) + (1|f2), data, family = "poisson")
  3. # 对于广义线性混合模型,我们需要在添加/删除标准误后反变换预测值
  4. newdat <- data.frame(x = seq(0, 10, length = 20))
  5. tvar1 <- pvar1 + VarCorr(m)$f1[1] + VarCorr(m)$f2[1] # 对于更复杂的模型,必须进行调整
  6. # 使用bootMer的第二个版本
  7. bb <- bootMer(m, FUN = predFun, nsim = 200)
  8. # 绘图
  9. plot(y ~ x, data)
  10. lines(newdat$x, newdat$y, col = "red", lty = 2, lwd = 3)

a0b1520ca062bb93404caaf07ba02d11.png

同样,在这种情况下,自助法置信区间(Bootstrapped CI)与“常规”置信区间非常接近。在这里,我们已经看到了三种不同的方法来推导表示回归线(CI)和响应点(PI)周围不确定性的区间。选择哪种方法取决于您想看到什么(我拟合的线的周围不确定性的程度,或者如果我抽样新的观测值,它们会取什么值),以及复杂模型的计算能力,因为对于具有许多观测值和复杂模型结构的广义线性混合模型(GLMM),bootMer的运行可能需要一些时间。


78f47243216fa6823c896b7a9cd12486.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《R语言广义线性混合模型(GLMM)bootstrap预测置信区间可视化》。

9e2c1c713a7059cc3e32996aa92cfe81.jpeg

84640e7802e38453ffd01121b2732681.png

点击标题查阅往期内容

R语言用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据

R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据

R语言估计多元标记的潜过程混合效应模型(lcmm)分析心理测试的认知过程

R语言因子实验设计nlme拟合非线性混合模型分析有机农业施氮水平

R语言非线性混合效应 NLME模型(固定效应&随机效应)对抗哮喘药物茶碱动力学研究

R语言用线性混合效应(多水平/层次/嵌套)模型分析声调高低与礼貌态度的关系

R语言LME4混合效应模型研究教师的受欢迎程度

R语言nlme、nlmer、lme4用(非)线性混合模型non-linear mixed model分析藻类数据实例

R语言混合线性模型、多层次模型、回归模型分析学生平均成绩GPA和可视化

R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例

R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

R语言 线性混合效应模型实战案例

R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据

R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言建立和可视化混合效应模型mixed effect model

R语言LME4混合效应模型研究教师的受欢迎程度

R语言 线性混合效应模型实战案例

R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题

基于R语言的lmer混合线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言分层线性模型案例

R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型

使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

SPSS中的多层(等级)线性模型Multilevel linear models研究整容手术数据

用SPSS估计HLM多层(层次)线性模型模型 

8af439728540d972e24073fc2dc95e3e.png

f198bc78f828d4975d84ca1ac9e9fa97.jpeg

98941e4f8ed6d0afff09966849fc6f94.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/369939
推荐阅读
相关标签
  

闽ICP备14008679号