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