首页 > 其他分享 >R 语言GJR-GARCH、GARCH-t、GARCH-ged分析金融数据波动性预测、检验、可视化

R 语言GJR-GARCH、GARCH-t、GARCH-ged分析金融数据波动性预测、检验、可视化

时间:2024-08-14 19:18:06浏览次数:6  
标签:fit ## 模型 GJR 检验 yield GARCH ged

全文链接:https://tecdat.cn/?p=37354

原文出处:拓端数据部落公众号 

在当今复杂多变的金融市场中,准确理解和预测股票指数的走势对于投资者和金融机构而言至关重要。GARCH 模型作为一种有效的工具,能够捕捉金融时间序列数据中的波动聚集性和异方差性,为我们提供更深入的市场洞察。 准确预测股票指数的波动对于实现稳健的投资回报至关重要。本研究中所提供的代码和分析文章,为投资者和研究者提供了一种强大且实用的工具,能够直接应用于投资决策、风险评估以及交易策略的制定。

本研究旨在对股票指数数据进行全面而深入的分析,通过读取、处理和拟合 GARCH 模型,来揭示数据中的潜在规律和趋势,并进行预测和评估。我们首先读取并合并了相关的股票指数数据,经过一系列的处理和转换,为后续的分析做好准备。然后,运用多种方法拟合 GARCH 模型,并进行了严格的检验和评估,包括模型的稳定性、残差的分布、预测效果等方面。通过这些步骤,我们期望能够为金融领域的研究和实践提供有价值的参考和决策依据。

数据读取

通过 library(data.table) 加载所需库后,运用以下代码读取两个股票指数数据。

并将其转换为 data.table 格式以便后续高效处理:

 
  1.   HSI=as.data.table(HSI)
  2.   SSECI=as.data.table(SSECI)
 

数据合并与转换

依据 Date 列将上述两个数据集合并:

data=merge(HSI,SSECI,by = "Date")

同样将合并后的数据转换为 data.table 格式:

data=as.data.table(data)

展示合并后数据的前几行,以初步了解数据概况:

head(data)

数据选择与进一步处理

仅选取 Close.x 和 Close.y 列用于后续分析:

data=data[,c("Close.x", "Close.y")]

加载 rugarch 库为后续分析做准备:

library(rugarch)

将数据转换为数据框格式,并将各列转换为数值型,此过程中出现了强制类型转换产生 NA 值的警告:

 
  1.   yield<-as.data.frame(data)
  2.   for(i in 1:ncol(yield))yield[,i]=as.numeric(as.character(yield[,i]))
 

计算收益率:

 
  1.   yield[,1] =c(NA,diff(yield[,1] )/yield[,1][-length(yield[,1] )])
  2.   yield[,2] =c(NA,diff(yield[,2] )/yield[,2][-length(yield[,2] )])
 

再次将数据转换为 data.table 格式:

yield=as.data.table(yield)

最后,使用 ts.plot 函数绘制时间序列图进行初步的可视化分析:

ts.plot(yield,col=1:2)

数据统计描述

首先,对收益率数据 yield 进行统计概括:

 
  1.   summary(yield)
  2.    
  3.   ## Close.x Close.y
  4.   ## Min. :-0.12700 Min. :-0.088406
  5.   ## 1st Qu.:-0.00681 1st Qu.:-0.006785
  6.   ## Median : 0.00036 Median : 0.000351
  7.   ## Mean : 0.00018 Mean : 0.000324
  8.   ## 3rd Qu.: 0.00751 3rd Qu.: 0.007739
  9.   ## Max. : 0.14347 Max. : 0.098570
  10.   ## NA's :131 NA's :4
 

方差计算与数据处理

计算数据的方差,并剔除其中的缺失值:

 
  1.   var(yield)
  2.   yield=na.omit(yield)
 

GARCH 模型拟合与分析

分别使用不同的方法进行 GARCH(1,1) 模型的拟合:

 
  1.   # GARCH(1,1)-norm
  2.   garch_norm<-garchFit(yield~ garch(1, 1),trace=FALSE)
  3.   garch_norm
  4.    
  5.   # 另一种方法
  6.   spec<-ugarchspec(variance.model=list(garchOrder=c(1,1)),
  7.   mean.model=list(armaOrder=c(0,0)))
  8.   fit <- ugarchfit(spec = spec, data = yield)
  9.   fit
 

模型检验与评估

对拟合的模型进行多种检验和评估,包括:

 
  1.   # 信息准则
  2.   # 加权 Ljung-Box 检验
  3.   # 加权 ARCH LM 检验
  4.   # Nyblom 稳定性检验
  5.   # 符号偏差检验
  6.   # 调整的皮尔逊拟合优度检验
 

预测

进行预测并展示预测结果:

通过以上步骤,完成了对股票指数收益率数据的全面分析和预测。

GARCH 模型拟合

首先,使用 garchFit 函数进行 GARCH(1, 1) 模型的拟合,针对 yield[, 2] 数据:

 
  1.   garch_norm<-garchFit(yield[,2]~ garch(1, 1),trace=FALSE)
  2.   garch_norm
  3.    
  4.   ##
  5.   ## Title:
  6.   ## GARCH Modelling
  7.   ##
  8.   ## Call:
  9.   ## garchFit(formula = yield[, 2] ~ garch(1, 1), trace = FALSE)
  10.   ##
  11.   ## Mean and Variance Equation:
  12.   ## data ~ garch(1, 1)
  13.   ## <environment: 0x000000001d965b48>
  14.   ## [data = fGarch::dem2gbp]
  15.   ##
  16.   ## Conditional Distribution:
  17.   ## norm
  18.   ##
  19.   ## Coefficient(s):
  20.   ## mu omega alpha1 beta1
  21.   ## -0.0061903 0.0107614 0.1531341 0.8059737
  22.   ##
  23.   ## Std. Errors:
  24.   ## based on Hessian
  25.   ##
  26.   ## Error Analysis:
  27.   ## Estimate Std. Error t value Pr(>|t|)
  28.   ## mu -0.006190 0.008462 -0.732 0.464448
  29.   ## omega 0.010761 0.002838 3.793 0.000149 ***
  30.   ## alpha1 0.153134 0.026422 5.796 6.8e-09 ***
  31.   ## beta1 0.805974 0.033381 24.144 < 2e-16 ***
  32.   ## ---
  33.   ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' 1
  34.   ##
  35.   ## Log Likelihood:
  36.   ## -1106.608 normalized: -0.5605916
  37.   ##
  38.   ## Description:
  39.   ## Fri Dec 15 10:51:22 2017 by user: Administrator
 

预测

进行预测操作:

 
  1.   forc = ugarchforecast(fit )
  2.   forc
  3.    
  4.   ##
  5.   ## *------------------------------------*
  6.   ## * GARCH Model Forecast *
  7.   ## *------------------------------------*
  8.   ## Model: sGARCH
  9.   ## Horizon: 10
  10.   ## Roll Steps: 0
  11.   ## Out of Sample: 0
  12.   ##
  13.   ## 0-roll forecast [T0=1981-04-27 08:00:00]:
  14.   ## Series Sigma
  15.   ## T+1 0.0005101 0.007671
  16.   ## T+2 0.0005101 0.007738
  17.   ## T+3 0.0005101 0.007803
  18.   ## T+4 0.0005101 0.007868
  19.   ## T+5 0.0005101 0.007932
  20.   ## T+6 0.0005101 0.007994
  21.   ## T+7 0.0005101 0.008056
  22.   ## T+8 0.0005101 0.008117
  23.   ## T+9 0.0005101 0.008177
  24.   ## T+10 0.0005101 0.008236
 

展示预测的标准差:

 
  1.   head(sigma(forc))
  2.    
  3.   ## 1981-04-27 08:00:00
  4.   ## T+1 0.007670930
  5.   ## T+2 0.007737697
  6.   ## T+3 0.007803402
  7.   ## T+4 0.007868074
  8.   ## T+5 0.007931742
  9.   ## T+6 0.007994435
 

展示预测的拟合值:

 
  1.   head(fitted(forc))
  2.    
  3.   ## 1981-04-27 08:00:00
  4.   ## T+1 0.0005101378
  5.   ## T+2 0.0005101378
  6.   ## T+3 0.0005101378
  7.   ## T+4 0.0005101378
  8.   ## T+5 0.0005101378
  9.   ## T+6 0.0005101378
 

最后绘制预测结果:

plot(forc,which=1 )

首先进行了(Christoffersen)测试。通过以下代码实现:

 
  1.   filt=fit
  2.   VaR = fitted(filt) + sigma(filt)*qdist("sstd", p=0.05, mu = 0, sigma = 1 )
  3.   print(VaRTest(0.05, as.numeric(yield$Close.x), as.numeric(VaR)))
 

测试结果显示:

  • 预期超出值为 206。

  • 实际超出值为 266。

  • 相关假设检验的结果包括“Correct Exceedances”“Correct Exceedances & Independent”等,决策均为“Reject H0”。

GJR-GARCH 

接着,构建了 GJR-GARCH 模型。

模型拟合结果表明:

  • 均值模型为 ARFIMA(1,0,1),分布为 std。

  • 最优参数如 mu、ar1 等的估计值、标准误差、t 值和 p 值得以给出。

  • 稳健标准误差也相应列出。

  • 对数似然值为 12320.69。

  • 信息准则包括 Akaike、Bayes 等。

  • 多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验等的结果一并呈现。

最后进行了预测:

forc = ugarchforecast(gjrGARCH )

预测结果包括未来 10 步的序列值和标准差,通过绘图可直观展示。

 

模型拟合结果呈现如下:

  • 条件方差动态:GARCH 模型为 gjrGARCH(1,1),均值模型为 ARFIMA(1,0,1),分布为 std。

  • 最优参数的估计值、标准误差、t 值和 p 值得以给出,如 mu、ar1 等。

  • 稳健标准误差也相应列出。

  • 对数似然值为 11920.54。

  • 信息准则包括 Akaike、Bayes 等。

多种检验结果如下:

  • 加权 Ljung-Box 对标准化残差的检验显示,部分滞后项的 p 值显著。

  • 加权 Ljung-Box 对标准化平方残差的检验,各滞后项的 p 值较大。

  • 加权 ARCH LM 检验中,各滞后项的 P 值较大。

  • Nyblom 稳定性检验的联合统计量及个体统计量给出。

此外,还进行了拟合优度检验和符号偏差检验。

最后进行了预测,预测结果包括未来 10 步的序列值和标准差,通过绘图可直观展示。具体预测结果如下:

 
  1.   0-roll forecast [T0=1981-04-27 08:00:00]:
  2.   Series Sigma
  3.   T+1 0.0002435 0.007229
  4.   T+2 0.0005105 0.007355
  5.   ...
 

首先是(Christoffersen)测试

  • 预期超出值为 206,实际超出值为 224。

  • 部分假设检验的决策为“Fail to Reject H0”,部分为“Reject H0”。

GARCH(1,1)-t  

接着构建了 GARCH(1,1)-t 模型。

其系数估计及误差分析结果给出。

模型拟合结果表明:

  • 条件方差动态、均值模型和分布情况。

  • 最优参数的估计值、标准误差、t 值和 p 值。

  • 稳健标准误差。

  • 对数似然值和多种信息准则。

  • 多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验等的结果。

最后进行了预测:

forc = ugarchforecast(fit_std )

给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图展示。

 

该模型的拟合结果包括:

  • 条件方差动态为 sGARCH(1,1),均值模型为 ARFIMA(0,0,0),分布为 std

  • 最优参数的估计及相关统计信息。

  • 对数似然值、信息准则等。

  • 多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验的结果。

最后进行了预测:

forc = ugarchforecast(fit_std )

给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图进行展示。

 

(Christoffersen)测试,针对 fit_std 模型:

 
  1.   filt=fit_std
  2.   VaR = fitted(filt) + sigma(filt)*qdist("sstd", p=0.05, mu = 0, sigma = 1 )
  3.   print(VaRTest(0.05, as.numeric(yield$Close.x), as.numeric(VaR)))
 

测试结果为:预期超出值为 206,实际超出值为 225,部分假设检验的决策为“Fail to Reject H0”,部分为“Reject H0”。

GARCH(1,1)-ged  

然后构建了 GARCH(1,1)-ged 模型

模型的相关信息包括均值和方差方程、条件分布、系数估计及误差分析等。

接着又构建了另一个相关模型:

 
  1.   spec_ged<-ugarchspec(variance.model=list(garchOrder=c(1,1)),
  2.   mean.model=list(armaOrder=c(0,0)),distribution.model = "ged")
  3.   fit_ged <- ugarchfit(spec = spec_ged, data = yield)
 

模型拟合结果呈现了条件方差动态、均值模型、分布情况、最优参数估计及相关统计量,还包括对数似然值、信息准则,以及多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验的结果。

最后进行了预测:

给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图展示。

 

模型拟合结果显示:

  • 条件方差动态为 sGARCH(1,1),均值模型为 ARFIMA(0,0,0),分布为 ged

  • 最优参数的估计值、标准误差、t 值和 p 值得以给出,如 muomega 等。

  • 稳健标准误差也相应列出。

  • 对数似然值为 11937.04。

  • 多种信息准则包括 Akaike、Bayes 等。

多种检验结果如下:

  • 加权 Ljung-Box 对标准化残差的检验显示部分滞后项的统计情况。

  • 加权 Ljung-Box 对标准化平方残差的检验,各滞后项的统计结果。

  • 加权 ARCH LM 检验中各滞后项的统计量及 P 值。

  • Nyblom 稳定性检验的联合统计量及个体统计量。

  • Sign Bias 检验的结果。

  • Adjusted Pearson 拟合优度检验在不同分组下的统计量和 p 值。

最后进行了预测:

给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图展示。

 

检验与分析

本研究首先进行了(Christoffersen)测试,针对 fit_ged 模型:

测试结果为:预期超出值为 206,实际超出值为 239。部分假设检验决策为“Reject H0”。

对于 fit_std 模型,能得到模型的估计参数值,如 omegaalpha1beta1 、shape 分别为 0.000003、0.077908、0.101390、0.916701、7.517278,以及模型的信息准则值。

此外,还对估计残差的自相关函数进行了分析:

acf(garch.fit@fit$residuals)

进一步评估

从 acf 值来看,由于很快落入置信区间,可认为模型的残差稳定,模型效果较好。

通过计算拟合值进行了如下检验:

  • Box.test(garch.fit@fit$residuals, type="Ljung-Box", 1) ,结果显示 X-squared = 1.8712df = 1p-value = 0.1713 。

  • Box.test(garch.fit@fit$residuals, type="Ljung-Box", 2) ,结果为 X-squared = 4.7542df = 2p-value = 0.09282 。

从这些结果来看,boxtest 的 p 值显著大于 0.05,因此接受原假设,即模型残差是白噪声,残差稳定,模型效果较好。

还对残差的正态性进行了分析:

hist(garch.fit@fit$residuals, col="green", breaks=200, freq=FALSE)

从结果来看,残差的直方图接近正态分布曲线,因此可以认为残差满足正态分布。

 

 

综合评估与可视化

进行了 Kolmogorov-Smirnov 检验:

结果显示 D = 0.47441p-value < 2.2e-16 ,同时有警告提示不应存在ties。从 QQ 图的结果来看,由于图中的点有些偏离红色直线,认为其可能不满足正态分布。

绘制了对数收益率:

绘制了 GARCH 模型的拟合曲线:

并绘制了拟合值的 95%置信区间:

 
  1.   lines( as.numeric(garch.fit@fit$fitted.values -1.96*sigma(garch.fit)),col="yellow")
  2.   lines( as.numeric(garch.fit@fit$fitted.values +1.96*sigma(garch.fit)),col="blue")
 

大部分原始数据都落入 95%的置信区间内,因此认为模型拟合效果较好。

通过将我们的预测结果与实际市场走势进行对比,您会发现我们的模型在关键节点上能够准确捕捉市场的变化趋势。

最后添加了图例:

legend("right",c("observed","fitted","95%bound"),col=c(1,"steelblue","red2"),lwd=c(1,2,1),bg=rgb(1,1,.8), cex=0.5)

参考文献 

[1]潘冬涛,马勇,刘云涛.跳跃视角下的股指期货价格发现功能研究[J].运筹与管理.2023,32(12).DOI:10.12005/orms.2023.0396 .
[2]饶瑞,潘志松,黎维,等.基于深度强化学习的高频交易优化算法[J].南京理工大学学报(自然科学版).2022,46(3).DOI:10.14177/j.cnki.32-1397n.2022.46.03.008 .
[3]文馨贤.融合经验模态分解与线性Transformer的高频金融时间序列预测[J].现代电子技术.2022,45(23).DOI:10.16652/j.issn.1004-373x.2022.23.023 .
[4]党聪,卢俊香.基于高频数据的金融市场风险溢出研究[J].宁夏大学学报(自然科学版).2022,43(3).DOI:10.3969/j.issn.0253-2328.2022.03.005 .
[5]徐薇.小波分析在经济金融领域的应用[J].全国流通经济.2022,(30).DOI:10.3969/j.issn.1009-5292.2022.30.037 .
[6]章涵.基于均值回归的超额价差套利策略研究[J].中国商论.2022,(17).DOI:10.19699/j.cnki.issn2096-0298.2022.17.106 .
[7]代军,叶幸玮.股指期货非线性动态套期保值研究[J].统计与决策.2021,(9).DOI:10.13546/j.cnki.tjyjc.2021.09.037 .
[8]郭树华,马啸宇.核心资产尾部风险溢出效应研究[J].技术经济.2021,40(12).DOI:10.3969/j.issn.1002-980X.2021.12.011 .
[9]曲传菊,杨皎平.基于小波去噪和协整理论的股指期货高频数据跨期择时套利策略[J].西南师范大学学报(自然科学版).2020,(3).DOI:10.13718/j.cnki.xsxb.2020.03.012 .
[10]韩晨宇,王一鸣.中国股票市场波动率的多重分形分析与实证[J].统计与决策.2020,(1).DOI:10.13546/j.cnki.tjyjc.2020.01.030 .

 

标签:fit,##,模型,GJR,检验,yield,GARCH,ged
From: https://www.cnblogs.com/tecdat/p/18359611

相关文章

  • 【倍增】Rigged Games
    题意两队打比赛,大比分2b−1赢,小比分2a−1赢。给定的长度为n的串,两队比赛的每个小分结果是这个串的循环重复。问从该串的每个位置开始,最终谁会赢得整个比赛。思路倍增。首先对于每个位置,计算出它\(2a-1\)局后的比分的比分终点的位置。然后采用倍增,即假设我们要......
  • Lazarus在Loongarch的loongxin mate系统不能打开对话框问题
    Lazarus在Loongarch的loongxinmate系统不能使用系统的打开、保存等对话框问题。运行OpenDialog1.Execute后出现  浮点数例外错误,程序自动退出。根据秋.风在在龙芯loongxinmate系统lazarus和编译的应用打开文件对话框出现卡死的临时处理方案-秋·风-博客园(cnblogs.c......
  • 处理程序“aspx”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    原文链接:https://www.cnblogs.com/mingcaoyouxin/p/3926800.html开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPip......
  • 【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed
    问题现象客户在麒麟kylinv10sp1环境上部署YashanDB,运行正常,但是在巡检中发现run.log中有大量错误日志文件metadatachanged,需要排查原因问题单:前置机大量错误日志文件metadatachanged,需要排查原因问题的风险及影响客户环境为准生产环境,担心影响业务执行。问题影响的版本......
  • Netty技术全解析:ByteToMessageDecoder类深度解析
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......
  • seaweedfs-csi-driver 运行异常:volume hasn't been staged yet
     Defaultedcontainer"csi-seaweedfs-plugin"outof:csi-seaweedfs-plugin,driver-registrar,csi-liveness-probeI080109:12:04.188240main.go:73willrunnode:true,controller:false,attacher:trueI080109:12:04.188817main.go:79connectto......
  • Ubuntu24.04LTS使用pip时显示:error: externally-managed-environment
    Ubuntu24.04LTS中使用apt按照pip,然后pipinstall时显示如下信息:error:externally-managed-environment×Thisenvironmentisexternallymanaged╰─>ToinstallPythonpackagessystem-wide,tryaptinstallpython3-xyz,wherexyzisthepackageyouaretryin......
  • Python - Creating Managed Attributes using properties
    CreatingManagedAttributesusingpropertiesPropertiescanbeusedtocreatedataattributeswithspecialfunctionality.Ifyouwantsomeextrafunctionality(liketypechecking,datavalidationortransformation)whilegettingorsettingadataattribut......
  • Python用GARCH、离散随机波动率模型DSV模拟和估计股
    原文链接:http://tecdat.cn/?p=25165 原文出处:拓端数据部落公众号这篇文章介绍了一类离散随机波动率模型,并介绍了一些特殊情况,包括GARCH和ARCH模型。本文展示了如何模拟这些过程以及参数估计。本文为这些实验编写的Python代码在文章末尾引用。离散随机波动率模型是一个......
  • Python,运行Yolo项目,报错AttributeError: ‘ImageDraw‘ object has no attribute ‘te
    Python3.9问题描述:其他电脑已经运行成功的Python,YOLO代码到我电脑上运行报错Traceback(mostrecentcalllast): File"C:\Users\Administrator\Desktop\20240725\识别项目\predict.py",line122,in<module>  frame=np.array(yolo.detect_image(frame)) Fil......