ARIMA模型预测解释

15

我正在努力向自己解释将ARIMA模型应用于时间序列数据集的预测结果。数据来自M1-Competition,系列是MNB65。我正在尝试将数据拟合到ARIMA(1,0,0)模型并获取预测结果。我正在使用R语言。这里是一些输出片段:

> 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) 如何解释虽然数据集显示明显的下降趋势,但此模型的预测趋势却上升?这在ARIMA(2,0,0)中也是如此,它是使用 auto.arima(forecast包)为数据选出的最佳ARIMA拟合模型,并且在ARIMA(1,0,1)模型中也出现了此情况。

(2) ARIMA(1,0,0)模型的截距值为12260.298。按照公式C = mean * (1 - sum(AR coeffs)),截距应该为715.52,这里可能漏掉了一些基础知识。

(3) 显然,这是一个具有非平稳均值的时间序列,为什么auto.arima还是选择了AR(2)模型作为最佳模型?这可能有一个直观的解释吗?

谢谢。


1
我已经投票关闭该问题,因为它不是一个编程问题。 - High Performance Mark
1个回答

26
  1. 由于ARIMA(p,0,q)模型是平稳的,所以不允许包含趋势。如果您真的想包括趋势,请使用带漂移项的ARIMA(p,1,q)或ARIMA(p,2,q)。auto.arima()建议使用0阶差分通常表示没有明显的趋势。

  2. arima()的帮助文件显示截距实际上是均值。也就是说,AR(1)模型是 (Y_t-c) = ϕ(Y_{t-1} - c) + e_t 而不是 Y_t = c + ϕ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)模型,该模型具有趋势。


Hyndman教授,有没有一种方法可以确定一个系列是I(2)或需要两次差分才能使其平稳?如果系列被差分一次或两次,则进一步分析的结果将会有所不同。您的帖子建议使用KPSS,但是否有其他选择?谢谢。 - Anusha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接