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

如何在同一张图中叠加GAMM模型的两个平滑变量可视化结果?

解决GAMM模型分组平滑曲线叠加绘图问题

方法一:用gratia包直接提取并绘图

gratia完全支持gamm模型,但要注意调用模型里的gam组件,而不是直接用gamm拟合结果。步骤如下:

  • 加载所需包
  • 从gamm结果中提取gam对象
  • 用smooth_estimates()整合分组平滑项的估计值,再用ggplot叠加绘图
library(gratia)
library(ggplot2)
library(mgcv)

# 假设你的gamm拟合结果叫gamm_fit
gam_mod <- gamm_fit$gam

# 提取所有分组平滑项的估计数据
sm_est <- smooth_estimates(gam_mod)

# 叠加绘图,自动按x2分组
ggplot(sm_est, aes(x = x1, y = est, color = x2, fill = x2)) +
  geom_line(linewidth = 1) +
  # 添加置信区间
  geom_ribbon(aes(ymin = est - 1.96*se, ymax = est + 1.96*se), alpha = 0.2, color = NA) +
  labs(x = "x1", y = "偏效应", color = "x2分组", fill = "x2分组") +
  theme_minimal()

方法二:手动生成预测值绘图

之前predict报错是因为直接用了gamm的整体结果,正确做法是调用其内部的gam组件。步骤如下:

  • 构造包含x1全范围、x2所有水平的新数据框
  • 基于gam组件做预测,提取拟合值和标准误
  • 用ggplot叠加曲线
# 假设你的原始数据集叫dat
new_data <- expand.grid(
  x1 = seq(min(dat$x1), max(dat$x1), length.out = 100), # 生成x1的连续取值
  x2 = levels(dat$x2), # 包含x2的所有分组
  f3 = dat$f3[1] # 随机效应取任意一个水平即可,不影响固定+平滑项的偏效应
)

# 基于gam组件预测,提取拟合值和标准误
pred_results <- predict(gamm_fit$gam, newdata = new_data, se.fit = TRUE)
new_data$fit <- pred_results$fit
new_data$se <- pred_results$se.fit

# 绘制偏效应曲线(若要单独看平滑项效应,可改用type = "terms")
ggplot(new_data, aes(x = x1, y = fit, color = x2)) +
  geom_line(linewidth = 1) +
  geom_ribbon(aes(ymin = fit - 1.96*se, ymax = fit + 1.96*se), alpha = 0.2, color = NA, fill = after_scale(color)) +
  labs(x = "x1", y = "偏效应", color = "x2分组") +
  theme_minimal()

关键注意事项

  • gamm拟合结果是一个列表,必须用gamm_fit$gam来调用gratia函数或predict,直接用gamm_fit会触发报错
  • 你用到的复合对称相关性(corCompSymm)属于lme部分的设置,不会影响gam组件的平滑项提取和预测,不用为此担心

内容的提问来源于stack exchange,提问作者Molly Smith Metok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:15