如何从 lme4 获取随机效应(BLUPs/conditional 模式)的协方差矩阵
How to get covariance matrix for random effects (BLUPs/conditional modes) from lme4
所以,我在 R 中拟合了一个带有两个随机截距的线性混合模型:
Y = X beta + Z b + e_i,
哪里b ~ MVN (0, Sigma)
; X
和Z
分别是固定效应和随机效应模型矩阵,beta
和b
是固定效应参数和随机效应参数BLUPs/conditional模式。
我想了解 b
的底层协方差矩阵,这在 lme4
包中似乎不是一件小事。您只能通过 VarCorr
获得方差,而不是实际的相关矩阵。
根据one of the package vignettes(第2页),可以计算出beta的协方差:e_i * lambda * t(lambda)
。您可以从 lme4
的输出中提取所有这些组件。
我想知道这是不是要走的路?或者您还有其他建议吗?
来自?ranef
:
If ‘condVar’ is ‘TRUE’ each of the data frames has an attribute
called ‘"postVar"’ which is a three-dimensional array with symmetric
faces; each face contains the variance-covariance matrix for a
particular level of the grouping factor. (The name of this attribute
is a historical artifact, and may be changed to ‘condVar’ at some
point in the future.)
设置示例:
library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
rr <- ranef(fm1,condVar=TRUE)
获取截距b
值之间的方差-协方差矩阵
pv <- attr(rr[[1]],"postVar")
str(pv)
##num [1:2, 1:2, 1:18] 145.71 -21.44 -21.44 5.31 145.71 ...
所以这是一个2x2x18的数组;每个切片是特定主题的条件截距和斜率之间的方差-协方差矩阵(根据定义,每个主题的截距和斜率独立于所有其他主题的截距和斜率)。
将其转换为方差-协方差矩阵(参见getMethod("image",sig="dgTMatrix")
...)
library(Matrix)
vc <- bdiag( ## make a block-diagonal matrix
lapply(
## split 3d array into a list of sub-matrices
split(pv,slice.index(pv,3)),
## ... put them back into 2x2 matrices
matrix,2))
image(vc,sub="",xlab="",ylab="",useRaster=TRUE)
所以,我在 R 中拟合了一个带有两个随机截距的线性混合模型:
Y = X beta + Z b + e_i,
哪里b ~ MVN (0, Sigma)
; X
和Z
分别是固定效应和随机效应模型矩阵,beta
和b
是固定效应参数和随机效应参数BLUPs/conditional模式。
我想了解 b
的底层协方差矩阵,这在 lme4
包中似乎不是一件小事。您只能通过 VarCorr
获得方差,而不是实际的相关矩阵。
根据one of the package vignettes(第2页),可以计算出beta的协方差:e_i * lambda * t(lambda)
。您可以从 lme4
的输出中提取所有这些组件。
我想知道这是不是要走的路?或者您还有其他建议吗?
来自?ranef
:
If ‘condVar’ is ‘TRUE’ each of the data frames has an attribute called ‘"postVar"’ which is a three-dimensional array with symmetric faces; each face contains the variance-covariance matrix for a particular level of the grouping factor. (The name of this attribute is a historical artifact, and may be changed to ‘condVar’ at some point in the future.)
设置示例:
library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
rr <- ranef(fm1,condVar=TRUE)
获取截距b
值之间的方差-协方差矩阵
pv <- attr(rr[[1]],"postVar")
str(pv)
##num [1:2, 1:2, 1:18] 145.71 -21.44 -21.44 5.31 145.71 ...
所以这是一个2x2x18的数组;每个切片是特定主题的条件截距和斜率之间的方差-协方差矩阵(根据定义,每个主题的截距和斜率独立于所有其他主题的截距和斜率)。
将其转换为方差-协方差矩阵(参见getMethod("image",sig="dgTMatrix")
...)
library(Matrix)
vc <- bdiag( ## make a block-diagonal matrix
lapply(
## split 3d array into a list of sub-matrices
split(pv,slice.index(pv,3)),
## ... put them back into 2x2 matrices
matrix,2))
image(vc,sub="",xlab="",ylab="",useRaster=TRUE)