2010-04-21 292 views
11

我想向自己解释将ARIMA模型应用于时间序列数据集的预测结果。数据来自M1比赛,系列为MNB65。我试图将数据拟合到ARIMA(1,0,0)模型并获得预测。我使用R.下面是一些输出片段:解释来自ARIMA模型的预测

> arima(x, order = c(1,0,0)) 
Series: x 
ARIMA(1,0,0) with non-zero mean 
Call: arima(x = x, order = c(1, 0, 0)) 
Coefficients: 
     ar1 intercept 
     0.9421 12260.298 
s.e. 0.0474 202.717 

> predict(arima(x, order = c(1,0,0)), n.ahead=12) 
$pred 
Time Series: 
Start = 53 
End = 64 
Frequency = 1 
[1] 11757.39 11786.50 11813.92 11839.75 11864.09 11887.02 11908.62 11928.97 11948.15 11966.21 11983.23 11999.27 

我有几个问题:

(1)如何解释,虽然该数据集显示了一个明显的下降趋势,从这个模型的预测趋势向上。对于使用auto.arima(预测包)和ARIMA(1,0,1)模型的ARIMA(2,0,0),这也是最适合数据的ARIMA。 (2)ARIMA(1,0,0)模型的截距值为12260.298。截距不应满足方程:C =平均值*(1 - 总和(AR系数)),在这种情况下,该值应为715.52。我必须在这里错过一些基本的东西。

(3)这显然是一个非平稳的意思。为什么AR(2)模型仍然被auto.arima选为最佳模型?可以有一个直观的解释吗?

谢谢。

+1

我已经投票结束这个,因为它不是一个编程问题。 – 2010-04-21 16:44:16

回答

21
  1. 由于模型是静止的,所以没有ARIMA(p,0,q)模型将允许一个趋势。如果你真的想要包括一个趋势,使用带有漂移项的ARIMA(p,1,q)或者ARIMA(p,2,q)。 auto.arima()暗示0差异的事实通常表明没有明显的趋势。

  2. arima()的帮助文件显示截距实际上是平均值。也就是说,AR(1)模型是(Y_t-c)= phi *(Y_ {t-1} -c)+ e_t而不是Y_t = c + phi * Y_ {t-1} + e_t 。

  3. auto.arima()使用单位根测试来确定所需差异的数量。因此,请检查单元根检测的结果,看看发生了什么。如果您认为单位根测试不会导致合理的模型,您可以随时在auto.arima()中指定所需的差异数。

这里有两个测试的结果,为您的数据:

R> adf.test(x) 

     Augmented Dickey-Fuller Test 

data: x 
Dickey-Fuller = -1.031, Lag order = 3, p-value = 0.9249 
alternative hypothesis: stationary 

R> kpss.test(x) 

     KPSS Test for Level Stationarity 

data: x 
KPSS Level = 0.3491, Truncation lag parameter = 1, p-value = 0.09909 

所以ADF强说,非稳定的(在这种情况下的零假设),而KPSS并不完全拒绝平稳(该测试的无效假设)。 auto.arima()默认使用后者。如果你想进行第一次测试,你可以使用auto.arima(x,test =“adf”)。在这种情况下,它建议了具有趋势的模型ARIMA(0,2,1)。

+1

感谢Hyndman教授的详细评论。 – 2010-05-03 15:18:11

+0

Hyndman教授,有没有办法确定一个系列是I(2)还是需要两次差分才能使它静止?如果系列差异一次或两次,进一步分析的结果会有所不同。你的帖子建议使用KPSS,但有没有其他的选择?谢谢。 – Anusha 2014-09-24 19:32:23