时变动态分位数CoVaR、delta-CoVaR,分位数回归 △CoVaR测度 溢出效应 动态 Adrian2016基于分位数回归方法计算动态条件在险价值。 R语言代码,代码更换数据就能用,需要修改的地方都已标明,并且举例怎么修改 每一行代码都有注释,一次可以计算出所有结果,不需要像Eviews一样两两重复计算。 例子为31家金融机构11-22年数据,包含4个宏观状态变量,计算结果见下图。

一、代码概述

本代码基于R语言开发,核心目标是通过时变分位数回归方法,计算金融市场及金融机构的风险价值(VaR)、条件风险价值(CoVaR)及风险溢出效应指标(ΔCoVaR),为金融市场风险溢出分析提供量化工具。代码严格遵循分位数回归的统计逻辑,支持多市场、多机构的风险度量,可灵活适配不同维度的宏观状态变量,最终输出标准化的风险指标数据及可视化结果,适用于沪深股市与香港股市等跨市场风险溢出研究场景。

二、运行环境与依赖

(一)基础环境

  • 操作系统:Windows/macOS/Linux(无明确系统限制,需适配R语言运行环境)
  • 核心软件:R 3.6.0及以上版本、RStudio(推荐使用,提升代码编辑与运行效率)
  • 环境配置参考:https://zhuanlan.zhihu.com/p/162680829

(二)依赖包

代码仅依赖quantreg包,用于实现分位数回归计算。代码内置自动安装与加载逻辑,若环境中未安装该包,将自动执行安装流程。

三、数据准备规范

(一)数据文件要求

需准备收益率.csv数据文件,包含时间列、收益率列(市场指数+金融机构)、宏观状态变量列,具体格式如下:

列类型 列位置范围 说明
时间列 第1列 格式为YYYY/MM/DD,用于时间序列对齐与可视化
收益率列 第2列起至第N列 第2列为市场指数收益率(系统基准),后续列为金融机构/其他市场收益率
宏观状态变量 第N+1列起至最后 影响风险的宏观经济或市场变量(如利率、汇率、波动率等),需提前标准化处理思路

(二)数据适配说明

若替换为自定义数据,需修改代码中数据读取的列索引配置:

  • 示例默认配置:1个市场指数+31个金融机构+4个宏观状态变量 → 收益率列(2-33列)、状态变量列(34-37列)
  • 自定义配置示例:1个市场指数+40个金融机构+7个宏观状态变量 → 需修改为datay = as.matrix(data[, 2:42])datam = as.matrix(data[, 43:49])

四、核心功能模块详解

代码按逻辑流程分为数据预处理、VaR计算、CoVaR与ΔCoVaR计算、结果导出与可视化四大模块,各模块功能如下:

(一)数据预处理模块

  1. 环境初始化:清除全局变量、关闭图形设备,避免残留数据干扰
  2. 数据读取:读取收益率.csv文件,分离时间列、收益率矩阵(datay)、宏观状态变量矩阵(datam
  3. 状态变量标准化:采用Min-Max标准化方法,将宏观状态变量映射至[0,1]区间,公式为:

\[ state\variables[,j] = \frac{data\m[,j] - min(data\m[,j])}{max(data\m[,j]) - min(data\_m[,j])} \]

标准化目的是消除变量量纲差异,提升分位数回归的稳定性。

(二)VaR计算模块

1. 核心定义

VaR(Value at Risk)即风险价值,指在一定置信水平下,特定持有期内的最大可能损失。代码支持计算三个关键分位数的VaR:

  • VaR05:左尾5%分位数(下行极端风险)
  • VaR50:50%分位数(条件中位数,基准参考)
  • VaR95:右尾95%分位数(上行极端风险)
2. 计算逻辑

通过quantreg包的rq()函数执行分位数回归,回归模型为:

\[ y = \alpha + \beta1 \times state\var1 + \beta2 \times state\var2 + ... + \betak \times state\var_k \]

其中:

  • \( y \) 为单个市场指数或金融机构的收益率
  • \( state\var1...state\vark \) 为标准化后的宏观状态变量
  • \( \alpha \) 为常数项,\( \beta1...\betak \) 为状态变量的回归系数
3. 适配调整

若宏观状态变量数量为k(默认k=4),需对应修改VaR计算公式:

  • 当k=6时,公式为:

\[ VaR[,j] = cof[1] + cof[2] \times state\var1 + ... + cof[7] \times state\var6 \]

cof为回归系数向量,cof[1]为常数项)

4. 结果存储

计算结果存储于三个矩阵:VaR05VaR50VaR95,行索引为时间序列,列索引为市场/机构名称。

(三)CoVaR与ΔCoVaR计算模块

1. 核心定义
  • CoVaR(Conditional VaR):条件风险价值,指在某一市场/机构处于极端状态(如VaR分位数)时,另一市场/机构的风险价值。
  • ΔCoVaR:风险溢出效应指标,即极端状态下的CoVaR与基准状态(VaR50)下的CoVaR差值,用于量化风险溢出强度。
2. 计算逻辑
(1)CoVaR计算

回归模型在VaR基础上引入目标市场/机构的收益率作为条件变量:

\[ y{system} = \alpha + \beta1 \times state\var1 + ... + \betak \times state\vark + \gamma \times returns\j \]

其中:

  • \( y_{system} \) 为系统基准(市场指数)的收益率
  • \( returns\_j \) 为第j个金融机构/市场的收益率(条件变量)
  • 代入对应分位数的VaR值(如VaR05[,j]),得到CoVaR:

\[ CoVaR = \hat{\alpha} + \hat{\beta}1 \times state\var1 + ... + \hat{\beta}k \times state\vark + \hat{\gamma} \times VaR[,j] \]

(2)ΔCoVaR计算

公式为:

\[ \Delta CoVaR = \hat{\gamma} \times (VaR_q[,j] - VaR50[,j]) \]

其中:

  • \( \hat{\gamma} \) 为条件变量(收益率)的回归系数
  • \( VaR_q[,j] \) 为目标分位数的VaR(q=0.05或0.95)
  • ΔCoVaR的绝对值越大,表明风险溢出效应越强;符号为正表示正向溢出(风险同向传递)。
3. 结果存储
  • CoVaR结果:CoVaR05(5%分位数)、CoVaR95(95%分位数)
  • ΔCoVaR结果:deltaCoVaR05deltaCoVaR95

矩阵结构与VaR保持一致,列索引为金融机构/市场名称(排除系统基准)。

(四)结果导出与可视化模块

1. 结果导出

将所有风险指标导出为CSV文件,便于后续分析:

  • VaR系列:VaR05.csvVaR50.csvVaR95.csv
  • CoVaR系列:CoVaR05.csvCoVaR95.csv
  • ΔCoVaR系列:deltaCoVaR05.csvdeltaCoVaR95.csv

文件存储路径为当前工作目录(可通过getwd()函数查看)。

2. 可视化功能

通过plot()函数生成时间序列图,布局为6×6子图(支持最多36个市场/机构),可视化内容包括:

  • VaR05、VaR95的时间变化趋势
  • CoVaR05、CoVaR95的时间变化趋势
  • ΔCoVaR05、ΔCoVaR95的时间变化趋势

图形特征:

  • 横轴为时间(dt),纵轴为风险指标值
  • 线条颜色为深灰色,添加网格线提升可读性
  • 子图标题为“市场/机构名称-指标名称”,便于识别

五、代码适配与扩展指南

(一)数据替换步骤

  1. 将自定义数据按“时间列→收益率列→状态变量列”的顺序整理为收益率.csv
  2. 修改代码中dataydatam的列索引(对应收益率和状态变量的位置)
  3. 若状态变量数量k≠4,同步修改VaR、CoVaR计算公式中的系数项数量(如k=6时,系数项为cof[1]至cof[7])

(二)参数调整说明

  1. 分位数调整:可修改rq()函数中的tau参数(如tau=0.01计算1%分位数的极端风险)
  2. 可视化布局:调整par(mfrow = c(6,6))中的行列数(如c(4,5)适配20个市场/机构)
  3. 输出路径:通过setwd("自定义路径")函数指定结果文件的存储路径(如setwd("C:/RiskAnalysis/Result")

(三)常见问题处理

  1. 中文乱码:若RStudio中注释出现“???”,需将代码复制粘贴至RStudio代码框后,通过File-Save重新保存文件
  2. 回归系数不显著:检查宏观状态变量的选取合理性,建议选择与收益率相关性较强的变量(如利率、汇率波动率等)
  3. 数据缺失:需提前处理缺失值(如插值法、删除缺失行),避免分位数回归报错

六、应用场景与价值

本代码的核心应用场景是金融市场风险溢出效应分析,如参考资料中“沪深股市和香港股市的风险溢出研究”:

  1. 可量化跨市场的双向风险溢出强度(如香港股市对沪市的ΔCoVaR05)
  2. 可捕捉风险溢出的时变特征(通过时间序列图观察不同时期的溢出波动)
  3. 可识别关键风险驱动因素(通过分位数回归系数判断状态变量对风险的影响程度)

代码输出的风险指标可直接用于:

  • 金融监管政策制定(如系统重要性机构的风险评估)
  • 投资组合风险管理(如跨市场风险对冲策略设计)
  • 市场风险预警(如极端风险溢出的提前识别)

七、关键说明

  1. 结果解读:ΔCoVaR为正值时,表明两市场/机构存在正向风险溢出(一方风险上升会带动另一方风险上升);绝对值越大,溢出效应越强。
  2. 模型假设:分位数回归无需对残差分布进行假设,相比GARCH族模型更适用于厚尾、异方差的金融数据。
  3. 样本外验证:参考资料中提到可通过扩展时间窗口(extending window)方法进行样本外预测,验证ΔCoVaR捕捉风险溢出的有效性,可基于本代码的基础结果进一步实现。
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐