2

我是 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 不具有可比性。

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

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

4

1 回答 1

2

这在另一篇文章中得到了回答是否有一种简单的方法可以将预测恢复为时间序列以进行绘图?

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

正在解决的核心问题是“如何将原始时间戳恢复到预测数据”。我通过反复试验学到的是通过应用以下步骤“配置,然后永远不要失去时间序列属性”:

1:制作时间序列使用 ts() 命令创建时间序列。
2:子集时间序列使用'window()'在'for()'循环中创建时间序列的子集。在数据上使用“start()”和“end()”来显示时间轴位置。
3:预测时间序列使用对时间序列进行操作的 'forecast()' 或 'predict()'。
4:绘制时间序列绘制时间序列时,时间轴将使用lines() 命令正确对齐附加数据。{绘图选项是用户偏好。}

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

代码在这里:有没有一种简单的方法可以将预测恢复为时间序列以进行绘图?

于 2013-08-13T21:47:15.870 回答