1

用 lme4 包提取随机效应和随机效应的方差-协方差矩阵如下:

library(lme4)
fm1 <- lmer(Reaction ~ Days + (1|Subject), sleepstudy)
fm1.rr <- ranef(fm1,condVar=TRUE)
fm1.pv <- attr(rr[[1]],"postVar")

我想知道如何使用 mgcv 做到这一点?'gam.vcomp' 函数确实提取了估计的方差分量,但不是针对每个级别的随机效应。

library(mgcv)
fm2 <- gam(Reaction ~ Days + s (Subject, bs="re"), data = sleepstudy, method = "REML")
gam.vcomp(fm2)
4

2 回答 2

2
library(lme4)
data(sleepstudy)

fm1 <- lmer(Reaction ~ Days + (1|Subject), sleepstudy)
fm1.rr <- ranef(fm1,condVar=TRUE)$Subject[,1]
fm1.pv <- sqrt(attr(ranef(fm1,condVar=TRUE) [['Subject']],"postVar")[1,1,])

library(mgcv)
fm2 <- gam(Reaction ~ Days + s (Subject, bs="re"), 
data = sleepstudy,   method = "REML")

为每个提取随机效应Subject

idx <-grep("Subject", names(coef(fm2)))
fm2.rr<-coef(fm2)[idx]
attributes(fm2.rr)<-NULL

我们可以看到两个模型中的随机效应与预期的相同。

为了提取随机效应的方差-协方差矩阵并计算误差,我们使用参数Vp是贝叶斯后验协方差矩阵:

fm2.pv <-sqrt(diag(fm2$Vp))[idx]

或常客估计协方差矩阵Ve

fm2.pv <-sqrt(diag(fm2$Ve))[idx]

我们可以看到,mgcv用模型估计的随机效应误差略有不同lme4。基于贝叶斯后验协方差矩阵的误差较大,而基于频率矩阵的误差较小。

于 2018-01-11T14:57:44.897 回答
1

您也可以使用 package gamm4,它基于gammpackage 但lme4在下面使用。该模型将被拟合为:

fm3 <- gamm4(Reaction ~ Days, random = ~ (1|Subject), data = sleepstudy)

可以按照正常lme4程序获得随机效应和随机效应的方差-协方差矩阵。

fm3.rr <- ranef(fm3$mer,condVar=TRUE)
fm3.pv <- attr(fm3.rr[[1]],"postVar")[1,1,]

但是gamm4可能比gam阅读帮助文件要慢得多,以查看何时最适合您的需要。

于 2018-06-05T22:46:45.513 回答