auto.arima函数

时间:2019-05-08 00:52:08

标签: r time-series arima forecast

我有这个数据,这是从预测值和观察值获得的残差序列。原始系列是随机行走,漂移很小(平均值= 0.0025)。

err <- ts(c(0.6100, 1.3500, 1.0300, 0.9600, 1.1100, 0.8350 , 0.8800 , 1.0600 , 1.3800 , 1.6200,  1.5800 , 1.2800 , 1.3000 , 1.4300 , 2.1500 , 1.9100 , 1.8300 , 1.9500  ,1.9999, 1.8500 , 1.5500 , 1.9800  ,1.7044  ,1.8593 , 1.9900 , 2.0400, 1.8950,  2.0100 , 1.6900 , 2.1800 ,2.2150,  2.1293 , 2.1000 , 2.1200 , 2.0500 , 1.9000,  1.8350, 1.9000 ,1.9500 , 1.7800 , 1.5950,  1.8500 , 1.8400,  1.5800, 1.6100 , 1.7200 , 1.8500 , 1.6700,  1.8050,  1.9400,  1.5000 , 1.3100 , 1.4864,  1.2400 , 0.9300 , 1.1400, -0.6100, -0.4300 ,-0.4700 ,-0.3450), frequency = 7, start = c(23, 1), end = c(31, 4))

我知道这个残差序列具有一些Seriel相关性,可以用ARIMA来建模。

acf(err[1:length(err)]);pacf(err[1:length(err)])
# x axis starts with zero.
# showing only integer lags here, same plot as full seasonal periods. 
# shows it typically can be fitted by a MA model.

enter image description here

我尝试了以下配件:

library(forecast)

m1 <- auto.arima(err, stationary=T, allowmean=T)
#output
# ARIMA(2,0,0) with zero mean 

# Coefficients:

#         ar1     ar2
#      0.7495  0.2254
# s.e.  0.1301  0.1306

# sigma^2 estimated as 0.104:  log likelihood=-17.65
# AIC=41.29   AICc=41.72   BIC=47.58

m2 <- auto.arima(err, allowmean=T)
# output
# ARIMA(0,2,2) 

# Coefficients:
#          ma1     ma2
#      -1.3053  0.3850
# s.e.   0.1456  0.1526

# sigma^2 estimated as 0.1043:  log likelihood=-16.97
# AIC=39.94   AICc=40.38   BIC=46.12

如果我们参考auto.arima的帮助页面,则会看到:

  

stationary:如果为TRUE,则将搜索限制为固定模型。

acf的{​​{1}}和pacf可以看出,它应该由err模型而不是MA来拟合,为什么{ {1}}适合我AR吗?

我的理解是auto.arimaAR应该都固定不动,然后 这个m1参数的目的是什么?

现在,如果我们绘制这两个模型的根,将更加有趣:

M1 M2

如果我们查看根图,则m2(m1)的静态不如stationary的模型,尽管m1 $残差是白噪声。

1 个答案:

答案 0 :(得分:1)

我无法回答第一个问题,但是关于第二个问题,auto.arima()实际上可以生成非平稳模型以适合给定的时间序列。 “ i”代表集成,表示可以使用集成。您可以通过获取每个观测值与先前观测值的差(差异)来转换大多数(全部?)非平稳模型(非常类似于微积分中的导数),然后通过积分将其转换回原始时间序列。

因此,如果您不想让auto-arima()生成非平稳模型,则可以使用stationary参数,从根本上限制了使用更简单的ARMA模型寻找合适的参数。