R: Странные ошибки при использовании lmList от lme4

Я читаю эту книгу о данных. анализ и графика в R, и я думаю, что есть некоторые проблемы между текущей версией lme4 и той, которую они использовали (у меня есть версии 2007 и 2010). Моя текущая проблема касается страницы 340 книги, где авторы показывают, как извлечь наклоны для каждого человека, используя lmList. Код выглядит следующим образом:

library(lme4) data(Orthodont, package = "nlme") ab <- coef(lmList(distance ~ age|Subject, data=Orthodont))

Это должно быть довольно просто, и в книге так кажется. Однако я получаю следующее:

Error in eval(expr, envir, enclos) : object 'Subject' not found In addition: Warning message: In Ops.ordered(age, Subject) : '|' is not meaningful for ordered factors

Это сбивает с толку на трех уровнях:

  1. Почему предмет не найден, несмотря на то, что он находится в ортодонтии?
  2. Как R узнает, что ненайденная переменная является упорядоченным фактором?
  3. Почему эта регрессия в любом случае не работает для упорядоченных факторов? Какая разница?

Я попробовал обходной путь и проверил через str(Orthodont), действительно ли первая команда создала новую переменную sub2, имеющую режим и характер класса:

Orthodont$sub2<-as.character(Orthodont$Subject)
ab <- with(Orthodont,coef(lmList(distance ~ age|sub2, data=Orthodont)))

Я получил идентичное сообщение об ошибке: sub2 не найден и предупреждение о том, что sub2 является упорядоченным фактором.

Есть идеи?


person SJDS    schedule 27.04.2014    source источник
comment
@BBolker, проблема исчезает при использовании вместо этого nlme::lmList...   -  person SJDS    schedule 27.04.2014
comment
Я ценю ссылку за воспроизводимость, и она помогла мне понять немного больше, но, похоже, это ссылка на пиратскую копию книги. Не могли бы вы отредактировать ссылку из уважения к авторам?   -  person Ben Bolker    schedule 27.04.2014


Ответы (1)


Эта проблема задокументирована, правда, не так четко, как должна быть: от ?lmList:

«данные» должны быть фреймом данных (а не, например, объектом «groupedData» из пакета «nlme»); сначала используйте as.data.frame для преобразования данных.

Причина, по которой у вас возникли проблемы, а у авторов нет, заключается в том, что они извлекли данные Orthodont из пакета MEMSS (где они хранятся как обычный фрейм данных, а не объект groupedData), а не из nlme.

По причинам, которые я сейчас не помню, автоматическое преобразование из groupedData в data.frame (что было бы разумно) сложнее, чем кажется, из-за того, как спроектирован код.

Это также обсуждается на странице https://stat.ethz.ch/pipermail/r-sig-mixed-models/2013q4/021283.html и https://github.com/lme4/lme4/issues/26

person Ben Bolker    schedule 27.04.2014