在这个问题中可能存在不止一个严重的误解,但这并不是为了让计算正确,而是为了激发学习时间序列的一些重点。
在试图理解时间序列的应用时,似乎去趋势数据会使预测未来值变得不可信。例如,包中的gtemp
时间序列astsa
如下所示:
在绘制预测的未来值时,需要考虑过去几十年的上升趋势。
然而,为了评估时间序列波动,需要将数据转换为平稳时间序列。如果我将其建模为具有差异的 ARIMA 过程(我猜这是因为 in 的中间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))
渲染一个有意义的情节。