Arimax 预测:使用预测包

机器算法验证 r 时间序列 预测 有马 干预分析
2022-03-13 17:25:39

据我所知,包中arimax函数是唯一适合干预模型传递函数的包。尽管有时需要它,但它缺少预测功能。TSAR

以下是解决此问题的方法吗,利用了优秀的forecast软件包?预测间隔是否正确?在我的示例中,组件的标准错误是“关闭”的。

  1. 使用预测包 arima 函数确定干预前噪声序列并添加任何异常值调整。
  2. 拟合相同的模型,arimax但添加传递函数
  3. 获取传递函数的拟合值(来自 的系数arimax)并将它们作为 xreg 添加到 中arima
  4. 预测与arima
library(TSA)
library(forecast)
data(airmiles)
air.m1<-arimax(log(airmiles),order=c(0,0,1),
              xtransf=data.frame(I911=1*(seq(airmiles)==69)),
              transfer=list(c(1,0))
              )

空气.m1

输出:

Coefficients:
  ma1  intercept  I911-AR1  I911-MA0
0.5197    17.5172    0.5521   -0.4937
s.e.  0.0798     0.0165    0.2273    0.1103

sigma^2 estimated as 0.01223:  log likelihood=88.33
AIC=-168.65   AICc=-168.09   BIC=-155.02

这是过滤器,延长了 5 个数据周期

tf<-filter(1*(seq(1:(length(airmiles)+5))==69),filter=0.5521330,method='recursive',side=1)*(-0.4936508)
forecast.arima<-Arima(log(airmiles),order=c(0,0,1),xreg=tf[1:(length(tf)-5)])
forecast.arima

输出:

Coefficients:
         ma1  intercept  tf[1:(length(tf) - 5)]
      0.5197    17.5173                  1.0000
s.e.  0.0792     0.0159                  0.2183

sigma^2 estimated as 0.01223:  log likelihood=88.33
AIC=-168.65   AICc=-168.28   BIC=-157.74

然后预测

predict(forecast.arima,n.ahead = 5, newxreg=tf[114:length(tf)])
1个回答

预测区间基于最大似然优化估计的残差。

我喜欢包forecast中的功能forecast

fc <- forecast(forecast.arima,h = 5, xreg=tf[114:length(tf)])

这给了我以下预测:

  Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jun 2005       17.61393 17.47222 17.75565 17.39720 17.83067
Jul 2005       17.51725 17.35753 17.67697 17.27299 17.76152
Aug 2005       17.51725 17.35753 17.67697 17.27299 17.76152
Sep 2005       17.51725 17.35753 17.67697 17.27299 17.76152
Oct 2005       17.51725 17.35753 17.67697 17.27299 17.76152

预测区间的工作方式是通过以下公式:

yt±zσ其中是一个乘数,例如 1.96 代表 95% 预测区间,1.28 代表 80% 预测区间是残差的标准差,也是预测分布,也是 sigma 的平方根^ 2 在最大似然估计中。当您显示 sigma^2 ( 0.01223) 在您的两个模型中相同时,预测间隔也将相同并且将匹配。zσ

如果你想检查它,

上限:

> fc$mean[1]+sqrt(forecast.arima$sigma2)*1.96
[1] 17.83068

下限:

> fc$mean[1]-sqrt(forecast.arima$sigma2)*1.96
[1] 17.39719

与函数提供的预测间隔相匹配forecast要回答您的问题,是的,forecast在这种情况下,利用包将起作用,并且预测间隔将是正确的。