ARIMA-GARCH模型对央行汇率的实证研究(R)

GARCH模型:

ARIMA-GARCH模型对央行汇率的实证研究(R)

GARCH模型要求时间序列的残差为零均值、异方差的纯随机序列,但是有时不能充分提取序列的相关信息,即不是纯随机性序列;另外,原序列可能是非平稳序列。对于这种情况,需要将原始序列变为平稳序列,对拟合自回归模型,即构造ARIMA模型,再考察残差序列的方差齐性,如果是异方差残差序列,最后构造GARCH模型,这便是ARIMA-GARCH模型。

时序图:

ARIMA-GARCH模型对央行汇率的实证研究(R)

样本数据有明显的趋势特征,对数据分别进行白噪声检验和单位根平稳性(ADF)检验,样本数据为非平稳非白噪声数据,需要对数据进行差分处理,消除数据的趋势特征,然后对样本数据再作进一步分析。

差分后的时序图:

ARIMA-GARCH模型对央行汇率的实证研究(R)

从时序图中可以看出差分后的样本数据趋势消除,且存在集群效应和不可逆性。

ACF图和PACF图:

ARIMA-GARCH模型对央行汇率的实证研究(R)

ARIMA-GARCH模型对央行汇率的实证研究(R)

 

对样本数据分别建立ARIMA(0,1,1)模型、ARIMA(1,1,1)模型和ARIMA(1,1,0)模型,从拟合后的AIC来看,ARIMA(1,1,0)模型对差分后的时间序列数据拟合较好。

对拟合后的残差作白噪声检验,残差为白噪声,说明ARIMA(1,1,0)模型已充分提取了时间序列的水平信息。

平稳性检验:

为避免出现伪回归的情况,对ARIMA(1,1,0)模型的残差进行平稳性检验,残差是平稳的。

正态性检验:

分布直方图:

 

ARIMA-GARCH模型对央行汇率的实证研究(R)

残差呈现尖峰后尾分布且具有不对称性,初步判断残差为非正态分布,但是这只是直观上的判断,需要进一步的检验。

对残差分别进行Shapiro-Wilk检验、Anderson-Darling检验和Kolmogorov-Smirnov检验,可以判断残差不服从正态分布。

ARCH效应检验:

分别进行Portmanteau Q检验和LM检验(拉格朗日乘子检验),LM检验和Q检验都显示残差序列方差非齐性,且残差平方序列具有显著的长期自相关关系。

 

构造GARCH(1,1)模型:

综合水平模型和波动模型,完整的ARIMA-GARCH模型为:

ARIMA-GARCH模型对央行汇率的实证研究(R)

对模型的参数进行正态性检验,画出QQ图,残差服从正态分布。

模型预测:

根据ARIMA(1,1,0)模型对未来时间序列的预测:

ARIMA-GARCH模型对央行汇率的实证研究(R)

根据GARCH(1,1)模型对时间序列的拟合,置信区间为95%:

ARIMA-GARCH模型对央行汇率的实证研究(R)

 

R语言代码:

 

library(TSA)

library(tseries)

library(fUnitRoots)

library(locfit)

library(forecast)

library(nortest)

library(stats19)

library(FinTS)

library(zoo)

 

 

##读取文件

Time<-read.table("E:/时间序列论文/外汇.csv",sep=",",header=T)

##时序图

rate<-ts(Time$rate,start=c(2005,11),end=c(2019,11),frequency=12)

plot(rate)

##ADF检验

for(i in 1:3) print(adfTest(rate,lag=i,type="c"))

##白噪声检验

for(i in 1:2) print(Box.test(rate,lag=6*i))

##差分

rate_diff<-diff(rate)

plot(rate_diff)

##ACF图和PACF图

acf(rate_diff)

pacf(rate_diff)

##ARIMA(0,1,1)

rate.fit1<-arima(rate,order=c(0,1,1))

rate.fit1

##ARIMA(1,1,1)

rate.fit2<-arima(rate,order=c(1,1,1))

rate.fit2

## ARIMA(1,1,0)

rate.fit3<-arima(rate,order=c(1,1,0))

rate.fit3

##白噪声检验

for(i in 1:6) print(Box.test(rate.fit3$residual,type="Ljung-Box",lag=i))

##预测

rate.fore3<-forecast(rate,model=rate.fit3)

plot(rate.fore3)

##平稳性检验

for(i in 1:3) print(adfTest(rate.fit3$residual,lag=i,type="c"))

hist(rate.fit3$residual)

##正态性检验

shapiro.test(rate.fit3$residual)

ad.test(rate.fit3$residual)

ks.test(rate.fit3$residual,pnorm)

##ARCH效应检验

for(i in 1:6)print(Box.test(rate.fit3$residual^2,type="Ljung-Box",lag=i))

for(i in 1:5)print(ArchTest(rate.fit3$residual,lag=i))

##GARCH模型

rate.fit<-garch(rate.fit3$residual,order=c(1,1))

summary(rate.fit)

##置信区间

rate.pred<-predict(rate.fit)

plot(rate.pred)

##QQ图

qqnorm(rate.fit$residual)

qqline(rate.fit$residual)