为什么我在 glmmTMB 的输出中看不到所有类别的解释变量?

问题描述

我有一个包含数值和分类变量的数据集,我想将其包含在广义混合模型中。当我这样做时,条件模型的输出总是“忘记”一个类别。

例如,在这个模型中,我将每个视频检测到的总时间的警惕比例作为响应变量,并作为解释变量:尿液强度(数字)、治疗(0 表示无尿液,1 表示尿液)、 diel_period(黎明,黄昏,夜晚,白天),性别(男性,女性,未定义),高度(树木,数字)。而我的 50 个相机作为随机分组效果(1 到 50)。

bBI_mod8 <- glmmTMB(cbind(vigilance,total_time_behavIoUr - vigilance) ~ 
                    urine_intensity_heatmap + treatment + diel_period + sex + height + (1|camera),ziformula = ~1,data = df_behavIoUr,family = "betabinomial")

警惕比例遵循零膨胀的 beta 二项式回归。

summary(bBI_mod8)

当我显示输出时,我观察到:

 Family: betabinomial  ( logit )
Formula:          cbind(vigilance,total_time_behavIoUr - vigilance) ~ urine_intensity_heatmap +  
    treatment + diel_period + sex + height + (1 | camera)
Zero inflation:                                                      ~1
Data: df_behavIoUr

     AIC      BIC   logLik deviance df.resid 
  2973.8   3037.1  -1474.9   2949.8     1439 

Random effects:

Conditional model:
 Groups Name        Variance Std.Dev.
 camera (Intercept) 0.1583   0.3979  
Number of obs: 1451,groups:  camera,50

Overdispersion parameter for betabinomial family (): 1.85 

Conditional model:
                         Estimate Std. Error z value Pr(>|z|)    
(Intercept)             -0.907429   0.471376  -1.925 0.054222 .  
urine_intensity_heatmap -0.009844   0.004721  -2.085 0.037034 *  
treatment1              -0.219403   0.154396  -1.421 0.155304    
diel_periodDay          -0.337329   0.235033  -1.435 0.151218    
diel_periodDusk         -0.543771   0.285322  -1.906 0.056675 .  
diel_periodNight        -0.553826   0.274879  -2.015 0.043925 *  
sexMale                 -0.772731   0.168350  -4.590 4.43e-06 ***
sexUndefined            -1.010425   0.271876  -3.716 0.000202 ***
height                   0.001713   0.012352   0.139 0.889681    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Zero-inflation model:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -0.6685     0.4298  -1.556     0.12

我的问题是,如你所见,对于我的分类变量,总是有一个分类被省略:

treatment1 但不是 treatment0

diel_periodDaydiel_periodDuskdiel_periodNight 但不是 diel_periodDawn

sexMalesexUndefined 但不是 sexFemale

我该如何解决这个问题?或者我怎样才能显示一个完整的输出

解决方法

在广义线性模型的输出中,显示的估计值是与参考水平比较的效果。除非指定,否则将根据字母顺序自动选择参考水平。

在上面的摘要中,以性别为例,例如您看到的 words = ['mild','other','covid','2019'] website = urllib.request.urlopen('https://en.wikipedia.org/wiki/COVID-19').read() for word in words: if word in website: print(word) else: print(word,"not found") 估计值是男性与女性相比的影响。对于 sexMale,这就是与 treatment 相比的效果。对于 treatment0,同样的逻辑适用。

您可以通过手动将参考电平设置为您喜欢的值来覆盖它。照原样,您的参考水平是 diel,完全基于字母顺序。