我正在使用外部回归器生成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模型系列末尾的值?
答案 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)