R语言如何将不同GAM模型的平滑项绘制在同一图表中
问题解答
完全可以将同类型数据估计的不同GAM平滑项放在同一图表展示,手动提取平滑项拟合值后自定义绘图的方式,比compare_smooths灵活度高很多,可自由调整样式、适配两个样点海拔区间部分重叠的场景。
核心实现逻辑
不要依赖GAM工具包内置的对比绘图函数,自己生成预测梯度、提取每个模型的平滑项拟合值与置信区间,合并数据后统一绘图即可:
- 建模阶段保证两个模型中海拔平滑项的设定逻辑一致,比如基函数维度、平滑类型保持统一,避免结果不可比
- 生成预测用的海拔序列时,优先在每个样点自身的海拔覆盖范围内生成,不要跨范围做模型外推(比如用1700-2800m建模的样点1,就不要硬预测2800m以上的拟合值)
- 调用
predict()函数时指定返回平滑项的拟合值和标准误,自行计算95%置信区间 - 给不同样点的预测结果加分组标签,合并后用常规绘图工具即可画出需要的效果
可直接套用的代码框架
以下代码基于最常用的mgcv包的gam函数编写,如果你用的是旧版gam包,仅需要调整预测结果中平滑项对应的列名即可:
library(mgcv) library(ggplot2) library(dplyr) # --------------- 替换为你自己的模型和数据 --------------- # 两个样点的GAM模型,按实际建模代码替换即可 gam_site1 <- gam(diversity ~ s(elevation, k = 5), data = data_site1, method = "REML") gam_site2 <- gam(diversity ~ s(elevation, k = 5), data = data_site2, method = "REML") # 按每个样点的实际海拔范围生成预测梯度,长度200足够保证曲线平滑 pred_df1 <- data.frame( elevation = seq(1700, 2800, length.out = 200), site = "样点1" ) pred_df2 <- data.frame( elevation = seq(2500, 3800, length.out = 200), site = "样点2" ) pred_all <- bind_rows(pred_df1, pred_df2) # 分别提取两个模型海拔平滑项的拟合值、标准误 fit1 <- predict(gam_site1, newdata = pred_df1, type = "terms", se.fit = TRUE) fit2 <- predict(gam_site2, newdata = pred_df2, type = "terms", se.fit = TRUE) # 整理结果,计算95%置信区间 pred_all <- pred_all %>% mutate( smooth_val = c(fit1$fit[,"s(elevation)"], fit2$fit[,"s(elevation)"]), se = c(fit1$se.fit[,"s(elevation)"], fit2$se.fit[,"s(elevation)"]), ci_low = smooth_val - 1.96*se, ci_high = smooth_val + 1.96*se ) # 自定义绘图,颜色、线条粗细、透明度、主题都可以按需调整 ggplot(pred_all, aes(x = elevation, y = smooth_val, color = site, fill = site)) + geom_line(linewidth = 1) + geom_ribbon(aes(ymin = ci_low, ymax = ci_high), alpha = 0.2, color = NA) + scale_x_continuous(name = "海拔 (m a.s.l.)", breaks = seq(1700, 3800, 200)) + ylab("物种多样性平滑项拟合值") + scale_color_discrete(name = "样点") + scale_fill_discrete(name = "样点") + theme_bw()
额外说明
- 这种实现方式没有工具包的功能限制,不管是对比2个还是更多GAM的平滑项,不管是调整置信区间水平、线条样式、标注内容都可以自由修改,通用性远高于内置的
compare_smooths函数 - 如果需要做跨海拔范围的平滑项对比,注意提前检查两个模型的平滑项是否做了相同的中心化处理,避免基准值不一致导致视觉偏差
内容的提问来源于stack exchange,提问作者Crow
相关产品推荐
相关产品推荐

