lme4 :: lmer сообщает, что матрица с фиксированным эффектом имеет дефицит ранга, мне нужно исправить и как это сделать?

Я пытаюсь запустить модель смешанных эффектов, которая предсказывает F2_difference с остальными столбцами в качестве предикторов, но я получаю сообщение об ошибке, которое говорит

матрица фиксированного эффекта имеет недостаток ранга, поэтому уменьшается 7 столбцов/коэффициентов.

Из этой ссылки, Фиксированные эффекты модель ранга дефицитная, я думаю, что я должен использовать findLinearCombos в R пакет caret. Однако, когда я пытаюсь findLinearCombos(data.df), он дает мне сообщение об ошибке

Ошибка в qr.default(object): NA/NaN/Inf в вызове внешней функции (arg 1) Кроме того: Предупреждающее сообщение: В qr.default(object): NAs, введенные принуждением

У моих данных нет никаких НС. Что может быть причиной этого? (Извините, если ответ очевиден - я новичок в R).

Все мои данные являются факторами, кроме численного значения, которое я пытаюсь предсказать. Вот небольшой пример моих данных.

sex <- c("f", "m", "f", "m")
nasal <- c("TRUE", "TRUE", "FALSE", "FALSE")
vowelLabel <- c("a", "e", "i", "o")
speaker <- c("Jim", "John", "Ben", "Sally")
word_1 <- c("going", "back", "bag", "back")
type <- c("coronal", "coronal", "labial", "velar")
F2_difference <- c(345.6, -765.8, 800, 900.5)
data.df <- data.frame(sex, nasal, vowelLabel, speaker,
                      word_1, type, F2_difference
                      stringsAsFactors = TRUE)

Изменение: Вот еще несколько кода, если это поможет.

formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
           type * vowelLabel + nasal * type +
           (1|speaker) + (1|word_1)

lmer(formula, REML = FALSE, data = data.df)

Редактирование редактора:

OP не предоставил достаточного количества тестовых данных, чтобы обеспечить реальный запуск модели в lmer для считывателя. Но это не слишком большая проблема. Это по-прежнему очень хороший пост!

Ответы

Ответ 1

Вы слегка обеспокоены предупреждением:

матрица фиксированного эффекта имеет недостаток ранга, поэтому уменьшается 7 столбцов/коэффициентов.

Это предупреждение не ошибка. Существует не злоупотребление lmer или плохой спецификацией формулы модели, поэтому вы получите оценочную модель. Но чтобы ответить на ваш вопрос, я попытаюсь объяснить это.


Во время выполнения lmer ваша модельная формула разбивается на формулу с фиксированным эффектом и формулу случайного эффекта, и для каждой модели построена модель. Конструкция для фиксированного - через модель модели матрицы model.matrix конструкция для случайного сложна, но не связана с вашим вопросом, поэтому я просто пропущу ее.

Для вашей модели вы можете проверить, как выглядит матрица модели с фиксированным эффектом:

fix.formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
               type * vowelLabel + nasal * type

X <- model.matrix (fix.formula, data.df)

Все ваши переменные являются факторами, поэтому X будет двоичным. Хотя model.matrix применяет contrasts для каждого фактора и их взаимодействия, все же возможно, что X не заканчивается полным столбцом, так как столбец может быть линейной комбинацией некоторых других (которые могут быть точными или численно закрываться). В вашем случае некоторые уровни одного фактора могут быть вложены в некоторые уровни другого.

Недостаток ранга может возникнуть по-разному. В другом ответе есть ответ CrossValidated, предлагающий существенные обсуждения, на которых я сделаю некоторые комментарии.

  • Для случая 1 люди могут действительно сделать модель выбора объектов, скажем, LASSO.
  • Случаи 2 и 3 связаны с процессом сбора данных. Хороший дизайн эксперимента - лучший способ предотвратить ранг-дефицит, но для многих людей, которые строят модели, данные уже есть, и никаких улучшений (например, получения большего количества данных) невозможно. Тем не менее, я хотел бы подчеркнуть, что даже для набора данных без дефицита ранга мы все еще можем получить эту проблему, если мы не будем ее использовать осторожно. Например, кросс-валидация является хорошим методом сравнения моделей. Для этого нам нужно разбить полный набор данных на учебный и тестовый, но без осторожности мы можем получить модель с недостаточным рейтингом из набора учебных материалов.
  • Дело 4 - большая проблема, которая может быть полностью вне нашего контроля. Возможно, естественным выбором является снижение сложности модели, но альтернативой является попытка оштрафованной регрессии.
  • Случай 5 представляет собой числовую проблему, приводящую к численному дефициту ранга, и это хороший пример.
  • Случаи 6 и 7 говорят о том, что численные вычисления выполняются с конечной точностью. Обычно это не будет проблемой, если дело 5 рассматривается должным образом.

Поэтому иногда мы можем обойти недостаток, но достичь этого не всегда удается. Таким образом, любая хорошо написанная glm модели, например lm, glm, mgcv::gam, применит QR-декомпозицию для X чтобы использовать только ее mgcv::gam полного ранга, т. mgcv::gam Максимальное подмножество X столбцов, которое дает пространство полного ранга, для оценки, коэффициенты фиксации, связанные с остальными столбцами в 0 или NA. Предупреждение, которое вы получили, просто подразумевает это. Для ncol(X) имеются первоначально ncol(X), но из-за недостатка будут оцениваться только ncol(X) - 7, а остальные - 0 или NA. Такое численное обходное решение гарантирует, что решение наименьших квадратов может быть получено самым стабильным образом.


Чтобы лучше переварить эту проблему, вы можете использовать lm для соответствия линейной модели с fix.formula.

fix.fit <- lm(fix.formula, data.df, method = "qr", singular.ok = TRUE)

method = "qr" и singular.ok = TRUE по умолчанию, поэтому на самом деле нам не нужно его устанавливать. Но если мы укажем singular.ok = FALSE, lm остановится и пожаловаться на ранг-дефицит.

lm(fix.formula, data.df, method = "qr", singular.ok = FALSE)
#Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
#  singular fit encountered

Затем вы можете проверить возвращаемые значения в fix.fit.

p <- length(coef)
coef <- fix.fit$coef
no.NA <- sum(is.na(coef))
rank <- fix.fit$rank

Гарантируется, что p = ncol(X), но вы должны видеть no.NA = 7 и rank + no.NA = p.

Точно так же происходит внутри lmer. lm не сообщит о недостатке, а lmer. Это на самом деле информативное, поскольку слишком часто я вижу, как люди спрашивают, почему lm возвращает NA для некоторых коэффициентов.


Обновление 1 (2016-05-07):

Позвольте мне посмотреть, есть ли у меня это право: короткая версия заключается в том, что одна из моих предикторных переменных коррелирует с другой, но я не должен беспокоиться об этом. Уместно использовать факторы, правильно? И я все еще могу сравнить модели с anova или взглядом на BIC?

Не беспокойтесь об использовании summary или anova. Методы написаны так, чтобы правильное количество параметров (степень свободы) использовалось для создания достоверной сводной статистики.

Обновление 2 (2016-11-06):

Позвольте также услышать, какой автор пакетов lme4 сказал бы: предупреждение о недостатке ранга смешанной модели lmer. Бен Болкер упомянул caret::findLinearCombos, особенно потому, что OP там хочет решить проблему дефицита самостоятельно.

Обновление 3 (2018-07-27):

Недостаток ранга не является проблемой для правильной оценки и сравнения модели, но может быть опасностью в прогнозировании. Недавно я составил подробный ответ с симулированными примерами на CrossValidated: R lm Может ли кто-нибудь дать мне пример вводящего в заблуждение случая "предсказания из ранга-дефицита"? Итак, да, в теории нам следует избегать оценки ранга. Но на самом деле нет так называемой "истинной модели": мы пытаемся изучить ее из данных. Мы никогда не сможем сравнить оценочную модель с "правдой"; лучше всего выбрать лучший из нескольких моделей, которые мы построили. Поэтому, если "лучшая" модель заканчивается с дефицитом ранга, мы можем скептически относиться к ней, но, вероятно, мы ничего не можем сделать немедленно.

Ответ 2

Этот ответ отлично подходит для объяснения того, что такое дефицит ранга, и каковы могут быть возможные причины.

Viz:

  1. Слишком мало данных: вы не можете однозначно оценить n параметров с менее чем n точками данных
  2. Слишком много точек повторяются.
  3. Информация в неправильных местах.
  4. Сложная модель (слишком много переменных)
  5. Единицы измерения и масштабирование
  6. Изменение в числах: 12.001 против 12.005 и 44566 против 44555
  7. Точность данных: даже переменные с двойной точностью имеют ограничения