随机效应变量是否自动作为 R 中 lmer(或 lme)的因素?

Are random effect variables automatically taken as factors in lmer (or lme) in R?

我知道在混合效应模型中将连续变量或数值变量作为随机效应没有多大意义(例如,参见 here)。

但我想知道 R 中的 lme4::lmernlme::lme 是否有意阻止您这样做...

具体来说,我要问的是:如果我提供 lmer(或 lme)任何非因子(非分类)变量作为随机效应,该函数会自动将其视为一个因素吗?

直接将 factor() 插入 lmer(这是使用 lm 时的常用方法)会产生以下错误:

lmer(y ~ z + (1|factor(x)), data = dat)
Error: couldn't evaluate grouping factor factor(x) within model frame: try adding grouping factor to data frame explicitly if possible

虽然上面的错误提到直接向数据添加分组因子,但它没有指定所述分组因子 需要 是否是一个因子(或者可能是隐含的词选择)?

我知道直接从我的数据中创建一个新的因子 class 变量相当简单,但我很好奇在使用 lmer(或 lme).

好像没关系

library(lme4)

sl <- sleepstudy
sl$Subject <- as.numeric(levels(sl$Subject))[sl$Subject]

## subject as factor
m1 <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy)

## subject as numeric
m2 <- update(m1, data = sl)

all.equal(VarCorr(m1), VarCorr(m2))
# TRUE

检查对象的其余部分,调用不同(这是有道理的,我将数据框称为不同的东西),并且框架不同(由于主题中的数字与因子差异)。其他一切都是一样的。

all.equal(m1, m2)
#[1] "Attributes: < Component “call”: target, current do not match when deparsed >"     
#[2] "Attributes: < Component “frame”: Component “Subject”: 'current' is not a factor >"

分组因素在 mkBlist(), which is called within mkReTrms() 内受到 factorize() 的影响,这为随机效应创建了模型矩阵。 factorize() 是一个助手,它最终在随机效应公式的右侧项上调用 factor(x)(条件是它是否已经是一个因素等)