我试图理解lmer
中R
函数背后的线性代数运算,我在lecture上发现了似乎是一个很好的资源。由lme4
包的创建者Douglas Bates提供。
该示例处理数据集 Dyestuff 并调用混合效果模型,如下所示:
fm1 <- lmer(Yield ~ 1 + (1 | Batch), Dyestuff)
以下幻灯片包括用于提取随机效果的基础矩阵的代码行,例如:
efm1 <- expand(fm1)
efm1$S
6 x 6 diagonal matrix of class "ddiMatrix"
# [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.84823 . . . . .
[2,] . 0.84823 . . . .
[3,] . . 0.84823 . . .
[4,] . . . 0.84823 . .
[5,] . . . . 0.84823 .
[6,] . . . . . 0.84823
和
efm1$T6 x 6 sparse Matrix of class "dtCMatrix"
[1,] 1 . . . . .
[2,] . 1 . . . .
[3,] . . 1 . . .
[4,] . . . 1 . .
[5,] . . . . 1 .
[6,] . . . . . 1
,或者
(fm1S <- tcrossprod(efm1$T %*% efm1$S))
6 x 6 sparse Matrix of class "dsCMatrix"
[1,] 0.71949 . . . . .
[2,] . 0.71949 . . . .
[3,] . . 0.71949 . . .
[4,] . . . 0.71949 . .
[5,] . . . . 0.71949 .
[6,] . . . . . 0.71949
然而,当我尝试在R上运行相同的行代码时,我收到以下错误消息:
efm1 <- expand(fm1)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘expand’ for signature ‘"lmerMod"’
并不奇怪,
efm1$S
Error: object 'efm1' not found
执行?expand
将此函数标识为仍然存在,并且似乎意味着生成矩阵分解,例如LU或RQ。
在网上搜索,我发现道格拉斯现在正在使用朱莉娅(下一个统计语言可以用一个不那么难以置信的名字吗?不,不是&#34; Pied Pier&#34;对不起,我离题了......)。
我做错了什么? lme4
现在是孤儿还是腐烂?幻灯片中是否有拼写错误?
答案 0 :(得分:3)
你正在看很旧的幻灯片。
getME()
函数是当前推荐的访问模型信息的方法。lme4
仍处于相当活跃的开发阶段on github。lme4
维护。符号/内部表示有所改变,但是可以按如下方式从内部信息重建方差 - 协方差矩阵(内部Lambdat
等效于旧符号中的t(T %*% S)
)。 / p>
library("lme4")
fm1 <- lmer(Yield ~ 1 + (1 | Batch), Dyestuff)
crossprod(getME(fm1,"Lambdat"))