0. 数据导入
数据来源:我的github——时间序列课件
rm(list = ls())
data <- read.table("./数据/m2.txt", header = TRUE, fileEncoding = 'utf-8')
m = data[,2]
M2 <- ts(m, start = c(1999, 12), frequency = 12)
plot(M2, type = "l")
通过看时序图可以发现,轨迹不符合趋势平稳或趋势非平稳序列的典型特征,因此无需在单位根检验模型中包含时间趋势项,可以从只包含截距项的模型入手,进行ADF单位根检验。
1. 单位根检验
判断序列的平稳性,采用只包含截距项的模型来对M2同比增长序列进行ADF检验。
(1)初步ADF检验:根据BIC信息判断准则,来确定模型的恰当的滞后期。
library(urca)
urdf <- ur.df(m, type = "drift", lags = 13, selectlags = "BIC")
summary(urdf)
恰当滞后期为3期。
(2)固定滞后阶数的ADF单位根检验:
urdf1 <- ur.df(m, type = "drift", lags = 3, selectlags = "Fixed")
summary(urdf1)
DF统计量为-2.8331,小于10%临界值-2.57,因此拒绝序列存在单位根的原假设。
2.ARMA模型识别
查看序列自相关/偏自相关图:
acf(m) # 自相关
pacf(m) # 偏自相关
3. ARMA模型估计
构建一个ARMA((1,2,4),(12))模型,也可以记作:
mean<-arima(m, order=c(4,0,0),seasonal = list(order=c(0,0,1),period=12),
fixed=c(NA,NA,0,NA,NA,NA),transform.pars = FALSE)
mean
得到估计结果:
4. ARMA模型的诊断检验
tsdiag(mean)
得到残差的诊断检验结构:
结果表明:模型的残差不存在序列相关性。
5. ARCH效应的LM检验
序列时序图中具有明显的波动聚集特性,因此还需进一步检验异方差性。
library(FinTS)
mean_res<-resid(mean)
ArchTest(mean_res, lags=2)
拒绝模型的残差序列不存在异方差性的原假设。
6. 拟合GARCH模型
library(rugarch)
garchspec=ugarchspec(variance.model = list(model="sGARCH",garchOrder=c(1,1),submodel=NULL,
external.regressors=NULL,variance.targeting=FALSE),
mean.model = list(armaOrder=c(4,12),include.mean=T,archm=F,archpow=1,arfima=F,external.regressors=NULL,archex=F),
distribution.model = "norm",fixed.pars = list(ar3=0,ma1=0,ma2=0,ma3=0,ma4=0,ma5=0,ma6=0,ma7=0,ma8=0,ma9=0,ma10=0,ma11=0))
garchfit = ugarchfit(garchspec,data=m,solver = "solnp")
garchfit
得到GARCH(1,1)模型的估计结果。
该估计结果表明:估计系数具有显著性,并且满足GARCH模型关于参数非负和参数有界的限定条件。
7. 拟合EGARCG模型
egarchspec=ugarchspec(
variance.model = list(model="eGARCH",garchOrder=c(3,2),submodel=NULL,
external.regressors=NULL,variance.targeting=FALSE),
mean.model = list(armaOrder=c(4,12),include.mean=T,
archm=F,archpow=1,arfima=F,external.regressors=NULL,archex=F),
distribution.model = "norm",
fixed.pars = list(ar3=0,ma1=0,ma2=0,ma3=0,ma4=0,ma5=0,ma6=0,ma7=0,ma8=0,ma9=0,ma10=0,ma11=0,
alpha1=0,alpha2=0))
egarchfit = ugarchfit(egarchspec,data=m,solver = "lbfgs")
egarchfit