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

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

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

В частности, я спрашиваю: если я задаю 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).


person theforestecologist    schedule 10.10.2016    source источник


Ответы (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

Проверяя остальную часть объекта, вызов отличается (что имеет смысл, я назвал фрейм данных как-то по-другому), и фрейм отличается (из-за разницы в числовом и факторном значениях в 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 >"

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

person alexforrence    schedule 10.10.2016
comment
Спасибо за ответ! Это немного поверхностный ответ (отвечая на вопрос, выделенный жирным шрифтом, функция автоматически рассматривает его как фактор? Вместо почему вызов функции в RE-части формулы не работает). Это не то, что я понимаю достаточно хорошо, чтобы комментировать, не могли бы вы добавить ответ об этом? - person alexforrence; 10.10.2016
comment
@alexforrence спасибо, Алекс, это полезно. Где/как именно вы определили свой последний абзац (факторы группировки... и т. д.)? - person theforestecologist; 10.10.2016
comment
@theforestecologist обычно из источника на github.com/lme4/lme4/blob /master/R/utilities.R, есть ли какой-то конкретный бит, который не имеет смысла? - person alexforrence; 10.10.2016
comment
@alexforrence Нет, я просто не знал, как это сделать самостоятельно :p. - person theforestecologist; 10.10.2016