【问题标题】:Random factors in glm not defined because of singularities由于奇点,未定义 glm 中的随机因子
【发布时间】:2021-01-18 08:57:59
【问题描述】:

我正在尝试构建一个 GLMM 以适合我的数据,但由于某种原因,我的所有随机效应都返回为“由于奇异性而未定义”。

我知道这表明它们可以由另一个变量完美预测,但这些变量是一天中的时间、日期和个人 ID,并且不容易相互关联或与任何其他变量相关。我一直将它们作为 ...+ (1|randomeffect) 添加到模型中。

我尝试只包含一个而不包含其他,但无论如何我都会收到此错误。模型的其余部分运行良好。

这是模型和输出:

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  

【问题讨论】:

    标签: r glm lme4 model-fitting


    【解决方案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 被视为 FALSE,任何其他数字都被视为 TRUE,因此 1|xalways TRUE - 所以你的模型中有几个额外的 1 列(从 TRUE 转换回来),它们都与截距共线 ...

    一些略带切线的建议:

    • 建议不要在 GLM(M) 公式中使用df$...; R 知道足以从提供的数据框中获取这些变量
    • 一般来说,我建议将您的变量名称转换为可以在没有反引号的情况下使用的名称,例如low_freqfull_duration(但这当然是个人喜好问题)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多