ARIMA模型可以对具有季节效应的序列建模,根据季节效应提取的难易程度可以分为简单季节模型与乘积季节模型。
简单季节模型
简单季节模型是指序列中的季节效应和其他效应之间是加法关系,即
简单季节模型实际上就是通过趋势差分、季节差分将序列转化为平稳序列,具体分为三步:
- 第一步:通过简单的低阶差分将趋势信息提取成分;
- 第二步:通过简单的周期步长差分将序列中的季节信息提取充分;
- 第三步:提取完季节信息和趋势信息之后的残差序列就是一个平稳序列,再用ARMA模型拟合。
R语言中用arima函数中的seasonal选项拟合季节模型,相关命令如下 :
arima(x,order=,include.mean=,method=,transform.pars=,fixed=,seasonal=)
-x:要进行模型拟合的序列命。
-order:指定模型阶数。
-include.mean:指定是否需要拟合常数项。
-method:指定参数估计方法。
-transform.pars:指定是否需要人为干预参数。
-fixed:对疏系数模型指定疏系数的位置。
-seasonal:指定季节模型的阶数与季节周期,该选项的命令格式为:
seasonal = list(order=c(P,D,Q),period = pi)
(1)加法模型:P=0,Q=0
(2)乘法模型:P,Q不全为零
例如:拟合1962—1991年德国工人季度失业率序列
d<-read.table("unemployment_rate.txt",header=F)
x<-ts(d,start=c(1962,1),frequency=4)
plot(x)
a<-decompose(x)
plot(a)
具有趋势性和周期性
x.dif<-diff(diff(x),4) ###作4步1阶差分,1阶差分提取趋势信息,步差分提取周期信息
plot(x.dif) ###差分后序列平稳
acf(x.dif) ###拖尾
pacf(x.dif) ###4阶后截尾
###拟合加法季节模型
x.fit<-arima(x,order=c(4,1,0),seasonal=list(order=c(0,1,0),period=4),
transform.pars=F,fixed=c(NA,0,0,NA))
x.fit
for(i in 1:2) print(Box.test(x.fit$residual,lag=2*i)) ###白噪声检验
模型预测
x.fore<-forecast(x.fit,h=12) ###预测3年
x.fore
乘积季节模型
在实际中存在一种更为常见的情况是:序列的季节效应、长期趋势效应和随机波动之间存在复杂的交互影响关系,简单的ARIMA模型并不足以提取其中的相关关系,这时通常需要采用乘积季节模型。
例如:拟合1948-1981年美国女性月度失业率序列
a<-read.table("unemployment.txt",header=F)
x<-ts(a,start=c(1948,1),frequency=12)
plot(x)#绘制时序图
b<-decompose(x)
plot(b) #####既有趋势又有周期
x.dif<-diff(diff(x),12)
plot(x.dif) ####呈现出平稳特征
acf(x.dif) ###拖尾
pacf(x.dif) ###拖尾
由此拟合ARIMA(1,(1, ,12),1)模型
x.fit<-arima(x,order=c(1,1,1),seasonal=list(order=c(0,1,0),period=12))
x.fit
模型拟合不理想,关键是加法季节模型不适合拟合此序列,需考虑乘积季节模型
考虑拟合ARIMA(1,1,1)*ARMA(0,1,1)
x.fit2<-arima(x,order=c(1,1,1),seasonal=list(order=c(0,1,1),period=12))
x.fit2
for(i in 1:2) print(Box.test(x.fit2$residual,lag=6*i))
残差序列白噪声检验显示,该拟合模型显著成立。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。