本节书摘来异步社区《量化金融R语言初级教程》一书中的第1章,第1.4节,作者: 【匈牙利】Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 波动率建模

正如我们之前所见,ARIMA模型常常用于过程的过去值已知时的条件期望建模。过去值已知的过程的条件方差是常数。真实世界的金融时间序列存在着波动性聚集和其他特点,换句话说,突发波动率打破了相对稳定的时期。

在这一节中,我们来考查GARCH时间序列模型。GARCH模型研究真实世界的(金融)时间序列的这个典型化事实——波动性聚集,并进一步运用这些模型预测在险价值(Value at Risk,VaR)。

1.4.1 风险管理的波动率预测

金融机构使用VaR来度量他们的活动风险,通常在10个工作日范围内计算置信水平为99%的临界值。这意味着在这10天内,只有1%的时间会出现预期损失超过临界值。

我们载入zoo包并导入英特尔公司的月收益率数据,时间范围从1973年1月~2008年12月。

> library("zoo")
> intc <- read.zoo("intc.csv", header = TRUE,
+  sep = ",",  format = "%Y-%m", FUN = as.yearmon)

1.4.2 检验ARCH效应

收益率图形表明,在月收益率数据中可能存在ARCH效应。

> plot(intc, main = "Monthly returns of Intel Corporation",
+  xlab = "Date", ylab = "Return in percent")

上面命令的输出在图1-3中显示。

我们可以使用统计假设检验来验证自己的想法。两种常用检验如下。

用于平方收益率(波动率的一种代理)自相关的Ljung-Box检验。
Engle(1982年)提出的拉格朗日乘子(LM)检验。
首先,我们运行下面的命令,从而在平方收益率的前12阶滞后值上执行Ljung-Box检验。

> Box.test(coredata(intc^2), type = "Ljung-Box", lag = 12)Box-Ljung testdata: coredata(intc^2)
X-squared = 79.3451, df = 12, p-value = 5.502e-12

我们可以在1%的置信水平上拒绝原假设,原假设是平方收益率中不存在自相关。或者,我们可以使用FinTS包的LM检验,它输出相同的结果。

> install.packages("FinTS")
> library("FinTS")
> ArchTest(coredata(intc))ARCH LM-test; Null hypothesis: no ARCH effectsdata: coredata(intc)
Chi-squared = 59.3647, df = 12, p-value = 2.946e-08

两种检验都确定了英特尔的月收益率中存在ARCH效应。因此,收益率时间序列的建模应该使用ARCH或GARCH模型。

1.4.3 GARCH模型设定

GARCH(1,1)模型是GARCH模型中最常用的一种,也是一种最适于金融时间序列建模的模型。我们使用rugarch包提供的函数来设定模型、估计参数、回测以及预测。如果你还没有安装这个包,运行下面的命令。

> install.packages("rugarch")

然后,我们可以运行下面的命令来载入这个包。

> library("rugarch")

首先,我们需要使用函数ugarchspec设定模型。对于一个GARCH(1,1)模型,我们需要设置garchOrder为c(1,1)。而且均值模型(mean.model)是一个白噪声过程,因此等同于armaOrder = c(0,0)。

> intc_garch11_spec <- ugarchspec(variance.model = list(
+  garchOrder = c(1, 1)),
+ mean.model = list(armaOrder = c(0, 0)))

1.4.4 GARCH模型估计

通过ugarchfit函数设定模型,输入为收益率数据,就可以用极大似然方法精确拟合模型的系数。

> intc_garch11_fit <- ugarchfit(spec = intc_garch11_spec,
+ data = intc)

其他参数的使用请参见ugarchfit的帮助文档。拟合模型的输出(使用命令intc_garch11_fit)展示了有用信息,比如最优参数值、对数似然函数值,以及信息准则。

1.4.5 回测风险模型

检验模型表现的有效方法是历史回测。在回测风险模型时,我们对比整个时期的真实收益率和估计的VaR。如果收益率比VaR损失更大,我们得到一次VaR突破(VaR exceedance)。在我们的例子中,一次VaR突破应该仅仅发生在1%的情形中(因为我们设定了置信区间为99%)。

函数ugarchroll对一个设定的GARCH模型(在这里,这个模型是intc_garch11_spec)执行历史回测。我们指定回测如下。

使用的收益率数据存储在zoo对象intc中。
回测的起始期(n.start)应该是序列开始(就是1983年1月)时的前120个月。
每月都需要重新估计模型(refit.every = 1)。
我们使用移动(moving)窗口来估计。
我们使用一个混合(hybrid)的解决方法。
我们希望计算VAR在99%的尾部置信水平上(VaR.alpha = 0.01)的临界值(calculate.VaR = TRUE)。
我们希望保留估计的系数(keep.coef = TRUE)。
下面的命令显示了满足上述所有要求的回测。

> intc_garch11_roll <- ugarchroll(intc_garch11_spec, intc,
+  n.start = 120, refit.every = 1, refit.window = "moving",
+  solver = "hybrid", calculate.VaR = TRUE, VaR.alpha = 0.01,
+  keep.coef = TRUE)

我们可以使用report函数检查回测报告。通过把这个参数的type参数设定为VaR,这个函数对突破值执行无条件和有条件覆盖检验。VaR.alpha是尾部概率,conf.level是置信区间,条件覆盖的假设检验基于此建立。

> report(intc_garch11_roll, type = "VaR", VaR.alpha = 0.01,
+conf.level = 0.99)
VaR Backtest Report
===========================================
Model:      sGARCH-norm
Backtest Length:  312
Data:==========================================
alpha:       1%
Expected Exceed:   3.1
Actual VaR Exceed:  5
Actual %:      1.6%Unconditional Coverage (Kupiec)
Null-Hypothesis:  Correct Exceedances
LR.uc Statistic:  0.968
LR.uc Critical:   6.635
LR.uc p-value:   0.325
Reject Null:   NOConditional Coverage (Christoffersen)
Null-Hypothesis:  Correct Exceedances andIndependence of Failures
LR.cc Statistic:  1.131
LR.cc Critical:   9.21
LR.cc p-value:   0.568
Reject Null:    O

Kupiec的无条件覆盖方法比较了给定VaR尾部概率时,预期突破值数目和实际突破值数目,而Christoffersen检验方法则是一种对无条件覆盖和突破值的独立性的联合检验。在我们的例子中,尽管预期突破有3次但实际发生了5次,我们不能拒绝突破是正确并且独立的原假设。

回测表现的图形也很容易生成。首先,使用ugarchroll对象的精确预测VaR创建一个zoo对象。

> intc_VaR <- zoo(intc_garch11_roll@forecast$VaR[, 1])

我们仍然使用这个“zoo”对象,通过rownames(年和月)重写这个对象的index属性。

> index(intc_VaR) <- as.yearmon(rownames(intc_garch11_roll@forecast$VaR))

对同时存储在ugarchroll对象中的真实收益率,我们加以同样的处理。

> intc_actual <- zoo(intc_garch11_roll@forecast$VaR[, 2])
> index(intc_actual) <-
as.yearmon(rownames(intc_garch11_roll@forecast$VaR))

现在,我们可以使用下面的命令,画出VaR对比英特尔真实收益率的图形。

> plot(intc_actual, type = "b", main = "99% 1 Month VaR  Backtesting",
+  xlab = "Date", ylab = "Return/VaR in percent")
> lines(intc_VaR, col = "red")
> legend("topright", inset=.05, c("Intel return","VaR"), col =
c("black","red"), lty = c(1,1))

图1-4中显示了上述命令行的输出。

1.4.6 预测

我们现在有理由相信风险模型运行正常,我们也可以生成VaR预测。函数ugarchforecast选取以下两个参数,一个是拟合的GARCH函数(intc_garch11_fit),另一个是应该产生预测的周期数(n.ahead = 12,即12个月)。

> intc_garch11_fcst <- ugarchforecast(intc_garch11_fit, n.ahead = 12)

我们可以通过查询以下命令行显示的预测对象,来预期未来结果。

> intc_garch11_fcst
*------------------------------------*
*     GARCH Model Forecast    *
*------------------------------------*
Model: sGARCH
Horizon: 12
Roll Steps: 0
Out of Sample: 00-roll forecast [T0=Dec 2008]:Series Sigma
T+1 0.01911 0.1168
T+2 0.01911 0.1172
T+3 0.01911 0.1177
T+4 0.01911 0.1181
T+5 0.01911 0.1184
T+6 0.01911 0.1188
T+7 0.01911 0.1191
T+8 0.01911 0.1194
T+9 0.01911 0.1197
T+10 0.01911 0.1200
T+11 0.01911 0.1202
T+12 0.01911 0.1204

波动率(sigma)的一步预期是0.1168。因为我们假定了正态分布,置信水平为99%的VaR可以使用标准正态分布的99%分位数(输入qnorm(0.99))来计算。因此对下一个周期,一个月的99%VaR就是qnorm(0.99)*0.1168 =0.2717。结果,月收益率高于−27%的概率是99%。

《量化金融R语言初级教程》一1.4 波动率建模相关推荐

  1. 《量化金融R语言初级教程》一2.6 如果方差不够用

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第2章,第2.6节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  2. 对英国房屋价格建模并预测 ---《量化金融R语言初级教程》

    时间序列分析 一.实验介绍 1.1 实验内容 时间序列分析研究的是按时间顺序收集的数据.相邻的观测数据通常相互依赖.因此,时间序列分析的技术需要处理这种相依性. 本章的目标是通过一些特定应用来介绍一些 ...

  3. r语言 协整_《量化金融R语言初级教程》一1.3 协整

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第1章,第1.3节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  4. 《量化金融R语言初级教程》一2.4 切线组合和资本市场线

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第2章,第2.1节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  5. 《量化金融R语言初级教程》一2.3 使用真实数据

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第2章,第2.3节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  6. 《量化金融R语言初级教程》一1.1 使用时间序列数据

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第1章,第1.1节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  7. 《量化金融R语言初级教程》一1.2 对英国房屋价格建模并预测

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第1章,第1.2节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  8. 《量化金融R语言初级教程》一第2章 投资组合优化

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第2章,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章节内容可以访 ...

  9. 《量化金融R语言初级教程》一2.1 均方差模型

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第2章,第2.1节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

最新文章

  1. c#操作xml实例 2009-03-13 20:00
  2. 关于c++静态类的说法
  3. 将服务器文件加载至hive表中,Hive入门到剖析(四)
  4. php列目录设置密码,PHP输入密码并列出目录文件生成超链接代码
  5. (1)FPGA面试技能提升篇(SystemC)
  6. layui 可以商用吗_layui框架的优缺点是什么
  7. PyTorch:模型训练-分布式训练
  8. conda create出现连接问题_解决conda创建新环境慢 conda install 速度慢 报错问题
  9. Android的Jetpack概括
  10. Atitit 防烫伤指南与规范 attilax总结
  11. MikroTik RouterOS U盘安装工具netinstall的使用
  12. 《大数据技术原理与应用》第三版 林子雨编著 第一章 大数据概述
  13. linux底下dig命令报错
  14. 计算机打字考试的技巧,快速打字有什么技巧
  15. Android编程权威指南(第4版)第16章使用Intent调用相机闪退问题
  16. 如何从Mixamo下载人物模型的动画
  17. ruby自动注册163邮箱
  18. DM8 控制文件转换为文本文件
  19. 关于GPS坐标转换(一)
  20. MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试(前奏)MBT整体思考

热门文章

  1. source命令执行sql脚本在DOS界面出现中文乱码问题
  2. 信号逻辑电平标准详解
  3. 卡特加特智能家居怎么样?国内5大品牌经销商横向对比2023最新版
  4. 基于javaweb的公园景区导游网站系统
  5. snipaste 快捷键被chrome占用解决
  6. 关爱程序猿健康,从跑步做起
  7. CF生化全模式全装备单机版安装教程(基于CSOL)
  8. 论催收系统的管理子系统选型设计
  9. Redhat 5.4 Oracle 10g RAC Openfiler+Multipath + RAW+ ASM 安装文档
  10. 分销系统开发|什么是二级分销模式?二级分销合法吗?