3

我有一个关于从 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什么?

4

1 回答 1

2

如果mmList存在,那么它就不会消失(尽管它可能记录得很差——请随意建议文档改进......)。怎么样

do.call(cbind,getME(m2,"mmList"))

(这似乎可以正确概括多项模型)?

我同意Zt无法正确区分结构零和非结构零有点痛苦——如果它足够重要,可能会更改底层代码以使其工作,但我认为这很难足够我们需要一个非常引人注目的用例......

于 2015-06-18T22:54:29.393 回答