当我开始使用 ARIMA 模型进行预测时,我试图了解如何改进基于 ARIMA 的预测以适应季节性和漂移。
我的数据是以下时间序列(超过 3 年,具有明显的上升趋势和明显的季节性,这似乎不受滞后 12、24、36 时的自相关的支持??)。
> bal2sum3years.ts
Jan Feb Mar Apr May Jun Jul Aug
2010 2540346 2139440 2218652 2176167 2287778 1861061 2000102 2560729
2011 3119573 2704986 2594432 2362869 2509506 2434504 2680088 2689888
2012 3619060 3204588 2800260 2973428 2737696 2744716 3043868 2867416
Sep Oct Nov Dec
2010 2232261 2394644 2468479 2816287
2011 2480940 2699780 2760268 3206372
2012 2951516 3119176 3032960 3738256
建议的模型auto.arima(bal2sum3years.ts)
给了我以下模型:
Series: bal2sum3years.ts
ARIMA(0,0,0)(0,1,0)[12] with drift
Coefficients:
drift
31725.567
s.e. 2651.693
sigma^2 estimated as 2.43e+10: log likelihood=-321.02
AIC=646.04 AICc=646.61 BIC=648.39
但是,acf(bal2sum3years.ts,max.lag=35)
没有显示出高于 0.3 的 acf 系数。然而,数据的季节性非常明显——每年年初都会出现峰值。这是该系列在图表上的样子:
fit=Arima(bal2sum3years.ts,seasonal=list(order=c(0,1,0),period=12),include.drift=TRUE)
使用函数调用的预测forecast(fit)
导致未来 12 个月的平均值等于数据的最后 12 个月加上常数。这可以通过调用来查看plot(forecast(fit))
,
我还检查了残差,它们不是自相关但具有正平均值(非零)。
在我看来,拟合不能精确地模拟原始时间序列(蓝色是原始时间序列,红色是fitted(fit)
:
问题是,模型不正确吗?我错过了什么吗?如何改进模型?似乎该模型实际上需要过去 12 个月,并添加一个常数来实现接下来的 12 个月。
我是时间序列预测模型和统计的相对初学者。