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

使用gratia::draw绘制bs='fs'因子平滑项时出现length.out错误

解决gratia::draw()绘制因子平滑项(bs='fs')报错的问题

排查与修复方法

  • 检查分组变量的分布
    确认fs对应的分组因子有没有仅含1个样本的组,或者所有观测都集中在单一水平。这种情况会导致gratia计算绘图范围时出错,用table(你的数据集$分组变量名)查看分布,删掉或合并异常分组后重新拟合模型。

  • 手动提取平滑项并绘图
    绕过gratia自动绘图的逻辑,单独提取fs项的估计值后用ggplot手动绘制:

    # 提取指定的fs平滑项估计
    fs_estimates <- gratia::smooth_estimates(你的模型对象, smooth = "你的fs项名称")
    # 手动绘图
    library(ggplot2)
    ggplot(fs_estimates, aes(x = 自变量名, y = est, group = 分组变量名)) +
      geom_line(linewidth = 0.8) +
      geom_ribbon(aes(ymin = est - 1.96*se, ymax = est + 1.96*se), alpha = 0.2)
    
  • 同步更新mgcv包
    fs是mgcv提供的平滑类型,gratia依赖mgcv的接口,确保mgcv也是最新版本:

    update.packages("mgcv")
    

    更新后重新拟合模型再尝试绘制。

  • 用mgcv原生plot函数完整展示fs项
    如果上面的方法都无效,直接用mgcv的plot函数,指定参数展示完整的分组平滑曲线:

    # 找到fs项的索引
    fs_index <- which(grepl("fs", names(你的模型对象$smooth)))
    # 绘制带置信区间的分组平滑曲线
    mgcv::plot.gam(你的模型对象, select = fs_index, seWithMean = TRUE, scheme = 1)
    

    其中seWithMean=TRUE会包含均值的置信区间,scheme=1会绘制每个分组的平滑曲线,而非仅线性部分。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:24:49