基于R语言的ARIMA模型
A
IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)以及ARIMA过程。其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。
通常的建立ARIMA模型需要以下几步:
1.数据的预处理。对时间序列数据的平稳性和纯随机性进行检验,根据检验结果来判断时间序列的类型,以便选择合适的方法建立模型。
平稳性是指围绕着一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显的上升或下降趋势或周期性,那它通常不是平稳序列。
三种常用的检验平稳性的方法:
(1)时序图。通过时序图来观察。一般而言,平稳序列始终在一个常数值附近随机波动,且波动范围有界;非平稳序列则有明显的趋势性或周期性。
(2)自相关与偏相关系数检验。在自相关图中,在那一阶数值高于虚线即表明自相关系数>0.5,就存在那一阶自相关(偏自相关一样)。随着滞后数(延迟期数)的增加,平稳序列自相关系数会很快衰减至0而非平稳序列衰减速度通常较慢。若自相关图呈现三角对称性则为单调趋势的非平稳序列。自相关系数长期位于零轴一边表示有单调趋势序列。自相关系数呈现明显正弦波动规律则表明有周期变化规律。
(3)单位根检验(ADF)。单位根检验是指检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列。若P值<0.05,为平稳
如果时间序列不平稳该怎么办?
(1)对数变换。对数变换主要是为了减小数据的振动幅度,使其线性规律更加明显,对数变换相当于增加了一个惩罚机制,数据越大其惩罚越大,数据越小惩罚越小。这里强调一下,变换的序列需要满足大于0,小于0的数据不存在对数变换。
(2)差分。k阶差分就是相距k期的两个序列值之间相减。若有季节趋势还可以进行k-4步差分,年度趋势则相应的K-12差分。
(3)平滑。
(4)分解,即将将时序数据分离成不同的成分。
纯随机性检验:
纯随机序列,又称白噪声序列,序列的各项数值之间没有任何相关关系,序列在进行完全无序的随机波动,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。若检验后P<0.05,说明不是白噪声序列。
2.对(处理后的)平稳数据进行建模。若某个时间序列数据经过预处理之后,被判定为平稳非白噪声序列,就可以进行时间序列建模。
3.对模型的检验、优化及应用。
###########################################################################################
案 例
###########################################################################################
数据来源SPSS Clementine 案例中关于男装生产线月销量,详细见Clementine中catalog_forecast.str 流。
步骤一:导入xlsx格式数据。
library(xlsx) #导入xlsx包
library(forecast)
library(tseries)
sale<-read.xlsx(“C:/pythonshu/shijian.xlsx”,1)#导入数据
步骤二:建立模型并检验。
saletimeseries<-ts(sale,frequency = 12,start =c(1989,1))#构造时间序列
plot.ts(saletimeseries)#时序图。分析时序图可以看出,该时间序列成明显的季节上升趋势,通过自相关和偏自相关检验也验证了这一观点。
adf.test(saletimeseries)#平稳性检验0.01,为平稳性数据
a1<-auto.arima(saletimeseries,trace = TRUE)#auto.arima自动定阶
a2<-arima(saletimeseries,order = c(0,0,0),seasonal = c(0,1,1))#建立模型
a3<-forecast.Arima(a2,h=12,level=c(99.5))#预测
plot(a3)
Box.test(a3$residuals)#0.2388<0.05残差非白噪声,说明可能还有信息没有提取出。
3:模型的优化。
选择利用1-12阶差分优化模型。差分后的数据依然平稳,但在1阶、12阶、24阶时可能存在自相关,且认为是偶然因素造成。
diff1<-diff(saletimeseries,1)
adf.test(diff1)#p<0.01,平稳
acf(diff1,lag.max = 24)
Box.test(diff1)#3.511e-06<0.05,为平稳非白噪声
a4<-auto.arima(diff1,trace = TRUE)#定阶,
a5<-arima(saletimeseries,order = c(5,0,0),seasonal = c(1,1,0))#建立模型
a6<-forecast.Arima(a5,h=12,level=c(99.5))#对后12期进行预测。#设置预测期数h与置信度水平
plot(a6)
Box.test(a6$residuals)#P=0.5866>0.05,残差序列为白噪声,说明建模成功。
对后12期的预测数据如下表所示。
转自:http://www.shujudata.top/基于r语言的arima模型/