5

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

我需要对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)

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

predict(mod, newxreg=runif(4,15,25), n.ahead=4)

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

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

如果我只使用一个外部回归器,那么任务并不复杂,因为因为它是一个加法模型,所以我可以将观察到的 xreg 值的差值乘以我想要的值乘以 xreg 的系数。但是,如果外部回归器的数量增加,它会变得更加复杂。

有什么方法可以预测不在 Arima 模型系列末尾的值?

4

1 回答 1

3

“预测”是什么意思?对于时间序列,这是以观察到的过去值为条件的对未来值的估计。因此,观察值的“预测”就是观察值。

但也许你的意思是拟合值。即,以所有先前观察为条件的观察的一步预测。在这种情况下,您可以使用fitted(mod).

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

forecast(mod, xreg=20)
forecast(mod, xreg=runif(4,15,25), h=4)

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

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

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

fitted(mod) + mod$coef["covari"] * (newx - oldx)

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

observed  + mod$coef["covari"] * (newx - oldx)
于 2012-04-25T01:25:15.080 回答