Будут ли переменные случайного эффекта автоматически приниматься как факторы в lmer (или lme) в R?

Я понимаю, что иметь непрерывную или числовую переменную в качестве случайного эффекта в модели смешанных эффектов не имеет особого смысла (например, см. Здесь).

Но что мне интересно, если lme4::lmer или же nlme::lme в R целенаправленно мешают вам сделать это...

В частности, я спрашиваю: если я поставлю lmer (или же lme) любая нефакторная (не категориальная) переменная как случайный эффект, автоматически ли функция рассматривает ее как фактор?

Вставка factor() непосредственно в лмер (как это обычно делается при использовании 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).

1 ответ

Решение

Это не имеет значения.

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 >"

Факторы группирования подвержены factorize() в mkBlist(), который называется внутри mkReTrms(), которая создает матрицу модели для случайных эффектов. factorize() это помощник, который в конечном итоге вызывает factor(x) в правой части выражения в формуле случайных эффектов (при условии, что это уже фактор и т. д.)

Другие вопросы по тегам