微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于奇异性,未定义glm中的随机因素

如何解决由于奇异性,未定义glm中的随机因素

我正在尝试构建一个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  

解决方法

您的问题是您实际上不适合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|x总是 TRUE-因此您最终在模型中得到了几列额外的1(从TRUE转换回来),它们与截距共线...

一些切线建议:

  • 建议在GLM(M)公式中使用df$...; R知道足够从提供的数据框中获取这些变量
  • 通常,我建议将变量名转换为无需反引号即可使用的名称,例如low_freqfull_duration(但这是个人喜好问题)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。