首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有mgcv软件包的GAM随机效应的方差-协方差矩阵

具有mgcv软件包的GAM随机效应的方差-协方差矩阵
EN

Stack Overflow用户
提问于 2018-01-10 00:08:26
回答 2查看 803关注 0票数 1

使用lme4软件包提取随机效果和随机效果的方差-协方差矩阵如下:

代码语言:javascript
复制
library(lme4)
fm1 <- lmer(Reaction ~ Days + (1|Subject), sleepstudy)
fm1.rr <- ranef(fm1,condVar=TRUE)
fm1.pv <- attr(rr[[1]],"postVar")

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

代码语言:javascript
复制
library(mgcv)
fm2 <- gam(Reaction ~ Days + s (Subject, bs="re"), data = sleepstudy, method = "REML")
gam.vcomp(fm2)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-11 22:57:45

代码语言:javascript
复制
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提取随机效果

代码语言:javascript
复制
idx <-grep("Subject", names(coef(fm2)))
fm2.rr<-coef(fm2)[idx]
attributes(fm2.rr)<-NULL

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

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

代码语言:javascript
复制
fm2.pv <-sqrt(diag(fm2$Vp))[idx]

或频率估计协方差矩阵Ve

代码语言:javascript
复制
fm2.pv <-sqrt(diag(fm2$Ve))[idx]

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

票数 1
EN

Stack Overflow用户

发布于 2018-06-06 06:46:46

您还可以使用gamm4包,它基于gamm包,但在下面使用lme4。该模型将拟合为:

代码语言:javascript
复制
fm3 <- gamm4(Reaction ~ Days, random = ~ (1|Subject), data = sleepstudy)

随机效应和随机效应的方差-协方差矩阵可以通过正常的lme4过程得到。

代码语言:javascript
复制
fm3.rr <- ranef(fm3$mer,condVar=TRUE)
fm3.pv <- attr(fm3.rr[[1]],"postVar")[1,1,]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48172274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档