如何从lme4获得随机效应的协方差矩阵(BLUP /条件模式)

时间:2016-06-13 11:59:16

标签: r matrix covariance lme4

所以,我在R:

中拟合了一个带有两个随机截距的线性混合模型
string app = @"path\to\your\target\app";
string prms = "your parameters";

System.Diagnostics.Process.Start(app, prms);

其中Y = X beta + Z b + e_i, ; b ~ MVN (0, Sigma)X分别是固定和随机效应模型矩阵,Zbeta是固定效应参数和随机效果BLUP /条件模式。

我想了解b的基础协方差矩阵,这在b包中似乎不是一件小事。您只能通过lme4获得差异,而不能获得实际的相关矩阵。

根据one of the package vignettes(第2页),您可以计算beta:VarCorr的协方差。您可以从e_i * lambda * t(lambda)的输出中提取所有这些组件。

我想知道这是不是要走了?或者您还有其他建议吗?

1 个答案:

答案 0 :(得分:4)

来自?ranef

  

如果'condVar'为'TRUE',则每个数据帧都有一个属性   称为'" postVar"',这是一个对称的三维数组   面对;每个面包含a的方差 - 协方差矩阵   特定级别的分组因子。 (此属性的名称   是一个历史文物,可能会更改为'condVar'   指出未来。)

设置示例:

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)

enter image description here