基于ARIMA模型的R语言时间序列预测与置信区间绘图正确性验证
代码合理性分析与修正建议
整体思路的合理性
你的代码核心逻辑是通顺的:
- 用
auto.arima()自动筛选最优ARIMA模型拟合时间序列 - 通过
forecast()生成12期预测值及95%置信区间 - 借助
dygraphs实现交互式可视化,对比实际值、预测值与置信区间
存在的问题(无法正确展示置信区间)
代码里的dySeries(c("pred$lower", "pred$mean", "pred$upper"))是错误的,具体原因:
- 执行
cbind(ldeaths, pred$lower, pred$mean, pred$upper)后,生成的数据框列名并非pred$lower这类写法,实际列名会是ldeaths、95%(来自pred$lower)、mean、95%(来自pred$upper),列名重复会导致dygraph识别异常 - 直接用对象引用格式作为列名是错误的,必须使用合并后数据框的实际列名
修正后的代码
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
相关产品推荐
相关产品推荐

