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

基于ARIMA模型的R语言时间序列预测与置信区间绘图正确性验证

代码合理性分析与修正建议

整体思路的合理性

你的代码核心逻辑是通顺的:

  • 用auto.arima()自动筛选最优ARIMA模型拟合时间序列
  • 通过forecast()生成12期预测值及95%置信区间
  • 借助dygraphs实现交互式可视化,对比实际值、预测值与置信区间

存在的问题(无法正确展示置信区间)

代码里的dySeries(c("pred$lower", "pred$mean", "pred$upper"))是错误的,具体原因:

  1. 执行cbind(ldeaths, pred$lower, pred$mean, pred$upper)后,生成的数据框列名并非pred$lower这类写法,实际列名会是ldeaths、95%(来自pred$lower)、mean、95%(来自pred$upper),列名重复会导致dygraph识别异常
  2. 直接用对象引用格式作为列名是错误的,必须使用合并后数据框的实际列名

修正后的代码

library(forecast)
library(dygraphs)

# 拟合模型并生成预测
fit <- auto.arima(ldeaths)
pred <- forecast(fit, h = 12, level = 0.95)

# 整理预测数据:统一列名,避免重复
pred_df <- cbind(
  Lower = pred$lower,
  Mean = pred$mean,
  Upper = pred$upper
)

# 合并原始数据与预测数据,对齐时间索引
plot_data <- cbind(Actual = ldeaths, pred_df)

# 绘制交互式可视化图
dygraph(plot_data, main = "Deaths from Lung Disease (UK)") %>%
  dySeries("Actual", label = "Actual") %>%
  dySeries(c("Lower", "Mean", "Upper"), label = "Predicted", fill = "red")

修正说明

  • 先将预测的置信区间上下限、均值整理为列名清晰的数据框,避免列名重复问题
  • 合并原始数据与预测数据时统一命名,方便dygraph识别
  • dySeries(c("Lower", "Mean", "Upper"))会自动将上下限作为置信区间填充区域,中间线展示预测均值,完美实现预期的可视化效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:15:27