如何从 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)XZ分别是固定效应和随机效应模型矩阵,betab是固定效应参数和随机效应参数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)