多变量GARCH模型R代码实现

news2025/4/10 14:00:27

      大家好,我是带我去滑雪!

     多变量GARCH(Generalized Autoregressive Conditional Heteroskedasticity)模型是一种用于建模多个时间序列变量之间的条件异方差性(conditional heteroskedasticity)的统计模型。它在金融、经济学和其他领域中具有广泛的用途,并具有以下用途和优点:

    用途如下

  1. 风险度量: 多变量GARCH模型用于度量多个资产或变量之间的风险,有助于投资者和决策者了解不同资产之间的相关性和波动性。这对于风险管理和投资组合优化至关重要。

  2. 资产组合优化: 在资产配置和投资组合管理中,多变量GARCH模型有助于建立更准确的风险模型,以帮助投资者构建风险调整后的收益最大化的投资组合。

  3. 金融衍生品定价: 多变量GARCH模型用于衍生品定价和风险管理,例如期权、期货和其他金融衍生品的定价模型。

  4. 宏观经济研究: 在经济学中,多变量GARCH模型可用于分析多个宏观经济变量之间的条件异方差性,以深入了解宏观经济波动和政策决策。

  5. 时间序列分析: 多变量GARCH模型用于对多个时间序列数据进行建模,以分析它们之间的相互作用和动态关系。

    优点如下:

  1. 考虑了波动性的动态性: 多变量GARCH模型考虑了条件异方差性的动态性,即波动性会根据历史信息的变化而变化。这更贴近实际市场情况,尤其是金融市场中的波动性通常是时间变化的。

  2. 处理多个变量之间的相关性: 该模型允许分析多个相关变量的条件异方差性,因此可以揭示它们之间的相互作用和影响,这对于风险管理和资产组合管理至关重要。

  3. 有丰富的变种: 多变量GARCH模型有多种变种,如BEKK-GARCH、DCC-GARCH等,可根据不同问题的需求进行调整和扩展,以适应复杂的建模情境。

  4. 有效的风险管理工具: 通过测量不同资产或变量之间的风险和相关性,多变量GARCH模型为风险管理提供了有效的工具,使投资者能够更好地管理投资组合风险。

      下面开始多变量GARCH模型的R代码实战。

(1)数据准备

       数据使用Brent原油数据和Wti原油数据,研究二者之间的条件异方差性。

dat1.tmp <-read.csv("E:/brent.csv")
head(dat1.tmp)

输出结果:


dat2.tmp <- read.csv("E:/wti.csv")
head(dat2.tmp)

输出结果:

      Dates  Open  High   Low Last Change Settle Volume Open.Interest
1 1983/3/30 29.01 29.56 29.01   NA     NA  29.40    949           470
2 1983/3/31 29.40 29.60 29.25   NA     NA  29.29    521           523
3  1983/4/4 29.30 29.70 29.29   NA     NA  29.44    156           583
4  1983/4/5 29.50 29.80 29.50   NA     NA  29.71    175           623
5  1983/4/6 29.90 29.92 29.65   NA     NA  29.90    392           640
6  1983/4/7 29.90 30.20 29.86   NA     NA  30.17    817           795
dat1=xts::as.xts(dat1.tmp[,5], as.Date(dat1.tmp[,1]))#将Brent原油数据中的第五列Settle与第一列时间合并
dat2=xts::as.xts(dat2.tmp[,7], as.Date(dat2.tmp[,1]))#与上面同理
head(dat1); head(dat2) 

输出结果:

            [,1]
1990-08-17 27.12
1990-08-20 27.38
1990-08-21 27.63
1990-08-22 30.19
1990-08-23 30.85
1990-08-24 30.10
            [,1]
1983-03-30 29.40
1983-03-31 29.29
1983-04-04 29.44
1983-04-05 29.71
1983-04-06 29.90
1983-04-07 30.17
Y1x=diff(log(dat1))*100; Y2x=diff(log(dat2))*100 #计算报酬率
Data=na.omit(merge(Y1x,Y2x)) 
colnames(Data)=c("Brent","Wti") 
head(Data) 

输出结果:

                 Brent        Wti
1990-08-20   0.9541357 -0.2447982
1990-08-21   0.9089319 -0.5265942
1990-08-22   8.8608605  9.4317719
1990-08-23   2.1626007  2.2487092
1990-08-24  -2.4611579 -3.2466251
1990-08-28 -12.0610951  3.5411621

       可以绘制 Brent和Wti的时间序列图,如下:

(2)估计基准DCC模型

library(rmgarch) 
meanSpec=list(armaOrder=c(1,0), include.mean=TRUE, archpow=2)
varSpec=list(model="eGARCH", garchOrder = c(2,1))
distSpec = c("mvt") 
spec = ugarchspec(mean.model=meanSpec, variance.model=varSpec)
mySpec0=multispec(list(spec, spec))
mySpec = dccspec(mySpec0, VAR = TRUE, robust = TRUE, lag.max =20, lag.criterion = "AIC", model="aDCC", distribution=distSpec)
fitDcc=dccfit(data=Data, mySpec, solver="solnp") 
show(fitDcc)  

输出结果:

*---------------------------------*
*          DCC GARCH Fit          *
*---------------------------------*

Distribution         :  mvt
Model                :  aDCC(1,1)
No. Parameters       :  99
[VAR GARCH DCC UncQ] : [82+12+4+1]
No. Series           :  2
No. Obs.             :  6176
Log-Likelihood       :  -26580.6
Av.Log-Likelihood    :  -4.3 

Optimal Parameters
-----------------------------------
                Estimate  Std. Error     t value Pr(>|t|)
[Brent].omega   0.014021    0.002192     6.39720 0.000000
[Brent].alpha1 -0.042463    0.029515    -1.43870 0.150235
[Brent].alpha2  0.034299    0.028255     1.21393 0.224775
[Brent].beta1   0.993653    0.000022 45405.17851 0.000000
[Brent].gamma1  0.145203    0.038973     3.72572 0.000195
[Brent].gamma2 -0.017929    0.037409    -0.47927 0.631746
[Wti].omega     5.035586    0.253793    19.84131 0.000000
[Wti].alpha1    0.627256    0.093282     6.72427 0.000000
[Wti].alpha2    0.242307    0.193114     1.25473 0.209576
[Wti].beta1     0.030845    0.034868     0.88462 0.376359
[Wti].gamma1    0.934502    0.134395     6.95337 0.000000
[Wti].gamma2    3.460364    0.222249    15.56975 0.000000
[Joint]dcca1    0.006693    0.003728     1.79531 0.072604
[Joint]dccb1    0.973724    0.009904    98.32013 0.000000
[Joint]dccg1    0.002541    0.003605     0.70495 0.480842
[Joint]mshape   4.000000    0.141729    28.22291 0.000000

Information Criteria
---------------------
                   
Akaike       8.6398
Bayes        8.7476
Shibata      8.6393
Hannan-Quinn 8.6772


Elapsed time : 1.39972 

(3)取出对象和绘图

GARCH=sigma(fitDcc)  
head(GARCH) 

输出结果:

              Brent         Wti
1990-08-20 2.221890    2.462386
1990-08-21 2.221890    2.462386
1990-08-22 2.165188    2.758191
1990-08-23 2.549332   45.850703
1990-08-24 2.616450 1370.848840
1990-08-28 2.742976    2.935267
dev.new(); plot(fitDcc,which=4) 
dev.new(); nisurface(fitDcc) 
COV=rcov(fitDcc) 
COV 
Rho=rcor(fitDcc)
Rho  
COV12=as.data.frame(Cov[1,2,])
head(COV12)
Rho12=as.data.frame(Rho[1,2,])
head(Rho12)
DCCtest(Data, garchOrder = c(1,1), n.lags = 1, solver = "solnp", solver.control = list(), cluster = NULL, Z = NULL)

输出结果:

(4)设置条件多样化

        估计基准DCC模型中的代码使用了设定条件均一样的两笔数据。实际上 ,除了概率分布必须相同外,均值和方差的形式可以选择不一样的。

library(rmgarch) 
meanSpec1<-list(armaOrder=c(1,0), include.mean=TRUE, archpow=2)
varSpec1<-list(model="eGARCH", garchOrder = c(2,1))
meanSpec2<-list(armaOrder=c(1,1), include.mean=TRUE, archpow=2)
varSpec2<-list(model="sGARCH", garchOrder = c(1,2))
distSpec<-c("mvt") 
spec1<-ugarchspec(mean.model=meanSpec1, variance.model=varSpec1)
spec2<-ugarchspec(mean.model=meanSpec2, variance.model=varSpec2)
mySpec2<-multispec(list(spec1,spec2))
mySpecX<-dccspec(mySpec2, VAR = TRUE, robust = TRUE, lag.max =20 ,lag.criterion = "AIC", model="aDCC", distribution=distSpec)
fitDcc2<-dccfit(data=Data, mySpecX, solver="solnp") 
show(fitDcc2) 
slot(fitDcc2,"mfit")$matcoef 

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:https://pan.baidu.com/s/1E59qYZuGhwlrx6gn4JJZTg?pwd=2138
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

   点赞+关注,下次不迷路!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity开发之观察者模式(事件中心)

观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。在观察者模式中&#xff0c;主体是通知的发布者&#xff0c;它发出通知时并不需要知道谁是它的观察者&#…

随机森林算法(Random Forest)的二分类问题

二分类问题 1. 数据导入2. RF模型构建2.1 调参&#xff1a;mtry和ntree2.2 运行模型 3. 模型测试4.绘制混淆矩阵5.绘制ROC曲线6. 参考 1. 数据导入 library(dplyr) #数据处理使用 library(data.table) #数据读取使用 library(randomForest) #RF模型使用 library(caret) # 调参…

软件测试之 测试用例 如何设计

在软件开发过程中&#xff0c;测试是一个至关重要的环节&#xff0c;它有助于确保软件的质量和稳定性。而测试用例设计则是测试过程中的一个关键步骤&#xff0c;它帮助测试团队确定如何测试软件以发现潜在的问题和缺陷。本文将介绍测试用例设计的基本概念和步骤&#xff0c;以…

产品研发团队协作神器!10款提效工具大盘点!

在如今科技驱动的时代&#xff0c;产品研发团队面临着前所未有的竞争压力和不断变化的市场需求。为了在这个激烈的环境中脱颖而出&#xff0c;团队需要高效协作并充分利用先进的工具来提高生产力和创新能力。 本文将为你盘点产品研发团队协作必备的10个提效工具&#xff0c;这…

TiDB、MySQL与Oracle的char字段

文章目录 MySQLTiDBOracle结论 我们组在团队内维护了一套TiDB&#xff0c;有时候会有其他同事来请教一些问题&#xff0c;当然遇到比较复杂的问题&#xff0c;我也会直接抛给DBA。今天有个同事来问了一下TiDB的char字段查询是否需要补空格。在我的印象中&#xff0c;TiDB是高度…

【Docker】Docker学习之一:离线安装Docker步骤

前言&#xff1a;基于Ubuntu Jammy 22.04 (LTS)版本安装和测试 1、Docker安装 1.1、离线安装 步骤一&#xff1a;官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz步骤二&#xff1a;解压安装包; tar -zxvf docker…

安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力&#xff0c;也…

C++进阶语法之函数和指针【学习笔记(三)】

文章目录 1、C 函数1.1 函数的定义1.2 函数原型&#xff08;function prototypes&#xff09;1.3 参数&#xff08;parameter&#xff09;——值传递&#xff08;pass by value&#xff09;1.4 重载&#xff08;overloading&#xff09;1.5 函数传参——传递数组&#xff08;ar…

Linux下控制GPIO的三种方法

https://blog.csdn.net/qq_41076734/article/details/124669908 1. 应用空间控制gpio 1.1简介 在/sys/class/gpio/下有个export文件&#xff0c;向export文件写入要操作的GPIO号&#xff0c;使得该GPIO的操作接口从内核空间暴露到用户空间&#xff0c;GPIO的操作接口包括dir…

Flink学习笔记(四):Flink 四大基石之 Window 和 Time

文章目录 1、 概述2、 Flink 的 Window 和 Time2.1、Window API2.1.1、WindowAssigner2.1.2、Trigger2.1.3、Evictor 2.2、窗口类型2.2.1、Tumbling Windows2.2.2、Sliding Windows2.2.3、Session Windows2.2.4、Global Windows 2.3、Time 时间语义2.4、乱序和延迟数据处理2.5、…

linux系统安装Googletest单元测试框架

环境信息 系统&#xff1a;ubuntn cmake版本&#xff1a;3.5.1 gcc版本&#xff1a;5.4.0 1、下载googletest git clone https://github.com/google/googletest.git注意&#xff01;不选branch的话默认下载最新版本&#xff08;需要编译器能够支持C14&#xff09;&#xff0c;…

如何生成osg的动画路径文件

目录 1. 前言 2. 生成动画路径文件 2.1. 粗糙方式 2.2. 精确方式 1. 前言 在进行osg的开发中&#xff0c;有时需要对模型按某个路径或规则进行动画&#xff0c;如下&#xff1a; 奶牛在10秒时间段从起始的osg::Vec3d(0.0, 18, 1.0)位置 匀速直线运动到osg::Vec3d(0.0, -8, …

ubuntu 中使用Qt连接MMSQl,报错libqsqlodbc.so: undefined symbol: SQLAllocHandle

Qt4.8.7的源码编译出来的libqsqlodbc.so&#xff0c;在使用时报错libqsqlodbc.so: undefined symbol: SQLAllocHandle&#xff0c;需要在编译libqsqlodbc.so 的项目pro文件加上LIBS -L/usr/local/lib -lodbc。 这里的路径根据自己的实际情况填写。 编辑&#xff1a; 使用uni…

Python数据结构(队列)

Python数据结构&#xff08;队列&#xff09; 队列(queue)是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的 (First n First ut)的线性表&#xff0c;简称FIFO。允许插入的一端为队尾&#xff0c;允许删除的一端为队头&#xff…

深度学习——图像分类(CIFAR-10)

深度学习——图像分类&#xff08;CIFAR-10&#xff09; 文章目录 前言一、实现图像分类1.1. 获取并组织数据集1.2. 划分训练集、验证集1.3. 图像增广1.4. 引入数据集1.5. 定义模型1.6. 定义训练函数1.7. 训练模型并保存模型参数 二、生成一个桌面小程序2.1. 使用QT设计师设计界…

建筑工程模板分类以及特点?

建筑工程模板可以根据材料、结构和用途等方面进行分类。以下是一些常见的建筑工程模板分类及其特点&#xff1a; 1. 木质模板&#xff1a; - 特点&#xff1a;木质模板是最常见和传统的模板类型。它们由木材制成&#xff0c;具有良好的可塑性和可加工性。木质模板适用于各种形状…

京东数据分析:2023年9月京东白酒行业品牌销售排行榜

鲸参谋监测的京东平台9月份白酒市场销售数据已出炉&#xff01; 9月白酒市场的整体热度较高&#xff0c;贵州茅台先是与瑞幸联名推出酱香拿铁&#xff0c;后又宣布与德芙推出联名产品酒心巧克力&#xff0c;引起了诸多消费者的关注。在这一热度的加持下&#xff0c;从销售上看&…

Kali Linux 安装搭建 hadoop 平台 调用 wordcount 示例程序 详细教程

步骤一&#xff1a; 目标&#xff1a;*安装虚拟机&#xff0c;在自己虚拟机上完成hadoop的伪分布式安装。&#xff08;安装完成后要检查&#xff09;* 1&#xff09;前期环境准备&#xff1a;&#xff08;虚拟机、jdk、ssh&#xff09; 2&#xff09;SSH相关配置 安装SSH Se…

【MyBatis篇】MyBatis动态代理总结

本人正在浅学mybatis&#xff0c;正学到mybatis动态代理&#xff0c;在查询多方资料之后做出以下总结&#xff0c;以便于系统学习时回顾&#xff1b; 目录 MyBatis为什么引入动态代理 mybatis的动态代理 Dao代理技术 MyBatis为什么引入动态代理 因为程序员的 懒&#xff0c;…

访问控制2

文章目录 主要内容一.Role和ClusterRole1.ClusterRole示例&#xff0c;创建一个名为test-clusterrole且仅有创建Pod和deployment的集群角色代码如下&#xff08;示例&#xff09;: 2.YAML文件创建代码如下&#xff08;示例&#xff09;: 3.将udbs用户和Clusterrole进行绑定&…