用。
4、ARIMA时间序列模型的框架与应用
到此,本文快速介绍了时间序列模型的基础概念、使用R探索时间序列和ARMA模型。现在我们将这些零散的东西组织起来,做一件很有趣的事情。
框架
下图的框架展示了如何一步一步的“做一个时间序列分析”
前三步我们在前文意见讨论了。尽管如此,这里还是需要简单说明一下:
第一步:时间序列可视化
在构建任何类型的时间序列模型之前,分析其趋势是至关重要的。我们感兴趣的细节包括序列中的各种趋势、周期\季节性或者随机行为。在本文的第二部分已经介绍了。
第二步:序列平稳
一旦我们知道了模式、趋势、周期。我们就可以检查序列是否平稳。Dicky-Fuller是一种很流行的检验方式。在第一部分意见介绍了这种检验方式。在这里还没有结束!如果发现序列是非平稳序列怎么办?
这里有三种比较常用的技术来让一个时间序列平稳。
1 消除趋势:这里我们简单的删除时间序列中的趋势成分。例如,我的时间序列的方程是:
x(t) = (mean + trend * t) + error
这里我简单的删除上述公式中的trend*t部分,建立x(t)=mean+error模型
2 差分:这个技术常常用来消除非平稳性。这里我们是对序列的差分的结果建立模型而不是真正的序列。例如:
x(t) – x(t-1) = ARMA (p , q)
这个差分也是ARIMA的部分。现在我们有3个参数了:
p : AR
d : I
q : MA
3 季节性:季节性直接被纳入ARIMA模型中。下面的应用部分我们再讨论这个。
第三步:找到最优参数
参数p,q可以使用ACF和PACF图发现。除了这种方法,如果相关系数ACF和偏相关系数PACF逐渐减小,这表明我们需要进行时间序列平稳并引入d参数。
第四步:简历ARIMA模型
找到了这些参数,我们现在就可以尝试简历ARIMA模型了。从上一步找到的值可能只是一个近似估计的值,我们需要探索更多(p,d,q)的组合。最小的BIC和AIC的模型参数才是我们要的。我们也可以尝试一些季节性成分。在这里,在ACF/PACF图中我们会注意到一些季节性的东西。
第五步:预测
到这步,我们就有了ARIMA模型,我们现在就可以做预测了。我们也可以将这种趋势可视化,进行交叉验证。
时间序列模型的应用。
这里我们用前面的例子。使用这个时间序列做预测。我们建议你在进行下一步之前,先观察这个数据。
我们从哪里开始呢?
下图是这些年的乘客数的图。在往下看之前,观察这个图。
这里是我的观察:
1. 乘客有着逐年增加的趋势。
2. 这看起来有季节性,每一个周期不超过12个月。
3. 数据的方差逐年增加。
在我们进行平稳性测试之前我们需要解决两个问题。第一,我们需要消除方差不齐。这里我们对这个序列做求对数。第二我们需要解决序列的趋势性。我们通过对时序序列做差分。现在,我们来检验最终序列的平稳性。
adf.test(diff(log(AirPassengers)), alternative="stationary", k=0)
#这里可能会显示没有这个函数,需要安装一下.install.packages("tseries")
#加在这个包,library(tseries)
Augmented Dickey-Fuller Test
data: diff(log(AirPassengers))
Dickey-Fuller = -9.6003, Lag order = 0,
p-value = 0.01
alternative hypothesis: stationary
我们可以看出这个序列是足够平稳做任何时间序列模型。
下一步就是找到ARIMA模型的正确的参数。我们意见知道’d‘是1,因此我们需要做1差分让序列平稳。这里我们绘制出相关图。下面就是这个序列的ACF图。
#ACF Plots
acf(log(AirPassengers))
从上述表格可以看出什么?
很显然ACF下降的十分的慢,这就意味着乘客的数量并不是平稳的。我们在前面已经讨论了,我们现状准备在序列去对数后的差分上做回归,而不是直接在序列去对数后的数据熵差分。让我们看一下差分后的ACF和PACF曲线吧。
acf(diff(log(AirPassengers)))
pacf(diff(log(AirPassengers)))
显然ACF截止与第一个滞后,因此我们知道p的值应该是0.而q的值应该是1或者2.几次迭代以后,我们发现(p,d,q)取(0,1,1)时,AIC和BIC最小。
(fit <- arima(log(AirPassengers), c(0, 1, 1),seasonal = list(order = c(0, 1, 1), period = 12)))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,2.718^pred$pred, log = "y", lty = c(1,3))
参考资料
A Complete Tutorial on Time Series Modeling in R
时间序列
第八章时间序列分析