从 lme4 中提取 (i) 随机效应的估计方差-协方差矩阵和/或 (ii) 混合模型方程解作为矩阵?

Pau*_*idt 1 r sas lme4 mixed-models nlme

正如标题所示,我正在尝试从 lme4 (或其他包?)对象中提取矩阵。为了明确我想要什么,我认为最简单的方法是参考 SAS 文档:https://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_mixed_sect022.htm

随机效应的方差-协方差矩阵

在 SAS 表示法中,该矩阵称为G ,是随机效应参数gamma的方差-协方差矩阵。通过使用 PROC MIXED 和输出传输系统中的选项“G”,您可以获得G作为矩阵。

我知道一旦我有了伽玛的方差分量和维度,手动构建这个矩阵就相对简单。尽管如此,我还是希望有一种更简单的方法。

混合模型方程解

在 SAS 表示法中,这些称为C。通过使用 PROC MIXED 和输出传送系统中的选项“MMEQSOL”,您可以请求生成混合模型方程的解以及逆系数矩阵。我感兴趣的是后者。

提前致谢!

Ben*_*ker 5

这不是一个非常合理的模型(参见 参考资料?lme4::cake),但对于说明来说是合理的:

library(lme4)
fm1 <- lmer(angle ~ temperature + 
           (1|recipe)+(1|replicate), cake)
Run Code Online (Sandbox Code Playgroud)

VarCorr()方法给出了每一项的方差-协方差矩阵列表(在本例中每个矩阵都是 1x1),并具有自己的打印方法:

v <- VarCorr(fm1)
Run Code Online (Sandbox Code Playgroud)

您可以使用bdiag()(块对角线)函数将它们组合成一个矩阵Matrixas.matrix()从稀疏矩阵转换为标准(稠密)R 矩阵对象)。

as.matrix(Matrix::bdiag(v))
##          [,1]      [,2]
## [1,] 39.21541 0.0000000
## [2,]  0.00000 0.4949681
Run Code Online (Sandbox Code Playgroud)

不幸的是,C 矩阵并不那么容易获得。正如 中所讨论的vignette("lmer",package="lme4")lme4不使用 Henderson 方程公式。C 的上部块(固定效应的方差-协方差矩阵)可通过 访问vcov(),但方差的方差-协方差矩阵并不那么容易:参见例如此处