传统上,线性混合效应模型的公式如下。Ri = Xi × β + Zi × bi + εi,其中β代表估计的固定效应,Z代表随机效应。因此,X是经典设计矩阵。使用R语言,我想在使用nlme包的lme拟合模型后能够提取这两个矩阵。例如,数据集“Rails”(也可以在nlme包中找到)包含对6条随机选定的铁路轨道进行三次超声波旅行时间测量的结果。我可以使用以下代码拟合一个简单模型,其中包括截距固定效应和每条轨道的随机效应。
我希望做的是提取随机效应设计矩阵Z。我意识到,如果我使用lme4包拟合相同的模型,可以通过以下方式完成:
然而,我不知道如何从已安装的lme模型中提取此矩阵。
library(nlme)
lmemodel<-lme(travel ~ 1, random = ~ 1 | Rail, data=Rail)
X设计矩阵只是一个由18个1组成的矩阵(6个轨道 * 3个测量值),可以通过以下方式轻松提取:
model.matrix(lmemodel, data=Rail)
(Intercept)
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 1
13 1
14 1
15 1
16 1
17 1
18 1
attr(,"assign")
[1] 0
我希望做的是提取随机效应设计矩阵Z。我意识到,如果我使用lme4包拟合相同的模型,可以通过以下方式完成:
library(lme4)
lmermodel<-lmer(travel ~ 1 + (1|Rail),data=Rail)
t(lmermodel@Zt) ##takes the transpose of lmermodel@Zt
lmermodel@X ## extracts the X matrix
然而,我不知道如何从已安装的lme模型中提取此矩阵。
getME(lmermodel,"Z")
或getME(lmermodel,"X")
而不是直接访问对象中的插槽,以防将来内部表示发生更改。 - Ben Bolker