使用Arima模型预测值不在序列结束之前的时段

Joã*_*iel 5 r predict forecasting

我正在使用外部回归器生成Arima模型.我们假设我有n个观察结果.包中的predict.Arima函数forecast只是对n + 1观察进行预测.

我需要预测n值(系列的最后一个值),改变外部回归量的值,即,我需要在给定外部回归量的特定值的情况下预测n观察值.

library(forecast)
set.seed(123)
aux <- 1:24
covari <- aux + rnorm(24,0,2)
vari <- ts(aux * runif(24,0,3), start=c(2010,1), freq=12)

mod <- auto.arima(vari, xreg=covari)

predict(mod, newxreg=20)
Run Code Online (Sandbox Code Playgroud)

此代码生成模型,并显示如何生成预测.我可以控制提前设置参数的周期数n.ahead.

predict(mod, newxreg=runif(4,15,25), n.ahead=4)
Run Code Online (Sandbox Code Playgroud)

此代码将为该系列的下4个值生成预测.

我需要的是一个n.ahead=-1,即系列内部值的预测,但具有不同的外部回归量.

如果我只使用一个外部回归量,则任务并不复杂,因为因为是一个加性模型,我可以将观察到的xreg值的差值加上我想要的值乘以xreg的系数.然而,如果外部回归量的数量增加,则会变得更加复杂.

有没有办法预测不在Arima模型系列末尾的价值?

Rob*_*man 3

你所说的“预测”是什么意思?对于时间序列,这是根据观察到的过去值对未来值的估计。因此,观测值的“预测”就是观测值。

但也许你指的是合适的价值。即,以所有先前观测值为条件对观测值进行一步预测。在这种情况下,您可以使用 获得您想要的东西fitted(mod)

顺便说一下,predict.Arima()这不是预测包的一部分。预测包提供了forecast.Arima()替代功能。例如:

forecast(mod, xreg=20)
forecast(mod, xreg=runif(4,15,25), h=4)
Run Code Online (Sandbox Code Playgroud)

更新: 正如评论中所解释的,OP 希望对过去的观察结果进行“预测”,假设已经观察到了不同的回归量值。有几种解释方法。

首先,更新系数以反映新信息,并且仅使用过去的数据。在这种情况下,只需重新拟合模型并获取拟合值即可。

其次,系数不更新,仅使用过去的数据。没有这样的功能,我不确定为什么有人需要这样做。但可以按如下方式完成:

fitted(mod) + mod$coef["covari"] * (newx - oldx)
Run Code Online (Sandbox Code Playgroud)

第三,系数不更新,并且使用所有数据。然后我们得到

observed  + mod$coef["covari"] * (newx - oldx)
Run Code Online (Sandbox Code Playgroud)