5 min read

基于GRACH模型计算VaR

一、引言

风险价值(VaR)是衡量金融资产潜在损失的核心指标,但传统方法假设收益率服从独立同分布的正态分布,难以捕捉金融时间序列的 “波动聚类”(volatility clustering)和 “尖峰厚尾” 特性。

ARCH(自回归条件异方差)模型及扩展的 GARCH(广义自回归条件异方差)模型通过刻画波动率的动态变化,能更精准地拟合收益率分布,从而提升 VaR 估计的可靠性。

本文以特斯拉(TSLA)股票收益率为例,详细介绍 GARCH 模型的构建、参数估计及 VaR 计算流程,并通过 R 语言quantmod和rgarch包实现实证分析。

二、GARCH 模型理论

ARCH 模型基础

ARCH 模型假设资产收益率的条件方差依赖于过去的平方残差,其核心是波动率的动态性。

均值方程:

\[ r_t = \mu + \epsilon_t \tag{1} \]

其中,

\(r_t\) 为 t 时刻的收益率,

\(\mu\) 为常数均值,

\(\epsilon_t\) 为随机扰动项,且 \(\epsilon_t = \sigma_t \cdot z_t\)\(z_t\) )为独立同分布的随机变量,通常假设 \(z_t \sim N(0,1)\) )。

条件方差方程(ARCH (q)):

\[\sigma_t^2 = \omega + \alpha_1 \epsilon_{t-1}^2 + \alpha_2 \epsilon_{t-2}^2 + ... + \alpha_q \epsilon_{t-q}^2 \tag{2} \]

其中,\(\sigma_t^2\) 为 t 时刻的条件方差,\(\omega > 0\)\(\alpha_i \geq 0\) (保证方差非负),q为 ARCH 阶数。

GARCH 模型扩展

GARCH 模型在 ARCH 基础上引入过去的条件方差项,简化了高阶 ARCH 模型的参数估计。最常用的 GARCH (p,q) 模型形式为:

均值方程:同式(1)

条件方差方程(GARCH (p,q)):

\[ \sigma_t^2 = \omega + \sum_{i=1}^p \beta_i \sigma_{t-i}^2 + \sum_{j=1}^q \alpha_j \epsilon_{t-j}^2 \tag{3} \]

其中,p为 GARCH 阶数(滞后条件方差项),q为 ARCH 阶数(滞后平方残差项),且 \(\omega > 0\)\(\beta_i \geq 0\)\(\alpha_j \geq 0\)\(\sum_{i=1}^p \beta_i + \sum_{j=1}^q \alpha_j < 1\) (保证方差平稳)。

实际应用中,GARCH (1,1) 模型因简洁且拟合效果好而被广泛使用:

\[ \sigma_t^2 = \omega + \beta_1 \sigma_{t-1}^2 + \alpha_1 \epsilon_{t-1}^2 \tag{4} \]

模型扩展与分布假设变种模型:通过修改条件方差方程可得到 EGARCH(指数 GARCH,捕捉杠杆效应)、IGARCH(积分 GARCH,非平稳波动率)等。

分布假设:为捕捉 “尖峰厚尾”,可假设扰动项 \(z_t\) 服从学生 t 分布(GARCH-t)、广义误差分布(GARCH-GED)等,而非正态分布。

基于 GARCH 模型的 VaR 计算

给定置信水平 \(1-\alpha\) (如 95%、99%),VaR 定义为:

\[ VaR_t = \mu_t + \sigma_t \cdot z_\alpha \tag{5} \]

其中:

\(\mu_t\) 为 t 时刻的条件均值(通常假设为 0 或常数);

\(\sigma_t\) 为 GARCH 模型预测的条件标准差;

\(z_\alpha\) 为扰动项分布的 \(\alpha\) 分位数(如正态分布下 95% 置信水平的 \(z_\alpha = -1.645\) )。

三、R 语言实证分析(TSLA 数据)

  1. 数据准备与预处理使用 quantmod 获取 TSLA 股票数据并计算对数收益率:
# 安装并加载包
if (!require("quantmod")) install.packages("quantmod")
if (!require("rugarch")) install.packages("rugarch")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(rugarch)
library(ggplot2)

# 获取TSLA数据(2018-2023年)
getSymbols("TSLA", from = "2018-01-01", to = "2023-12-31")
## [1] "TSLA"
tsla_close <- TSLA$TSLA.Close  # 提取收盘价
ret <- diff(log(tsla_close))  # 计算对数收益率
ret <- na.omit(ret)  # 去除缺失值
colnames(ret) <- "TSLA_Return"
  1. 拟合 GARCH 模型以 GARCH (1,1) 为例,分别假设正态分布、t 分布和 GED 分布:
# 定义模型规范(正态分布)
garch_spec_norm <- ugarchspec(
  variance.model = list(model = "sGARCH", garchOrder = c(1,1)),  # 标准GARCH(1,1)
  mean.model = list(armaOrder = c(0,0)),  # 均值模型为常数(无ARMA项)
  distribution.model = "norm"  # 正态分布
)

# 拟合模型
garch_fit_norm <- ugarchfit(spec = garch_spec_norm, data = ret)
print(garch_fit_norm)  # 输出参数估计结果
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics 	
## -----------------------------------
## GARCH Model	: sGARCH(1,1)
## Mean Model	: ARFIMA(0,0,0)
## Distribution	: norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error  t value Pr(>|t|)
## mu      0.001551    0.000945   1.6407 0.100852
## omega   0.000080    0.000025   3.1932 0.001407
## alpha1  0.066008    0.013489   4.8936 0.000001
## beta1   0.883325    0.026129  33.8057 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu      0.001551    0.001042   1.4883 0.136684
## omega   0.000080    0.000041   1.9324 0.053305
## alpha1  0.066008    0.020564   3.2098 0.001328
## beta1   0.883325    0.040170  21.9898 0.000000
## 
## LogLikelihood : 2784.519 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -3.6877
## Bayes        -3.6736
## Shibata      -3.6877
## Hannan-Quinn -3.6824
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.02525  0.8737
## Lag[2*(p+q)+(p+q)-1][2]   0.92656  0.5227
## Lag[4*(p+q)+(p+q)-1][5]   2.41996  0.5230
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.06154  0.8041
## Lag[2*(p+q)+(p+q)-1][5]   1.91852  0.6378
## Lag[4*(p+q)+(p+q)-1][9]   3.32230  0.7048
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.1339 0.500 2.000  0.7144
## ARCH Lag[5]    0.1515 1.440 1.667  0.9765
## ARCH Lag[7]    1.3871 2.315 1.543  0.8437
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.7741
## Individual Statistics:             
## mu     0.1583
## omega  0.1017
## alpha1 0.1429
## beta1  0.0778
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:     	 1.07 1.24 1.6
## Individual Statistic:	 0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.1675 0.8670    
## Negative Sign Bias  0.3152 0.7527    
## Positive Sign Bias  0.5054 0.6134    
## Joint Effect        0.4957 0.9198    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     99.19    7.510e-13
## 2    30    112.84    7.843e-12
## 3    40    122.45    1.505e-10
## 4    50    129.67    3.238e-09
## 
## 
## Elapsed time : 0.1193922
# 扩展:拟合GARCH-t和GARCH-GED
garch_spec_t <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1,1)),
                           mean.model = list(armaOrder = c(0,0)),
                           distribution.model = "std")  # 学生t分布
garch_fit_t <- ugarchfit(spec = garch_spec_t, data = ret)

garch_spec_ged <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1,1)),
                             mean.model = list(armaOrder = c(0,0)),
                             distribution.model = "ged")  # GED分布
garch_fit_ged <- ugarchfit(spec = garch_spec_ged, data = ret)
  1. 模型参数解读

GARCH (1,1) 模型的核心参数为:

\(\omega\) :常数项(长期方差水平);

\(\alpha_1\) :ARCH 项系数(过去平方残差的影响);

\(\beta_1\) :GARCH 项系数(过去波动率的影响);

\(\alpha_1 + \beta_1 < 1\) ,说明波动率平稳。

  1. 计算 VaR基于拟合模型预测条件波动率,并计算不同置信水平的 VaR:
# 提取条件标准差(在样内预测)
sigma_norm <- sigma(garch_fit_norm)  # 正态分布GARCH的条件标准差

# 定义分位数函数(计算z_alpha)
quantile_fun <- function(conf_level, dist) {
  alpha <- 1 - conf_level
  if (dist == "norm") {
    return(qnorm(alpha))  # 正态分布分位数
  } else if (dist == "std") {
    nu <- coef(garch_fit_t)["shape"]  # 学生t分布自由度
    return(qt(alpha, df = nu))
  } else if (dist == "ged") {
    nu <- coef(garch_fit_ged)["shape"]  # GED分布形状参数
    return(qged(alpha, shape = nu))
  }
}

# 计算95%和99%置信水平的VaR(以正态分布为例)
conf_levels <- c(0.95, 0.99)
z_95 <- quantile_fun(0.95, "norm")
z_99 <- quantile_fun(0.99, "norm")

vaR_95_norm <- 0 + sigma_norm * z_95  # 假设条件均值为0
vaR_99_norm <- 0 + sigma_norm * z_99

# 整理结果(取绝对值,损失为正)
vaR_df <- data.frame(
  Date = index(ret),
  Return = as.numeric(ret),
  VaR_95 = abs(vaR_95_norm),
  VaR_99 = abs(vaR_99_norm)
)
  1. 结果可视化与回测
# 可视化收益率与VaR
ggplot(vaR_df, aes(x = Date)) +
  geom_line(aes(y = Return, color = "收益率"), alpha = 0.7) +
  geom_line(aes(y = VaR_95, color = "95% VaR"), linetype = "dashed") +
  geom_line(aes(y = VaR_99, color = "99% VaR"), linetype = "dashed") +
  labs(title = "TSLA收益率与GARCH模型VaR",
       y = "收益率/损失", x = "日期", color = "指标") +
  theme_minimal()

# 回测:计算失败率(实际损失超过VaR的比例)
fail_95 <- mean(vaR_df$Return < -vaR_df$VaR_95, na.rm = TRUE)
fail_99 <- mean(vaR_df$Return < -vaR_df$VaR_99, na.rm = TRUE)
cat("95% VaR失败率:", round(fail_95 * 100, 2), "%\n")
## 95% VaR失败率: 4.64 %
cat("99% VaR失败率:", round(fail_99 * 100, 2), "%\n")
## 99% VaR失败率: 1.59 %
  1. 不同模型的 VaR 对比

可对比 GARCH-t、GARCH-GED 与正态 GARCH 的 VaR 结果,通常非正态分布假设下的 VaR 更大,更保守:

# 计算GARCH-t的VaR(95%置信水平)
sigma_t <- sigma(garch_fit_t)
z_95_t <- quantile_fun(0.95, "std")
vaR_95_t <- abs(sigma_t * z_95_t)

四、结论

GARCH 模型通过捕捉波动率的动态变化,显著提升了 VaR 估计的准确性,尤其在市场波动剧烈时期(如 TSLA 股价大幅波动阶段)。

实证显示:TSLA 收益率存在明显的波动聚类特性,GARCH (1,1) 能有效拟合;基于 t 分布或 GED 分布的 GARCH 模型计算的 VaR 更能反映尾部风险,失败率更接近理论置信水平;实际应用中可根据资产特性选择模型变种(如 EGARCH 捕捉杠杆效应)或分布假设。

未来可结合滚动窗口预测或压力测试,进一步优化 VaR 的动态跟踪能力。

注:代码中rugarch包的ugarchspec和ugarchfit函数需注意模型收敛性,若不收敛可调整初始值或模型阶数;回测失败率若显著偏离理论值(如 95% 置信水平下失败率 > 7%),需重新调整模型。​