glmmTMB零膨胀高斯模型事后检验结果异常问题咨询
问题描述
我正在用glmmTMB运行零膨胀高斯广义线性混合模型,比较连续变量CPUE(均值±标准差:1.74±8.45,最小值-最大值:0-85.52)在4个因子水平(type)间的差异。其中ACO水平的CPUE值全部为0,其余水平存在非零正值。
模型代码:
glmmTMB(cpue~type+(1|site),data=combined_data,ziformula= ~1,family=gaussian)
确认type因子显著后,用emmeans执行事后检验,代码:
pairs(emmeans(model_cpue,~type),adjust="fdr")
得到结果:
contrast estimate SE df t.ratio p.value ACO - ACT -40.813 19.26 281 -2.119 0.0700 ACO - BAT -31.826 19.13 281 -1.664 0.1459 ACO - TRA -0.133 18.99 281 -0.007 0.9944 ACT - BAT 8.986 5.99 281 1.499 0.1620 ACT - TRA 40.680 5.52 281 7.365 <.0001 BAT - TRA 31.694 5.04 281 6.286 <.0001 P value adjustment: fdr method for 6 tests
模型残差正常,但全为0的ACO水平与其余非零水平无显著差异,其余水平间却存在显著差异。尝试将ZI部分设为ziformula=~type,结果无变化。请问该异常结果的原因是什么?
回答
这种情况其实是零膨胀高斯模型处理全零组时的典型表现,我从几个关键角度给你解释:
1. 零膨胀模型的双结构限制
零膨胀模型本质是两个模型的结合:
- 一个负责判断观测是否为零(零膨胀部分)
- 另一个负责建模非零观测的连续分布(这里是高斯部分)
当你设置ziformula=~1时,所有组的零概率被设定为相同;哪怕改成ziformula=~type,ACO组的零概率已经是100%(所有数据都是0),模型没法再估计这个组的零概率参数——它已经是固定值了,所以这部分调整不会改变结果。
2. 全零组的参数估计方差过大
看事后检验的标准误(SE):ACO和其他组对比的SE都在19左右,而非零组之间的SE只有5-6。这是因为ACO组没有任何非零数据,高斯分布需要非零观测来估计均值和方差,全零组的连续部分参数估计极其不稳定,直接导致标准误被大幅拉宽。
虽然ACO和ACT的差值绝对值很大(-40.813),但过大的标准误让t统计量达不到显著水平(p=0.07,接近但没跨过0.05的常用阈值)。
3. 当前模型可能不是最优选择
你的ACO组是完全零的极端情况,零膨胀高斯模型可能不是最适合的:
- 可以试试两阶段分析:先用混合效应逻辑回归分析“是否为零”的概率(显然
ACO组和其他组差异显著),再对非零数据用高斯混合模型分析CPUE的差异; - 或者考虑删失模型(比如tobit模型),把
ACO的0视为左删失值,但这需要结合你的研究假设判断合理性; - 另外,你的CPUE数据标准差远大于均值,右偏严重,高斯分布是否合适?或许可以尝试对数变换(比如
log(CPUE+1)),或者零膨胀伽马模型(伽马分布不允许0,刚好适配零膨胀结构)。
4. 整体显著性的来源
当type因子整体显著时,这个显著性其实主要来自非零组之间的差异(比如ACT vs TRA、BAT vs TRA),ACO组因为数据的特殊性,在当前模型框架下没法和其他组产生显著差异。你可以查看模型的固定效应估计结果,看看ACO组的截距项和其他组的差异及对应标准误,就能更直观地理解这个问题。
内容的提问来源于stack exchange,提问作者Julien Piquet

