上个月老板让我做了knowledge sharing来给同事们介绍下ARIMA模型的一些基础知识,反响还不错,所以在这边也分享一下好啦。
本文会涉及到如下话题:
AR, MA, ARMA和ARIMA四个模型的
2. 适用性
3. 数据处理的方式
4. R中代码
5. 怎么做预测
6. 怎么根据ACF/PACF图来选择最优模型等
之前介绍过ARIMA模型在R中的运用:
本篇文章算是一个‘前传’吧:介绍一下ARIMA的由来和一些基本概念。
写在前面:
2. 本文中使用的数据均为astsa 包中自带,直接使用即可
1.1 模型概念及公式
AR(p): auto regressive自回归模型
是指时间序列变量本身的自回归 - 这一期与前一期的关系 Xt=β*Xt1+Wt
MA(q):moving average 移动平均模型
是指移动白噪声的移动平均 Wt=β*Wt1
ARMA(p,q):是自回归模型和移动平均模型的结合(公式见下图)
其中:p是自回归的参数, q是white noise的correlated errors参数
1.2 适用性: AR, MA, ARMA三个模型均只可用于稳定性数据
这个很重要!! 来跟我读三遍:
AR, MA, ARMA三个模型均只可用于稳定性数据!
AR, MA, ARMA三个模型均只可用于稳定性数据!
AR, MA, ARMA三个模型均只可用于稳定性数据!
所谓的稳定性数据需满足:1) 均值不随时间的变化而变化; 2)误差为白噪声
也许你会问了:那非稳定性数据怎么转化为稳定性数据呢?
咱们结合图来看下非稳定性数据的类别及如何转化为稳定性数据:
第一类:递增或递减的稳定性数据
这类数据的转变:取一阶差值diff(x)即可
第二类:随机游走数据
这类数据的转变:也是取一阶差值diff(x)即可
第三类:数据有递增或递减趋势,且误差随时间变化
类数据的转变:取log(x), 是误差变稳定,再取一阶差值diff(log(x))进行detrend
1.3 AR, MA, ARMA自制数据
如果你想拿数据来实操一下,这边介绍一下怎么在R中构造AR,MA和ARMA模型,基本code如下:
举两个具体例子:如何建造AR(2)模型和ARMA(1,1)模型
1.4 ACF/PACF图
这两个图是用于看你的数据应当适用那种模型,R中代码为:
acf2(x)下表是我总结的两图不同情况适用模型的区别:
简单总结就是:
ACF图决定q, PACF图决定p
两图中若只有一图cut off, 则若ACF cut off, q有值,是MA(q) 模型,若PACF cut off, p有值,是 AR(p)模型。p 和q具体的值就由cut off 超过95% confidence interval(即图中的两条横线)竖线数的量决定。这么说可能比较抽象,举个栗子来看:上图中,PACF是cut off, 则确定是AR(p)模型,而图中有两条竖线超过了95% confidence interval,则p = 2
若ACF和PACF都是tail off, 则确认是ARMA(p,q)模型, 但是p,q具体的值是无法由两图确定的,所以先从ARMA(1,1)开始试,看AIC/BIC, 然后每次多加一个参数,看估值表(这个下文会讲到)中新加的参数是否是显著的(看p- value)。
1.5 估值表(estimation table)
用以看模型的具体参数
1.6 如何选择最佳模型- 看AIC/BIC
当你手上有好几个不同模型参数,而不知道该选择哪个模型作为最优模型时,可使用AIC/BIC来判断,目的是找到最小的AIC/BIC。但很多情况下,AIC最小的模型,不代表BIC也会最小。但BIC倾向于选择参数更少的模型。
1.7 判断你选择的模型是否是最优模型 - residual analysis
Residuals analysis: 要确选择的模型的残差是白噪声, 若不是,则说明没找到最优模型。
具体怎么看呢?
做residual analysis会出四张图:
来看一组对比,分别是符合标准的residual和不符合标准的residual:
2. ARIMA 模型
前面提到过,AR, MA和ARMA模型仅能用于稳定性数据。对于非稳定性数据,可以手动转化成稳定数据,再使用AR, MA和ARMA模型, 也可以直接在不稳定数据上使用ARIMA(p,d,q) 模型,其中多出来的‘d’是‘difference’的意识,即对原数据进行差分。
2.1 使用模型进行预测
ARIMA的基础内容和之前是一样的,无非是多了一个差分的过程,模型预测code:
sarima(data, n.ahead = X, p,d,q)其中n.ahead = X意思是往前预测X期
2.2 季节性ARIMA - SARIMA
季节性ARIMA是指在ARIMA的基础上,加入季节性规律
Xt=.9Xt12+Wt+.5Wt12
SARMA(P = 1, Q = 1)S = 12
模型预测code:
sarima(data, p,d,q, P,D,Q, seasonal_lag)大家看完别忘了点个赞哟,发现收藏量是点赞量的20倍~ 赞多了能鼓励我分享更多相关文章,大家之后也能看到更多有用的内容啦。
本文是个比较偏入门的介绍,其他关于时间序列方面的分享,可以关注下专栏: