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


10

这个问题可能有一个以上的严重误解,但这并不是要正确地进行计算,而是要着眼于某些重点来激发时间序列的学习。

在试图理解时间序列的应用时,似乎对数据进行去趋势化使得预测未来值变得难以置信。例如,gtemp来自astsa程序包的时间序列如下所示:

在此处输入图片说明

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

但是,为了评估时间序列的波动,需要将数据转换为固定的时间序列。如果我把它模型或差分(我想这是因为中间的进行了ARIMA过程1order = 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)

在此处输入图片说明

在计算过程上更加不透明。我的目的是对如何将趋势合并到绘图计算中有所了解。是一个问题,有没有driftarima()(小写)?


相比之下,使用该数据集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))

绘制出有意义的图。


1
我想说的是,如果您认为趋势随时间变化了,那么ARIMA模型可能不是预测它们的最佳方法。在缺乏主题知识的情况下(这可能会导致更好的模型),我倾向于研究状态空间模型。特别是基本结构模型的变体。关于状态空间模型的许多讨论可能难以理解,但是安德鲁·哈维(Andrew Harvey)的书和论文具有很高的可读性(例如,《预测,结构时间序列模型和卡尔曼滤波器》这本书相当不错)。... ctd
Glen_b-莫妮卡(Reonica)莫妮卡恢复

ctd ...还有一些其他的作者做得还不错,但是即使是更好的作者也使它变得比初学者真正需要的更为复杂。
Glen_b-恢复莫妮卡

谢谢@Glen_b。只是想让时间序列变得天才,而且在许多数学主题中,缺乏动机的序言是一个杀手er。我们可能真正关心的所有时间序列似乎都在上升或下降-人口,GOP,股市,全球温度。而且我知道您想摆脱趋势(可能需要一秒钟),以查看周期性和季节性模式。但是,将隐含的发现与总体趋势进行拼接以进行预测是隐含的,或者没有作为目标解决。
Antoni Parellada

Rob Hyndman 在这里的评论是相关的。我可能会再扩大一点。
Glen_b-恢复莫妮卡

Rob J. Hyndman的博客文章“ R中的常量和ARIMA模型”可能就是您所需要知道的。一旦您浏览了博客文章,我很想听到您的意见。
理查德·哈迪

Answers:


1

这就是为什么您不应该对非固定数据执行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")

在此处输入图片说明


谢谢。简而言之,是最终图的斜率吗?α
安东尼·帕雷拉达

不。我认为您感到困惑,因为该坡度通常表示为。但是,如果您问这个与斜率之间的关系是什么,答案将不是简单的。简而言之,如果您选择了差异化,将是斜率的切线,如果您选择了%变化,则不会有任何斜率,因为趋势不是线性的。α αααα
mbt

好。我将不得不处理您的代码,以查看它与ts方程有关的内容。我还没有和ts合作,自从我发布问题以来已经有一段时间了。
Antoni Parellada

在玩了一些代码之后,我看到了发生了什么。您可以在AR1 = 0.257; MA = - 0.7854ARIMA模型方程式中包含拟合系数吗,以充分了解绘图末尾投影或预测的尾部倾斜线的生成过程吗?
安东尼帕雷拉达

当然。在我的回答中,我只放入了AR(1)方程。整个ARMA(p,q)过程的等式为其中第一个和为AR(p)第二部分是MA(q)过程。我们这里有ARMA(1,1),因此它不那么复杂:其中,,。 Ŷ=βý-1+γε-1+α+εβ=0.257γ=-0.7854α=0.0064
y^t=ipβiyti+jqγjϵtj+α+ϵt
y^t=βyt1+γϵt1+α+ϵt
β=0.257γ=0.7854α=0.0064
mbt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.