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

时间:2012-04-24 19:43:43

标签: r forecasting predict

我正在使用外部回归器生成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)

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

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

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

我需要的是n.ahead=-1,即对系列内部值的预测,但使用不同的外部回归量。

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

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

1 个答案:

答案 0 :(得分: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)