在 R 中绘制 ARIMA 时间序列中的预测值

机器算法验证 r 时间序列 数据可视化
2022-03-28 04:32:01

在这个问题中可能存在不止一个严重的误解,但这并不是为了让计算正确,而是为了激发学习时间序列的一些重点。

在试图理解时间序列的应用时,似乎去趋势数据会使预测未来值变得不可信。例如,包中的gtemp时间序列astsa如下所示:

在此处输入图像描述

在绘制预测的未来值时,需要考虑过去几十年的上升趋势。

然而,为了评估时间序列波动,需要将数据转换为平稳时间序列。如果我将其建模为具有差异的 ARIMA 过程(我猜这是因为 in 的中间1而执行order = c(-, 1, -)),如下所示:

require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))

然后尝试预测未来值(年),我错过了上升趋势部分:50

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))

渲染一个有意义的情节。

2个回答

这就是为什么您不应该对非固定数据执行 ARIMA 或任何操作。

在查看 ARIMA 方程和其中一个假设之后,回答为什么 ARIMA 预测变得平坦的问题非常明显。这是简化的解释,请勿将其视为数学证明。

让我们考虑 AR(1) 模型,但对于任何 ARIMA(p,d,q) 都是如此。
AR(1) 的方程是: 并且关于的假设是有了这样的 β,每个下一个点都比前一个点更接近 0,直到

yt=βyt1+α+ϵ
β|β|1βyt1=0yt=const=α

那么,如何处理这样的数据呢?您必须通过微分()或计算百分比变化()使其静止。您正在建模差异,而不是数据本身。差异随着时间的推移而不断变化,这是你的趋势。new.data=ytyt1new.data=yt/yt11

 require(tseries)
 require(forecast)
 require(astsa)
 dif<-diff(gtemp)
 fit = auto.arima(dif)
 pred = predict(fit, n.ahead = 50)
 ts.plot(dif, pred$pred, lty = c(1,3), col=c(5,2))
 gtemp_pred<-gtemp[length(gtemp)]
 for(i in 1:length(pred$pred)){
   gtemp_pred[i+1]<-gtemp_pred[i]+pred$pred[i]
 }
 plot(c(gtemp,gtemp_pred),type="l")

在此处输入图像描述

为什么预测看起来“线性”的一个普遍原因是因为你可能没有让它像它需要的那样静止。我会检查季节性等。换句话说,仅仅因为 ADF 和 KPSS 测试表明数据是静止的,因此值得在视觉上检查数据或直观地考虑趋势以在预测之前进行进一步调整。这可以避免向上的“线性”趋势外观。