Ошибка при запуске модели смешанных эффектов - Ошибка: количество уровней каждого фактора группировки должно быть <количество наблюдений - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь понять, как решить следующую ошибку при попытке запустить glmer в R с использованием пакета lme4:

Ошибка: количество уровней для каждого фактора группировки должно быть <количество наблюдений. </p>

Чтобы дать некоторую справку, я задаю вопрос о том, связано ли наличие определенного количества специфического c типа бактерий с относительным увеличением массы в популяции животных я изучаю. У меня довольно маленький размер выборки, 20 уникальных личностей. Мои фиксированные эффекты - это относительный прирост массы, бактериальный тип 1, тип 2, возраст и дата со случайным воздействием индивидуума, площади колонии и года. Это код, который я запускаю:

Model1 <- glmer(relative_growth ~ firmicutes + bacteroidetes + age_class + date +
                (1|uid) + (1|col_area) + (1|year), data = microbiome)

Вот примерное подмножество моих данных:

dput(microbiome[1:5],)
structure(list(uid = structure(c(5L, 8L, 11L, 13L, 9L, 10L, 1L, 
12L, 16L, 17L, 18L, 14L, 20L, 19L, 7L, 4L, 15L, 6L, 2L, 3L), .Label = c("6127_7339", 
"6385_6342", "6609_7388", "6835_6898", "7131_7126", "7187_7189", 
"7279_7197", "7365_7368", "7640_7641", "7753_7754", "7755_7756", 
"7780_7781", "7783_7793", "7828_7874", "7830_7849", "8005_8009", 
"8111_8107", "8476_8478", "8491_8492", "8497_8488"), class = "factor"), 
    year = c(2015L, 2015L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2017L, 2017L, 2018L, 2018L, 2018L, 2018L, 2016L, 2016L, 
    2018L, 2018L, 2018L, 2015L), col_area = structure(c(4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 3L, 2L, 3L, 3L, 4L, 1L, 2L, 
    2L, 3L, 1L), .Label = c("boulder", "gothictown", "mm_maintalus", 
    "picnic_lower"), class = "factor"), date = structure(c(10L, 
    8L, 5L, 4L, 15L, 15L, 4L, 2L, 12L, 1L, 14L, 9L, 14L, 14L, 
    7L, 3L, 11L, 6L, 13L, 16L), .Label = c("11-Jun-17", "13-Jul-16", 
    "14-Jun-16", "15-Jun-16", "16-Jun-16", "18-Jun-18", "2-Jun-16", 
    "20-Jul-15", "21-May-18", "22-Jun-15", "22-May-18", "25-Jun-17", 
    "27-Jun-18", "28-May-18", "3-Jun-16", "9-Jul-15"), class = "factor"), 
    age_class = structure(c(1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 
    2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("A", 
    "Y"), class = "factor")), row.names = c(NA, -20L), class = "data.frame")

1 Ответ

2 голосов
/ 11 февраля 2020
  • Кажется, на основании данных, которые вы нам показали, существует только одно наблюдение на значение uid. Если это так, то, как говорит @neilfws, ваша модель слишком задана - при подгонке линейной смешанной модели (см. Третий пункт ниже) или GLMM с семейством, которое принимает параметр регулируемой шкалы (например, гамма), случайный уровень наблюдения эффект будет смешиваться с остаточной дисперсией (для LMM) или параметром масштаба. Просто исключите термин (1|uid) из вашей модели.
  • Сначала я думал, что наиболее вероятной проблемой является использование области колонии в качестве переменной группировки со случайным эффектом (т. Е. С правой стороны панели в спецификации случайных эффектов); если область колонии является непрерывной переменной, это может быть переменная помех (то есть то, что вы хотите контролировать статистически), но она (обычно) не может быть разумно переменной группировки случайных эффектов: этот вопрос объясняет проблему более подробно.
  • более стилистический / эстетический c, чем основной, но если вы подходите линейный (а не обобщенный линейный ) смешанная модель, то есть (условный) ответ обычно распределяется, тогда вы должны использовать lmer() вместо glmer() (если вы вызываете glmer() без указания аргумента family=, вы получите предупреждение, которое предлагает вы должны использовать lmer() вместо). (Как правило, прирост массы моделируется как нормальный, или, возможно, логарифмически нормальный или гамма ...)
...