我试图向自己解释将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(预测包)和ARIMA(1,0,1)模型的数据的最佳ARIMA。
(2)ARIMA(1,0,0)模型的截距值为12260.298。截距不应满足等式:C = mean *(1 - sum(AR coeffs)),在这种情况下,该值应为715.52。我必须在这里遗漏一些基本的东西。
(3)这显然是一个非平稳的系列。为什么AR(2)模型仍被auto.arima选为最佳模型?可以有一个直观的解释吗?
感谢。
答案 0 :(得分:23)
没有ARIMA(p,0,q)模型将允许趋势,因为模型是静止的。如果您真的想要包含趋势,请使用带有漂移项的ARIMA(p,1,q)或ARIMA(p,2,q)。 auto.arima()建议0差异的事实通常表明没有明显的趋势。
arima()的帮助文件显示拦截实际上是平均值。也就是说,AR(1)模型是(Y_t-c)= phi *(Y_ {t-1} - c)+ e_t而不是Y_t = c + phi * Y_ {t-1} + e_t,正如您所料
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)模型确实有一个趋势。