使用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
相关产品推荐
相关产品推荐

