如何将多个数据子集预测预测绘制到单个图上

时间:2013-08-08 22:04:54

标签: r plot forecasting

我是R的新手并且发现这个网站非常有帮助,所以这是我的第一个发布的问题。感谢您的帮助并感谢本网站的智慧。

背景:从每周5年的销售数据开始,根据每周销售情况制定未来生产预测,并确保年度季节性非常强劲。确定起点:

auto.fit <- auto.arima(arima.ts, stepwise=FALSE, parallel=TRUE, num.cores=6, trace=TRUE )
> ARIMA(2,1,2)(0,0,1)[52] with drift.  

现在,我希望通过在数据中直观绘制多个“窗口”并与实际值进行比较来证明准确性。 (这包括记录AIC值。)换句话说,函数以编程的间隔循环数据,将预测重新计算/绘制到同一图上。当我的窗口从数据的头部开始时,它正确绘制。现在我正在看一个移动的104周窗口,结果全部从第104次观察开始重叠。

require(forecast)   ##[EDITED for simplified clarity]

data <- rep(cos(1:52*(3.1416/26)),5)*100+1000+c(1:26,25:0)

# Create the current fit on data and predict one year out
plot(data, type="l", xlab="weeks", ylab="counts",main="Overlay forecasts & actuals",
     sub="green=FIT(1-105,by 16) wks back & PREDICT(26) wks, blue=52 wks")
result <- tryCatch({
  arima.fit <- auto.arima(tail(data,156)) 
  arima.pred <- predict(arima.fit, n.ahead=52)
  lines(arima.pred$pred, col="blue")
  lines(arima.pred$pred+2*arima.pred$se, col="red")
  lines(arima.pred$pred-2*arima.pred$se, col="red")
}, error = function(e) {return(e$message)} )  ## Trap error

# Loop and perform comparison plotting of forecast to actuals
for (j in seq(1,105,by=16)) { 
  result <- tryCatch({
    ############## This plotted correctly as "Arima(head(data,-j),..."
    arima1.fit <- auto.arima(head(tail(data,-j),156))
    arima1.pred <- predict(arima1.fit, n.ahead=52)
    lines(arima1.pred$pred, col="green", lty=(numtests %% 6) + 1 )
  }, error = function(e) {return(e$message)}) ## Trap errors
}      

当所有预测都包含在文件头部时,图表是准确的,但是,由于样本量不断缩小,AIC在预测窗口之间无法比较。

问题:如何按照3年滚动窗口(156个观测值)计算的程序间隔显示完整的5年销售数据和叠加预测?

使用滚动窗口方法记录的AIC值是可比较的,但所有预测覆盖从观察157开始。我尝试将数据制作成时间序列并发现初始数据在时间轴上正确绘制,但预测是不是时间序列,所以他们没有显示。

1 个答案:

答案 0 :(得分:2)

这在另一篇帖子Is there an easy way to revert a forecast back into a time series for plotting?

中得到了解答

这最初是作为两个独特的问题发布的,但它们的答案相同。

正在解决的核心问题是&#34;如何将原始时间戳恢复为预测数据&#34;。我通过试验和错误学到的是&#34;配置,然后永远不会失去时间序列属性&#34;通过应用这些步骤:

1:制作时间序列使用ts()命令创建时间序列 2:设置时间序列使用&#39;窗口()&#39;在&#39; for()&#39;中创建时间序列的子集环。使用&#39; start()&#39;和&#39;结束()&#39;在数据上显示时间轴位置 3:预测时间序列使用&#39; forecast()&#39;或者&#39;预测()&#39;按时间序列进行操作 4:绘制时间序列绘制时间序列时,时间轴将使用lines()命令正确对齐其他数据。 {绘图选项是用户偏好。}

预测将在正确的时间轴位置绘制历史数据。

代码在这里:Is there an easy way to revert a forecast back into a time series for plotting?