You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mgcv包GAM模型绘图未显示部分残差问题求助

GAM模型绘图未显示部分残差的问题分析

问题描述

使用mgcv包拟合细胞丰度随时间变化的GAM模型,模型运行正常(已知残差存在模式,但此为无关问题)。在plot()函数中设置residuals = TRUE后,绘图仍未显示部分残差,此前相同代码在其他数据集上可正常运行。

模型代码

GAM_EA <- mgcv::gam(EUB_FISH ~ s(Day, by = Heatwave), data = HnH, method = "REML")
gam.check(GAM_EA) # 检查模型
mgcv::anova.gam(GAM_EA) # 获取统计结果,详见?anova.gam
summary.gam(GAM_EA)
plot(GAM_EA, shift = coef(GAM_EA)[1], residuals = TRUE)

可能的原因及解决方法

  • 分组平滑项的残差范围截断
    模型使用了by = Heatwave参数,Day的平滑项按Heatwave的不同水平分组拟合。plot()默认会分别绘制每个分组的曲线,若某个分组的残差超出当前绘图的y轴默认范围,就会被自动截断不显示。可添加ylim = "all"参数强制显示所有数据点:

    plot(GAM_EA, shift = coef(GAM_EA)[1], residuals = TRUE, ylim = "all")
    
  • shift参数导致残差偏移出可视范围
    你用shift = coef(GAM_EA)[1]将曲线平移到响应变量原始尺度,但残差是基于线性预测值与观测值的差值,平移后可能部分残差超出了绘图默认y轴范围。可以先去掉shift参数验证残差是否显示,再调整平移后的y轴范围。

  • 残差点重叠导致视觉上的“缺失”
    若同一Day和Heatwave分组下存在多个观测值,残差点会重叠在一起,看起来像是部分残差缺失。可添加jitter = TRUE参数让残差点随机偏移,查看隐藏的点:

    plot(GAM_EA, shift = coef(GAM_EA)[1], residuals = TRUE, jitter = TRUE)
    
  • mgcv版本差异影响绘图逻辑
    不同版本的mgcv在plot.gam()的残差处理逻辑上可能存在细微差异。可通过packageVersion("mgcv")检查当前版本,对比之前正常运行时的版本,必要时更新或回退版本。

内容的提问来源于stack exchange,提问作者Reesa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:11:16