Ответ 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
Может ли кто-нибудь дать мне пример вводящего в заблуждение случая "предсказания из ранга-дефицита"? Итак, да, в теории нам следует избегать оценки ранга. Но на самом деле нет так называемой "истинной модели": мы пытаемся изучить ее из данных. Мы никогда не сможем сравнить оценочную модель с "правдой"; лучше всего выбрать лучший из нескольких моделей, которые мы построили. Поэтому, если "лучшая" модель заканчивается с дефицитом ранга, мы можем скептически относиться к ней, но, вероятно, мы ничего не можем сделать немедленно.