如何在R中为GAMM模型添加随机截距和随机斜率项

6

我正试图在一个固定效应的GAMM模型中指定随机截距和随机斜率项。

我已经成功地使用mgcv库中的以下代码拟合了具有随机截距的模型,但现在无法确定gamm()函数内随机斜率的语法是什么:

M1  = gamm(dur ~ s(dep, bs="ts", k = 4), random= list(fInd = ~1), data= df)

如果我在线性混合效应模型中同时使用了随机截距和斜率,我会按照以下方式书写:

M2 = lme(dur ~ dep, random=~1 + dep|fInd, data=df)
< p > gamm() 的支持文档指出,随机项需要以 lme() 中的 list 形式给出,但我找不到任何包含斜率和截距项的可解释示例。如有建议/解决方案,将不胜感激。


你是指随机斜率还是随机截距?如果是随机斜率,我相信你需要指定随机斜率应用于哪些变量。 - MrFlick
我想在因子变量fInd中同时使用随机斜率和随机截距(如lme()示例所示),但我无法弄清语法。 - jjulip
2个回答

6
gamm4包中的gamm4函数可以实现此功能。您可以按照与lmer风格相同的方式指定随机截距和斜率。在您的情况下:
M1 = gamm4(dur~s(dep,bs="ts",k=4), random = ~(1+dep|fInd), data=df)

以下是gamm4的说明文档:https://cran.r-project.org/web/packages/gamm4/gamm4.pdf


3
这里是使用 sleepstudy 数据集,输入相关随机截距和斜率效应的 gamm() 语法。
library(nlme)
library(mgcv)
data(sleepstudy,package='lme4')

# Model via lme()
fm1 <- lme(Reaction ~ Days, random= ~1+Days|Subject, data=sleepstudy, method='REML')
# Model via gamm()
fm1.gamm <- gamm(Reaction ~ Days, random= list(Subject=~1+Days), data=sleepstudy, method='REML')

VarCorr(fm1)
VarCorr(fm1.gamm$lme)
# Both are identical
# Subject = pdLogChol(1 + Days) 
#             Variance StdDev    Corr  
# (Intercept) 612.0795 24.740241 (Intr)
# Days         35.0713  5.922103 0.066 
# Residual    654.9424 25.591843  

输入无相关随机截距和斜率效应的语法在lme()gamm()中相同。

# Model via lme()
fm2 <- lme(Reaction ~ Days, random= list(Subject=~1, Subject=~0+Days), data=sleepstudy, method='REML')
# Model via gamm()
fm2.gamm <- gamm(Reaction ~ Days, random= list(Subject=~1, Subject=~0+Days), data=sleepstudy, method='REML')

VarCorr(fm2)
VarCorr(fm2.gamm$lme)
# Both are identical
#             Variance            StdDev   
# Subject =   pdLogChol(1)                 
# (Intercept) 627.5690            25.051328
# Subject =   pdLogChol(0 + Days)          
# Days         35.8582             5.988172
# Residual    653.5838            25.565285

这个答案还展示了如何在lme()中输入多个随机效应。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接