logo资料库

garch模型测度波动率与r语言代码展示.docx

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
时间序列第二次作业 一.数据介绍 本次数据与第一次作业数据相同,所以时间序列的水平信息的提取在本次作 业中不再进行分析,而是提取 arima 模型拟合后的残差,对其建立 garch 模型, 对这部分进行分析。 二.代码及备注 #设置工作目录# setwd("E:/Rstuff") library(zoo) #加载 zoo 包# library(forecast) #加载 forecast 包# #加载 tseries 包# library(tseries) library(mclust) #加载 mclust 包# #加载 lmtest 包# library(lmtest) library(FinTS) #加载 FinTS 包# work=read.table(file="work.txt",header=T,sep=" ") #读入数据# work=ts(work,frequency=12,start=c(1985,1)) #将读入数据生成为时间序列# plot(work) #绘制时间序列图# acf(work) pacf(work) #绘制时间序列偏自相关图# work1=diff(work,lag=12) #对原始序列进行 12 步差分# plot(work1) #绘制差分后序列的时序图# Box.test(work1) #检验差分后的时间序列是否为平稳序列# acf(work1,36) pacf(work1,36) #绘制差分后的时间序列偏自相关图# fit=arima(work,order=c(1,1,1),seasonal=list(order=c(0,1,1), period =12), include.mean=T,method="CSS",transform.pars=T) #建立模型# for(i in 1:6){ print(Box.test(fit$residual,type="Ljung-Box",lag=i)) #绘制差分后的时间序列自相关图# #绘制时间序列自相关图# } #对残差序列进行延迟 1-6 阶白噪声检验# #检验是否存在异方差# RE=fit$residuals #提取残差# plot(RE) #绘残差图# for(i in 1:6)print(ArchTest(RE,lag=i)) dwtest(RE~1) P=NULL Q=NULL AIC=NULL for(p in 0:2){ #定义空变量用于存储 p 值# #定义空变量用于存储 q 值# #定义空变量用于存储 aic 值# #检验是否存在短期自相关# for(q in 1:2){ fit=garch(RE,order=c(p,q)); aic=AIC(fit); P=c(P,p); Q=c(Q,q);
for(p in 1:2){ fit=garch(RE,order=c(p,0)); aic=AIC(fit); P=c(P,p); Q=c(Q,0); AIC=c(AIC,aic); } } AIC=c(AIC,aic); } #显示 aic 最小的行# #显示全部 p,q,aic# #将最小 aic 的 p 值提取# #将最小 aic 的 q 值提取# L=cbind(P,Q,AIC) ORDER=order(AIC) k=ORDER[1] L[k,] L p=L[k,1] q=L[k,2] fit.garch=garch(RE,order=c(p,q)) fit.pred<-predict(fit.garch) plot(fit.pred) plot(RE) #绘制残差预测值各点的置信区间上限# lines(fit.pred[,1],col=2) #绘制残差预测值各点的置信区间下限# lines(fit.pred[,2],col=2) abline(h=1.96*sd(RE),col=4) #绘制 RE 序列均值 95%置信区间上限# abline(h=-1.96*sd(RE),col=4) #绘制 RE 序列均值 95%置信区间下限# #绘制残差拟合期预测图# #绘制原始序列残差图# #建立 aic 最小模型# #对拟合期进行预测#
三.分析过程 本次数据与第一次作业数据相同,所以时间序列的水平信息在本次作业中不 再进行分析,而是提取其残差,对其建立 garch 模型。 for(i in 1:6){ print(Box.test(fit$residual,type="Ljung-Box",lag=i)) } 对残差序列进行延迟 1-6 阶白噪声检验 分析:p 值均很大,拒绝原假设,即认为残差序列为白噪声序列。
RE=fit$residuals 提取残差 plot(RE) 绘残差图 0 2 0 1 0 0 1 - E R 1986 1988 1990 1992 1994 1996 Time 分析:残差图显示为平稳序列,但波动很大,此序列可能有异方差。
for(i in 1:6)print(ArchTest(RE,lag=i)) 检验是否存在异方差 分析:p 值均比较小,前五个都小于 0.05,第六个稍比 0.05 大,所以在 95% 的置信水平下,拒绝原假设,即认为残差序列存在异方差。 dwtest(RE~1) 用 D-W 检验检验是否存在短期自相关 分析:p 值较大,大于 0.05,所以在所以在 95%的置信水平下,拒绝原假设, 即认为不存在自相关。
P=NULL 定义空变量用于存储 p 值 Q=NULL 定义空变量用于存储 q 值 AIC=NULL 定义空变量用于存储 aic 值 for(p in 0:2){ for(q in 1:2){ fit=garch(RE,order=c(p,q)); aic=AIC(fit); P=c(P,p); Q=c(Q,q); AIC=c(AIC,aic); } } for(p in 1:2){ fit=garch(RE,order=c(p,0)); aic=AIC(fit); P=c(P,p); Q=c(Q,0); AIC=c(AIC,aic); } 利用循环建立参数分别为(0,1)、(0,2)、(1,0)、(1,1)、(1,2)、(2,0)、(2,1)、(2,2)的 garch 模型 L=cbind(P,Q,AIC) 将所有的 p,q,aic 一一对应合成数据框 ORDER=order(AIC) 将 AIC 中的数由小到大输出所在位置赋给 ORDER k=ORDER[1] 最小 aic 所在位置赋给 k L[k,] 显示 aic 最小的行 分析:输出结果显示 aic 最小对应的参数为(p,q)=(0,2)。
L 显示全部 p,q,aic 分析:从结果可以看出参数为(p,q)=(0,2)是的 aic 确实最小。 p=L[k,1] 将最小 aic 的 p 值提取 q=L[k,2] 将最小 aic 的 q 值提取 fit.garch=garch(RE,order=c(p,q)) 建立使得 aic 最小的模型 fit.garch 输出模型 对拟合期进行预测 plot(fit.pred) 绘制拟合期预测图 fit.pred 1 s e i r e S 2 s e i r e S 0 1 9 8 7 6 6 - 7 - 8 - 9 - 0 1 - 1986 1988 1990 1992 1994 1996 Time
plot(RE) 绘制原始序列残差图 lines(fit.pred[,1],col=2) 绘制残差预测值各点的置信区间上限 lines(fit.pred[,2],col=2) 绘制残差预测值各点的置信区间下限 abline(h=1.96*sd(RE),col=4) 绘制残差预测均值 95%置信区间上限 abline(h=-1.96*sd(RE),col=4) 绘制残差预测均值 95%置信区间下限 0 2 0 1 0 0 1 - E R 1986 1988 1990 1992 1994 1996 Time 分析:从图中可以看出,拟合的效果并不好。这种情况可能是由于残差序列 向上幅度和向下幅度不同导致的,从残差图中可以看出 1987 年-1990 年向上振 幅明显大于向下振幅,而 1990 年-1993 年间向下振幅明显大于向上振幅,1996 年前后的向上振幅也明显大于向下的振幅,偏离均值幅度较大的地方都是原始序 列峰值处,说明 arima 模型对原始序列峰值处拟合的并不好,事实上 arima 模型 对原始序列峰值处拟合的确实不好。 我猜想可以拟合诸多效果不是太好的 arima 模型,使得残差呈现符合可以用 garch 拟合的序列,由于时间问题并没进行探索。也用 garch 衍生模型对残差序 列进行了拟合,但很多输出结果都看不懂。结果在下页。
分享到:
收藏