我是 R 新手,发现这个网站非常有帮助,所以这涵盖了我问题的后半部分(每个帖子一个问题)。感谢您提前提供的帮助。
背景: 我正在绘制具有多个预测的历史数据,以进行视觉准确性检查。这在“观察”的 x 轴上显示时效果很好。但是,当用 x 轴上的日期绘制数据时,数据更容易理解,因此我使用 ts() 将其设为时间序列,并按预期绘制时间序列数据。但是,(A)它没有在时间尺度上绘制预测数据,因为它们不是时间序列;(B) 我不确定如何强制 x 轴加 1 年以允许显示预测。
问题:(A)如何将原始时间戳恢复到预测数据?我知道我可以手动重新创建时间序列,但在每次预测迭代中都需要这样做。我考虑过使用预测()而不是预测(),但额外的预测迭代仍然存在同样的问题,即不是时间序列。 有没有一种简单的方法可以将原始时间戳恢复到预测数据?
require(forecast) [EDITED for clarity]
data <- rep(cos(1:52*(3.1416/26)),5)*100+1000
arima.ts <- ts(data,start=c(2009,1),frequency=52) #not plotted as time series
# Create the current fit on data and predict one year out
plot(arima.ts, 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")
############## This plotted correctly as "Arima(data),..."
arima.fit <- auto.arima(tail(arima.ts,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")
# Loop back 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(arima.ts,-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
}