Случайные множители в glm не определены из-за особенностей

Я пытаюсь построить GLMM в соответствии с моими данными, но по какой-то причине все мои случайные эффекты возвращаются как не определенные из-за особенностей.

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

Я пробовал просто включить один, а не другие, но все равно получаю эту ошибку. В остальном модель работает нормально.

Вот модель и результат:

Call:
glm(formula = df$Sex ~ df$`Low Freq (KHz)` + df$`Full Song Duration` + 
    (1 | df$Individual) + (1 | df$TOD) + (1 | df$DATER), family = binomial(link = "logit"), 
    data = df)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.95539  -0.18003   0.02514   0.10766   2.16469  

Coefficients: (3 not defined because of singularities)
                        Estimate Std. Error z value Pr(>|z|)    
(Intercept)               4.2354     1.0846   3.905 9.42e-05 ***
df$`Low Freq (KHz)`      -0.7999     0.3923  -2.039   0.0414 *  
df$`Full Song Duration`   5.2124     1.2008   4.341 1.42e-05 ***
1 | df$IndividualTRUE         NA         NA      NA       NA    
1 | df$TODTRUE                NA         NA      NA       NA    
1 | df$DATERTRUE              NA         NA      NA       NA  

person michellemoyah    schedule 02.10.2020    source источник


Ответы (1)


Ваша проблема в том, что вы на самом деле не подходите к GLMM: это не то, что делает glm(). Вы, наверное, хотели:

library(lme4)
glmer(formula = Sex ~ `Low Freq (KHz)` + `Full Song Duration` + 
               (1 | Individual) + (1 | TOD) + (1 | DATER), 
     family = binomial(link = "logit"), 
     data = df)
  • поскольку он не знает о случайных эффектах, glm() интерпретирует такие термины, как 1|TOD, как литерал или оператор: в этом контексте 0 рассматривается как ЛОЖЬ, а любое другое число - как ИСТИНА, поэтому 1|x всегда ИСТИНА - Итак, вы получили несколько дополнительных столбцов единиц (преобразованных обратно из ИСТИНА) в вашу модель, которые все коллинеарны с перехватом ...

Некоторые слегка косвенные предложения:

  • рекомендуется не использовать df$... внутри формул GLM (M); R знает достаточно, чтобы взять эти переменные из предоставленного фрейма данных.
  • в общем, я бы предложил преобразовать ваши имена переменных во что-то, что можно использовать без обратных кавычек, например. low_freq и full_duration (но это, надо признать, дело вкуса)
person Ben Bolker    schedule 02.10.2020