我理解在混合效果模型中使用连续或数字变量作为随机效果没有多大意义(例如,请参阅here )。
但我想知道的是,如果R中的lme4::lmer
或nlme::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
虽然上述错误提到直接向数据添加分组因子,但它没有指定所述分组因子是否需要是一个因素(或者是否可能隐含在单词选择中)?
我理解直接从我的数据中创建一个新的因子类变量是相当简单的,但我只是好奇在使用lmer
(或lme
)时是否真的有必要。
答案 0 :(得分:2)
看起来并不重要。
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
检查对象的其余部分,调用是不同的(这是有道理的,我称数据框有所不同),并且框架不同(由于Subject中的数字与因子的差异)。其他一切都是一样的。
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()
内受factorize()
影响,mkReTrms()
在{{3}}内调用,为随机效果创建模型矩阵。 factorize()
是一个帮助者,最终在随机效果公式的右侧条款中调用factor(x)
(取决于它是否已经是一个因素等)