R语言tGarch-copula-CoVaR 系统风险程序教学教程
这个工具包比较复杂需要大量的工具包和大量的知识。第一个模块是生成xts的数据对象,第二步是做时间序列的基本检验包括峰度和偏度;第二个模块是估计TGARCH模型获得参数同时做两件事一个是获得VaR(包括下行和上行风险价值)一个是获得PIT均匀分布数据用于进一步估计copula 函数;第二个模块的附加是做了一个FOR循环的并行计算rollwindow估计单个序列的VaR和它们的kupiec test;第三个模块是调用VineCopula工具包,先做对序列均匀变换的ks.test均匀分布检验一般要求大于0.05代表通过ks检验;接着估计二元copula获得不同的参数。最后一个模块(Block)是估计CoVaR。
第一节
1.1 我的Rsudio信息
先展示我的Rsudio 版本信息,输入命令 sessionInfo()
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936
[2] LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.6.1 tools_3.6.1
>
1.2 为了能正确使用这个程序要做的必须准备工作,我假设你已经安装R和Rtudio IDE集成环境。
主要网页:https://cran.r-project.org/web/views/
第一步,下载ctv工具包 : install.packages(“ctv”)
第二步:下载好工具包后逐个安装这一系列topics ,记住必须一个一个运行等上一个安装完再复制第二个安装依次类推,所有的安装结束后才可以运行我上传的工具包。
ctv::install.views(“Econometrics”) #安装计量经济学相关所有工具包
ctv::install.views(“Finance”) #安装数量金融的所有工具包其中一个是做基本时间序列统计一个是rugarch在里面
ctv::install.views(“Distributions“) #安装copula 相关的工具包其中 coupla 和 VineCopula都在这里
ctv::install.views(“HighPerformanceComputing”) #安装高性能计算topics其中用到的Parralel 并行计算包在这里
ctv::install.views(“Optimization”) #安装优化工具包系列其中后面计算CoVaR作者使用了一个R模仿MATLAB计算的工具包
当然,也可以不安装上面CTV这一些列包,Rstudio 打开程序文件会自动检测你缺失的工具包,提示你install,你鼠标左键点一下install就全部自动补充完整。
第二节
2.1 程序代码
文件名叫demoCoVaR,下载后设定你自己的文件夹目录命令窗口会有改变文件夹目录的命令,复制它粘贴取代我文件里提示的(警告:替换为你自己的文件夹路径),先上代码。 代码不需要复制粘贴,已经在后面上传的ZIP文件里,自己打开demoCoVaR.R文件就可以看到,我以为粘贴代码会显示行号,如果你们下载不修改文件太过分那么和我电脑里的行号一致。我依据我电脑里的行号进行说明。
复制代码
2.2 代码的主要行解释。
37行 rets<-as.xts是合成时间序列对象。
40行 做基本统计检验,附上统计检验结果。
> basicStats(rets)
SP500 AIG ALL BRK MET PRU
nobs 3915.000000 3915.000000 3915.000000 3915.000000 3915.000000 3915.000000
NAs 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Minimum -0.094695 -0.936258 -0.237986 -0.128833 -0.311561 -0.283944
Maximum 0.109572 0.506817 0.196280 0.149532 0.246860 0.323899
1. Quartile -0.005158 -0.010030 -0.008005 -0.006455 -0.010044 -0.008576
3. Quartile 0.005718 0.009790 0.008404 0.006681 0.010896 0.011394
Mean 0.000087 -0.000789 0.000098 0.000154 0.000210 0.000672
Median 0.000261 0.000000 0.000450 -0.000447 0.000317 0.000791
Sum 0.341769 -3.090511 0.384843 0.603999 0.820472 2.629750
SE Mean 0.000201 0.000665 0.000344 0.000255 0.000442 0.000456
LCL Mean -0.000308 -0.002094 -0.000577 -0.000346 -0.000657 -0.000223
UCL Mean 0.000482 0.000515 0.000773 0.000655 0.001076 0.001566
Variance 0.000159 0.001734 0.000464 0.000255 0.000765 0.000815
Stdev 0.012602 0.041640 0.021541 0.015971 0.027661 0.028550
Skewness -0.186396 -3.167796 -0.696411 0.551248 -0.335751 -0.127746
Kurtosis 8.425156 100.929969 20.310540 11.876260 20.354293 26.591242
53行开始for循环估计所有序列。
59行计算无条件方差用于PIT变换
80行通过rugarch工具包的 pdist函数做均匀变换。
90行开始的模块,是不必要的,和这个不相关。 94行设定并行socket联网并行计算服务器,记得计算结束109行用 stopCluster(cl) 关闭并行否则电脑很卡。但是有 kupiec 检验附上检验统计。
Elapsed: 46.16878 secs
VaR Backtest Report
===========================================
Model: gjrGARCH-jsu
Backtest Length: 2915
Data:
==========================================
alpha: 5%
Expected Exceed: 145.8
Actual VaR Exceed: 149
Actual %: 5.1%
Unconditional Coverage (Kupiec)
Null-Hypothesis: Correct Exceedances
LR.uc Statistic: 0.076
LR.uc Critical: 3.841
LR.uc p-value: 0.783
Reject Null: NO
Conditional Coverage (Christoffersen)
Null-Hypothesis: Correct Exceedances and
Independence of Failures
LR.cc Statistic: 1.201
LR.cc Critical: 5.991
LR.cc p-value: 0.549
Reject Null: NO
137行强制数据类型变化去掉xts属性变为矩阵属性,计算ks检验
138到141行做ks检验。
> mpit<-as.matrix(PIT)
> for (m in 1:ncol(mpit)) {
+ test<-ks.test(jitter(mpit[,m]),”punif”,0,1)
+ print(test)
+ }
One-sample Kolmogorov-Smirnov test
data: jitter(mpit[, m])
D = 0.025954, p-value = 0.01024
alternative hypothesis: two-sided
One-sample Kolmogorov-Smirnov test
data: jitter(mpit[, m])
D = 0.02864, p-value = 0.00325
alternative hypothesis: two-sided
One-sample Kolmogorov-Smirnov test
data: jitter(mpit[, m])
D = 0.0094391, p-value = 0.8765
alternative hypothesis: two-sided
One-sample Kolmogorov-Smirnov test
data: jitter(mpit[, m])
D = 0.016818, p-value = 0.2181
alternative hypothesis: two-sided
One-sample Kolmogorov-Smirnov test
data: jitter(mpit[, m])
D = 0.0092554, p-value = 0.8907
alternative hypothesis: two-sided
One-sample Kolmogorov-Smirnov test
data: jitter(mpit[, m])
D = 0.019041, p-value = 0.117
alternative hypothesis: two-sided
后续是为后面计算 CoVaR计算二元copula 的相关系数 par1, par2(如果有的family 有后者参数否则不需要计算)
172行起计算CoVaR (比较粗糙的教学)
rugarch 工具包估计的TARCH统计量展示和图片
图1和图2是GARCH模型的,图3是做的VaR 回测但是记住不是资产组合的是单个资产的回测。
CoVaR的图,这个程序是举例,举一反三。只做了两个序列(记住第一列是指数是基准banchmark不能替换掉,如果是做国内你可以选择一个指数或者是上证指数或者是沪深300指数),指数的均匀变换叫做 u1 ,后续的二元coula 必须有u1
可以 一对二 u1,u2
可以 一对三 u1,u3 可以 一对五或者任意 u1,u5
最近有重要的事情做今年的最后一个网络公开课程。
明年有惊喜会在MATLAB板块发布DSGE的教学,因为我买了 李向阳老师的《DSGE动态随机一般均衡》的教材,正在抓紧学。
这个代码还有疑惑的可以按照程序里说明不服的群号码加群。
开头部分群号码这部分等中文可以删除,使用的时候不需要引用我,引用开头部分意大利作者的论文,以及提及是意大利作者原作者的原创。这个代码不是我原创的。我只不过是会调用程序。发CoVaR的几张图今天的课程结束
enjoy
yours: Daniel tulips liu 丹尼尔·郁金香·刘
评论前必须登录!
注册