这个问题可能有一个以上的严重误解,但这并不是要正确地进行计算,而是要着眼于某些重点来激发时间序列的学习。
在试图理解时间序列的应用时,似乎对数据进行去趋势化使得预测未来值变得难以置信。例如,gtemp
来自astsa
程序包的时间序列如下所示:
在绘制预测的未来值时,需要考虑过去几十年的上升趋势。
但是,为了评估时间序列的波动,需要将数据转换为固定的时间序列。如果我把它模型或差分(我想这是因为中间的进行了ARIMA过程1
中order = c(-, 1, -)
)为:
require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))
然后尝试预测未来价值(年),我错过了上升趋势部分:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
不必一定要对特定ARIMA参数进行实际优化, 如何恢复图的预测部分中的上升趋势?
我怀疑某个地方存在“隐藏”的OLS,这会导致这种不稳定吗?
我遇到了的概念drift
,可以将其合并到包的Arima()
功能中forecast
,从而得出合理的图形:
par(mfrow = c(1,2))
fit1 = Arima(gtemp, order = c(4,1,1),
include.drift = T)
future = forecast(fit1, h = 50)
plot(future)
fit2 = Arima(gtemp, order = c(4,1,1),
include.drift = F)
future2 = forecast(fit2, h = 50)
plot(future2)
在计算过程上更加不透明。我的目的是对如何将趋势合并到绘图计算中有所了解。是一个问题,有没有drift
在arima()
(小写)?
相比之下,使用该数据集AirPassengers
,将考虑到该上升趋势,绘制出超出数据集端点的预计乘客数量:
该代码是:
fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))
绘制出有意义的图。