如何从 lmerMod 对象中提取原始公式(固定效应和随机效应)?

How to extract the original formula (fixed-effects and random-effects) from an lmerMod object?

假设我们假设了以下线性混合模型(LMM),我们通常称之为fit

library(lme4)

fit <- lmer(Reaction ~ Days + (1 | Subject), data = sleepstudy)

假设我们也有兴趣从 fit 中提取原始公式(即固定效应和随机效应部分),我们想将其传递给称为 [=14 的第二个 LMM =].显然,将 terms(fit) 传递给 lmer()formula 参数是行不通的。

> fit2 <- lmer(terms(fit), data = sleepstudy)
Error: No random effects terms specified in formula

问题

有没有办法从 fit 中提取固定效应和随机效应部分,然后将其传递给 lmer()

lme4这样的包实现formula方法是标准的,其唯一目的是从模型对象中提取公式(e),这样你就不必考虑太多对象内部。

lme4中,class"merMod"有一个formula方法,即lme4:::formula.merMod。 class "lmerMod" 没有方法,但由于 "lmerMod""merMod" 的直接子 class — 您可以使用 showClass("lmerMod") 检查 —每当您执行 formula(<lmerMod>).

时,都会调用 "merMod" 的方法

因此:

formula(fit)
## Reaction ~ Days + (1 | Subject)
formula(fit, fixed.only = TRUE)
## Reaction ~ Days
formula(fit, random.only = TRUE)
## Reaction ~ (1 | Subject)
## <environment: 0x11b3944e0>

(最后调用 returns 一个公式,其环境不是它应该的。我在 GitHub 上创建了一个 issue。)

lme4 实现了 class "merMod" 的多种提取方法。例如,还有一个 model.matrix 方法可以用来提取固定和随机效应模型矩阵。大多数这些方法都记录在 ?lme4::`merMod-class` 中,因此您可以在将来使用它作为参考。

有关可用方法的完整列表,请查看

methods(class = "merMod")
methods(class = "lmerMod")

加载后 lme4.