我是 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 开始叠加。我尝试将数据制作成时间序列,发现初始数据正确绘制在时间轴上,但预测不是时间序列,所以它们没有显示。