GAM 中的随机变量嵌套如何工作(mgcv)?

机器算法验证 r lme4-nlme 咕噜咕噜 广义加法模型 毫克CV
2022-03-21 11:27:16

考虑到我对 GAM 的世界非常陌生,我实际上是出于必要而不是选择使用它,但我认为无论如何这可能是一个学习新东西的机会。

最初我希望用 GLMM 对我的数据进行建模,这对我来说在分配嵌套随机变量的方式上感觉很自然。在我的研究中,使用lme4我会写(1|SURVEYGR/YEAR/PlotID). 这意味着PlotID嵌套在YEAR其中嵌套在 中SURVEYGR但是当涉及到mgcv包时,我还没有设法找到等效表达式的明确解释。例如,我已经看到可以使用bs=re(re=random effect) 参数,s(YEAR, bs="re")而在其他情况下,例如这个博客,我已经看到了许多随机变量,s(SURVEYGR,YEAR,PlotID, bs="re") 但是有很多事情发生并且很难取笑找出这段代码的含义。问题是,我不确定嵌套的随机变量应该如何构造

所以最终我想知道mgcvGAM 模型的等效代码对于以下编写的 GLMM 模型是什么lme4

glmer.nb(count ~ vegetation.cover + temperature + 
                (1|SURVEYGR/YEAR/PlotID)
    , na.action = "na.fail"
    , data = dd, verbose=T)

猜测可能是这样的

gam(count ~ s(vegetation.cover) + s(temperature) + 
            s(SURV.GR,YEAR,PlotID, bs="re") 
           , family = nb()
           , data=dd, method="REML")

编辑

有点窥探在SO上出现了这篇文章,其中将评论翻译成我的问题建议单独包括术语,然后嵌套随机效应术语的交互,如下所示:

+ s(SURV.GR, bs="re") + s(SURV.GR,YEAR, bs="re") + s(SURV.GR,YEAR,PlotID, bs="re")

有什么想法吗?

1个回答

有几种方法可以用 来指定mgcv,每种方法都会产生不同的方法来估计平滑参数和方差分量。对于预测的随机截距:这些在不同规格之间不会相同,但我预计不会有实质性差异。如果您对方差分量的解释感兴趣,规格之间的差异可能非常重要。

使用s(SURV.GR, bs="re") + s(SURV.GR, YEAR, bs="re") + s(SURV.GR, YEAR, PlotID, bs="re"),将估计三个单独的平滑参数和方差分量,每个指定的平滑项一个。

但也许您希望允许平滑量在不同级别之间变化YEAR或者,您可能对 的SURV.GR每个不同级别所解释的方差差异感兴趣YEAR

然后你可以替换s(SURV.GR, YEAR, bs="re")s(SURV.GR, by=YEAR, bs="re"); 这将产生一个单独的平滑参数和方差分量,为随机截距 wrt 估计SURV.GR,对于YEAR.

我建议在拟合您的模型后,检查gamfit$spvarcomp.gam(gamfit)查看平滑参数和方差分量是否按照您的预期进行估计。此外,您可能想与VarCorr(glmerfit). (其中gamfit指的是返回的对象gam()glmerfit指的是返回的对象glmer()