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

GAM模型未来10年预测绘图问题:newdata构建失败求助

问题修复:生成10年预测的newdata设置

你的核心问题是timestep和month的生成逻辑错误,导致无法正确构建10年(120个月)的预测数据集,下面是修正后的代码和解释:

错误点说明

  1. 月份生成错误:你用seq(1,12, length.out = 520)会生成连续的小数月份,但模型中month是周期型的整数变量(1-12循环),小数会导致预测逻辑混乱。
  2. 时间步长错误:你设置的seq(289,409, length.out = 520)起始值和现有数据的最后一个timestep(60)不符,且生成了520个时间步长,远超10年需要的120个。

修正后的完整代码

# 训练GAM模型(原代码保留)
sst_mod = gam(overall_sst ~ s(timestep, k = 10, bs = "cs") + s(month, k = 5, bs = 'cs'), 
             data = mod_df, 
             family = gaussian(link = "identity"))

# 获取现有数据的最后一个时间步长
last_timestep = max(mod_df$timestep)

# 生成未来10年(120个月)的timestep序列:从现有最后一步的下一个值开始,每次+1
ts = seq(last_timestep + 1, last_timestep + 120, by = 1)
# 生成对应的月份:循环1-12,重复10次
mon = rep(1:12, times = 10)

# 构建预测用的newdata
newdata = data.frame(timestep = ts, month = mon)
# 生成预测结果
new_preds = predict(sst_mod, newdata, type = 'response', se.fit = TRUE)

# 将预测值合并到newdata,方便绘图
newdata$pred_fit = new_preds$fit

# 绘制10年预测曲线
ggplot(newdata, aes(x = timestep, y = pred_fit)) + 
  geom_line(col = 'red')

额外优化

原绘图代码中aes(x = timestep, y = overall_sst)会报错,因为newdata里没有overall_sst字段,修正后直接用预测值pred_fit作为y轴变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:50:45