我有一个关于从 R 中装有lmer
( lme4
) 的模型中提取随机效应的(原始)模型矩阵的问题。更具体地说,我想获得一个数据框或矩阵,其中包含随机效应项中涉及的所有变量. 问题更加复杂,因为该矩阵的某些条目为零。
我通常通过访问稀疏模型矩阵 ( Zt
) 来提取这些矩阵getME
,然后通过其维度将其转换为常规矩阵(见下文)。然而,只要(原始)模型矩阵包含零,这就会导致问题,因为Zt
只包含非零元素。
这是一个示例,一个简单的混合效应模型,其中x1
正常且x2
包含五个正好为零的值:
id <- rep(1:20,each=5)
y <- rnorm(100)
x1 <- rnorm(100)
x2 <- c(rep(0,5),rnorm(95))
df <- data.frame(id,x1,x2,y)
我使用 拟合两个模型lmer
,一个与x1
另一个x2
作为预测器:
library(lme4)
m1 <- lmer(y~1+x1+(1+x1|id), data=df)
m2 <- lmer(y~1+x2+(1+x2|id), data=df)
在这里,我访问Zt
了拟合模型对象的插槽。下面的代码演示了Zt
不包含x2
. 结果,我非常简单地转换为常规矩阵会引发错误。
# length okay
length(getME(m1,"Zt")@x)
# model matrix okay
mm1 <- matrix(getME(m1,"Zt")@x, ncol=2, byrow=T)
# too short
length(getME(m2,"Zt")@x)
# gives error on model matrix
mm2 <- matrix(getME(m2,"Zt")@x, ncol=2, byrow=T)
这是我认为我可以做的。lmer
似乎也保存了原始矩阵,只要只有一个簇变量,它似乎就可以很好地工作。
# seems to work okay
mm3 <- getME(m2,"mmList")[[1]]
但是,该mmList
插槽在网上的记录很差,我几乎没有提到人们将它用于编程。到目前为止,访问Zt
似乎是更常见的选择。
是否可以从Zt
即使原始模型矩阵包含零如果没有,那么我应该期待mmList
什么?