专栏名称: 计量经济圈
记录一个我们生活在其中的时代社会,囊括的主题如下:经济、社会、世界和计量工具。
目录
相关文章推荐
21世纪经济报道  ·  李雪琴,被“前老板”实名举报! ·  昨天  
财经早餐  ·  【财经早餐】2025.06.18星期三 ·  昨天  
经济参考报  ·  夜读丨常被好运眷顾的人,都有同一个习惯 ·  2 天前  
51好读  ›  专栏  ›  计量经济圈

系统: 金融时间序列波动率建模, ARCH与GARCH模型及各种最新进展和应用介绍.

计量经济圈  · 公众号  · 财经  · 2025-03-22 18:30

正文

请到「今天看啥」查看全文


在风险管理方面,GARCH 模型被广泛应用于估计在险价值(Value at Risk, VaR)。作为金融机构衡量市场风险的重要指标,VaR 用于量化在特定置信水平和预定时间内投资组合可能面临的最大潜在损失。由于 GARCH 模型能够提供时变的波动率估计,并有效地捕捉到波动率聚集现象(即高波动时期常常伴随着更多的波动),相比于假设波动率恒定的传统方法,其预测结果更能及时地反映市场变化,从而提高 VaR 计算的准确性。
除 VaR 外,GARCH 模型还可用于估计条件在险价值(Conditional Value at Risk, CVaR),亦称预期损失(Expected Shortfall)。CVaR 通过估计当损失超过 VaR 阈值时的预期损失,为衡量尾部风险提供了更为全面的方法。在 GARCH 模型框架下,无论是采用正态分布还是 Student's t 分布等厚尾分布,都能在捕捉极端损失方面发挥关键作用,从而提高 CVaR 的估计精度。
此外,ARCH 与 GARCH 模型也革新了期权定价的方法。传统的 Black-Scholes 期权定价模型依赖于波动率恒定这一在现实中往往不成立的假设,而基于 GARCH 模型的期权定价方法则充分考虑了市场中时变波动率的实际情况,从而实现了更为准确的期权估值。
一些高级的 GARCH 模型甚至将标的资产收益与其波动率之间的相关性纳入模型考量,从而能够更好地捕捉复杂的市场动态。值得注意的是,GARCH 模型还能够解释“波动率微笑”现象,即同一标的资产不同执行价格期权的隐含波动率存在差异;其对正负冲击不对称反应(即杠杆效应)的捕捉能力也为更真实地模拟市场行为提供了有力的支持。
GARCH 模型的另一个主要应用领域在于波动率预测。通过对历史价格走势和波动率的跟踪分析,GARCH 模型能够生成对未来波动性的有效预测。在预测过程中,模型通常会结合长期平均方差、当前的预测方差以及反映最新市场信息的平方残差的加权平均。与简单的历史波动率或从期权价格中反推得到的隐含波动率相比,GARCH 模型由于充分考虑了波动率聚集和持续性等关键特性,其预测精度通常更高。
最后,ARCH 与 GARCH 模型在资产定价领域也发挥着重要的作用(这个不用多说,大家都知道)。波动率是决定金融资产风险溢价的基本因素之一。为了捕捉这种关系,学者们提出了 GARCH-in-Mean(GARCH-M)模型,该模型在标准的 GARCH 框架上进行了进一步的扩展,允许收益序列的条件均值依赖于其条件方差(或标准差)。
这一设定反映了投资者通常会因为承担更高的风险(以波动率衡量)而要求更高的预期收益的经济学直觉。实际上,ARCH 模型的最初发展部分正是基于对通货膨胀率等宏观经济变量的不确定性对经济产生负面影响的认识。通过为时变波动率的建模和预测提供一个严谨的统计框架,ARCH 与 GARCH 模型为构建更为复杂和贴近实际的资产定价模型做出了重要的贡献。
如何实现 ARCH 和 GARCH 模型呢?展示一点实用代码示例
借助 R 语言、Python 等编程语言中功能强大的统计软件包与库,实现 ARCH 和 GARCH 模型已变得相对便捷。这些工具提供了用于模型构建、参数估计以及预测等环节的一系列函数和框架,极大地简化了整个分析流程。

*时间序列中,当然完全可以使用Stata建模,不过R和Python在这方面更加全能一些。

在 R 语言中, rugarch 包是一款功能全面的 GARCH 模型工具,备受研究者青睐。该包支持多种 GARCH 模型规格、不同的分布假设以及丰富的诊断性检验。例如,使用 rugarch 指定、拟合并展示一个基本的 GARCH(1,1) 模型(假设条件误差服从正态分布)通常可以采用如下 R 代码:

library(rugarch)

# 定义采用正态分布的 GARCH(1,1) 模型设定
garch11.spec variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0)),
distribution.model = "norm"
)

# 假设收益数据存储在名为 'returns' 的时间序列对象中
# 拟合 GARCH(1,1) 模型
garch11.fit
# 打印模型估计结果
show(garch11.fit)
上述代码首先加载 rugarch 包,然后利用 ugarchspec 函数定义模型的具体规格:将方差模型设定为标准的 GARCH 模型( sGARCH ),阶数指定为 (1,1);均值模型设定为常数模型( armaOrder = c(0, 0) );并假定条件误差项服从正态分布( distribution.model = "norm" )。随后, ugarchfit 函数将根据定义的模型规格拟合存储在名为 returns 的时间序列数据,最后通过 show 函数展示模型的估计结果摘要,其中包括参数估计值、标准误差以及其他相关的统计量。
除了基本的 GARCH 模型外, rugarch 包还支持多种模型扩展形式和不同的分布假设,为研究者在 R 语言环境下进行波动率建模提供了灵活且强大的平台。
在 Python 语言中, arch 包是实现 ARCH 与 GARCH 模型的常用选择。该库为处理这些波动率模型提供了简洁而高效的方法。以下是一个使用 arch 包指定、拟合和预测 GARCH(1,1) 模型的 Python 代码示例:
Python

from arch import arch_model
import pandas as pd

# 假设收益数据存储在名为 'returns' 的 pandas Series 中

# 1. 模型设定
model = arch_model(returns, p=1, q=1) # 指定 GARCH(1,1) 模型,使用默认设置

# 2. 模型拟合
results = model.fit(update_freq=5) # 拟合模型,并每 5 次迭代显示一次进度

# 3. 查看拟合结果:参数
print(results.params) # 打印估计参数(如 omega、alpha、beta)

# 4. 查看拟合结果:摘要
print(results.summary()) # 打印模型拟合结果摘要

# 5. 查看拟合结果:图示
results.plot() # 绘制标准化残差及条件波动率图示

# 6. 模型预测(例如,预测未来 5 期)
forecast_result = results.forecast(horizon=5)
print(forecast_result.variance) # 打印预测的方差(条件波动率)

这段代码首先从 arch 包中导入 arch_model 函数,并引入用于数据处理的 pandas 库。随后,通过调用 arch_model 函数并将收益数据传入,同时将自回归项阶数 p 和移动平均项阶数 q 均设置为 1,从而指定了一个 GARCH(1,1) 模型。利用 fit 方法估计模型的参数,并通过设置 update_freq=5 ,使得模型在拟合过程中每 5 次迭代输出一次优化进度。
接着,代码分别获得估计得到的模型参数和完整的模型拟合结果摘要,并使用 plot 方法生成标准化残差和条件波动率的时序图。最后,借助 forecast 方法预测未来 5 期的波动率,并打印出预测得到的方差序列。Python 中的 arch 包同样支持多种均值模型、波动率模型(包括 ARCH、EGARCH 等)以及不同的条件分布假设,为进行全面的波动率分析提供了多样化的工具。
另一个 Python 示例展示了如何利用 arch 包对实际的股票价格数据进行波动率预测:
Python

import numpy as np
import pandas as pd
import yfinance as yf
from arch import arch_model
import matplotlib.pyplot as plt

# 下载数据
ticker = 'SPY'
start_date = '2005-01-01'
end_date = '2024-05-30'

sp_data = yf.download(
  tickers=ticker,
  start=start_date,
  end=end_date,
  progress=False
)

# 删除 'Adj Close' 列
sp_data = sp_data.drop(columns='Adj Close')

# 计算每日收益率(百分比)
returns = 100 * sp_data['Close'].pct_change().dropna()

# 指定 GARCH 模型设置
basic_gm = arch_model(returns, p=1, q=1,
                      mean='constant', vol='GARCH', dist='normal')

# 拟合模型
result = basic_gm.fit(update_freq=4)

# 获取波动率预测结果
forecast_volatility = result.forecast(horizon=5)

# 打印预测的方差
print(forecast_volatility.variance[-1:])

# 可视化拟合模型及预测结果
fig = result.plot(annualize="D")
fig.set_dpi(750)
plt.show()

该示例展示了一个更为完整的工作流程:首先利用 yfinance 库下载标普 500 指数的历史股票价格数据;接着计算每日的收益率(以百分比表示);然后使用 arch_model 函数指定并拟合一个均值固定为常数、条件误差服从正态分布的 GARCH(1,1) 模型;随后利用 forecast 方法预测未来 5 期的波动率;最后打印出预测得到的方差值,并通过 matplotlib 库进行可视化展示,包括拟合的模型和预测结果。
这些 R 语言和 Python 语言的代码示例清晰地展示了如何实现和应用 ARCH 与 GARCH 模型进行金融时间序列的分析。
通过几个具体案例,来看看ARCH和GARCH模型的现实应用
通过大量的案例研究,ARCH 与 GARCH 模型在分析不同时期、不同市场中各类金融资产的波动率方面展现了其广泛的适用性和高效性。这些研究为模型捕捉金融波动率的关键特性,如波动率聚集性、持续性以及杠杆效应,提供了坚实的实证支持。
例如,一项研究专注于利用 ARCH 与 GARCH 模型对肯尼亚股市(内罗毕证券交易所)的每日收益波动进行建模,研究结果揭示了该市场中高度持续的波动性特征。
另一项针对尼日利亚证券交易所保险类股票的研究发现,无论是采用 GARCH(0,3)(等价于 ARCH(3) 模型)还是 GARCH(1,1) 模型,都能够有效地反映这些股票固有的波动特性。
此外,一项对欧洲新兴市场国家(包括保加利亚、捷克、波兰、匈牙利)和土耳其市场的比较研究表明,捷克(PX)、匈牙利(BUX)、波兰(WIG)以及土耳其(XU100)等股指的收益率均存在显著的 GARCH 效应,这表明条件异方差性在这些市场中普遍存在。
此外,将GARCH(1,1)、指数GARCH(Exponential GARCH, EGARCH(1,1))以及门限GARCH(Threshold GARCH, TGARCH(1,1))模型应用于股市数据的研究均证实了杠杆效应的存在,即负面冲击对未来波动率的影响通常大于相同幅度正面冲击的影响。
近期的一项研究探讨了在极端市场条件下,使用 EGARCH 与 TGARCH 模型对印度 NIFTY50 指数进行波动率预测,发现引入杠杆效应后能够显著提高市场崩盘期间的预测准确性。
还有一项关于马德里证券交易所的研究,通过 TGARCH 模型有效地捕捉了正向和负向冲击下波动率响应的不对称性。对印度股市中可持续发展指数与传统指数的分析则利用非对称向量自回归 (Vector Autoregression, VAR)-BEKK-GARCH 模型发现,在 COVID-19 大流行之前,这两个指数之间存在双向的波动率溢出效应,而在大流行期间,这种溢出效应则转变为单向,这清晰地揭示了不同市场板块之间动态关系的变化。
不仅如此,ARCH 与 GARCH 模型也被广泛应用于对各国汇率波动率的建模分析。相关研究表明,过去的汇率变动信息对当前的汇率波动性具有显著的影响,并且汇率波动往往表现出明显的持续性和杠杆效应。
此外,宏观经济政策以及重大经济事件,例如大宗商品价格的波动,也对汇率波动产生显著的影响,这些研究洞见对于国际贸易、投资以及风险管理等领域都具有重要的指导意义。
ARCH、GARCH建模时需要注意的地方,以及各种诊断指标。
尽管 ARCH 和 GARCH 模型是分析和预测波动率的有力工具,但其有效应用仍需仔细考虑若干关键问题,包括模型阶数的选择、模型诊断以及对其内在局限性的充分认识。
在构建 ARCH 与 GARCH 模型时,一个核心步骤是选择合适的模型阶数,这通常通过参数 p(表示 GARCH 模型中条件方差的滞后项数)和 q(表示 ARCH 模型中平方残差或 ARCH 项的滞后项数)来确定。为此,研究者可以采取多种策略。首先,通过检查已拟合均值模型(例如 ARIMA 模型)所得残差平方的自相关函数(Autocorrelation Function, ACF)和偏自相关函数(Partial Autocorrelation Function, PACF),可以初步判断 ARCH 成分的可能阶数。
例如,如果残差平方的 PACF 在滞后 m 处出现显著的尖峰后迅速截尾,则可能表明 ARCH 模型的阶数为 m;类似地,如果残差平方的 ACF 与 PACF 呈现出类似于 ARMA 过程的特征,则可能更适合采用 GARCH 模型。除此之外,还可以采用恩格尔(Engle)提出的 ARCH 检验等正式的统计方法,检测均值方程的残差中是否存在 ARCH 效应,从而判断是否需要对波动率进行建模。对于 GARCH 模型,通过分析残差平方的自相关性并应用 Ljung-Box 检验,也可以辅助确定适当的 GARCH 滞后阶数 p。
此外,信息准则(例如赤池信息准则 AIC 和贝叶斯信息准则 BIC)在模型选择过程中也扮演着至关重要的角色。研究者可以通过拟合不同阶数组合 (p,q) 的 GARCH 模型,并比较其 AIC 和 BIC 值,进而选择在模型拟合优度和模型简约性之间达到最佳平衡的模型——通常情况下,AIC 和 BIC 值越低,表明模型越优。
模型拟合完成之后,必须进行全面的模型诊断,以评估其在捕捉波动率动态方面的有效性。其中,残差分析尤为关键,具体而言,需要检查标准化残差(即用模型估计的条件标准差标准化后的残差)。理想情况下,如果 GARCH 模型成功地捕捉了时变的波动率,那么标准化残差应该表现为白噪声序列,即不应存在显著的自相关性,且其方差应保持恒定。
为此,可以采用多种统计检验方法:例如,对标准化残差及其平方序列应用 Ljung-Box 检验,以检测在不同滞后期是否存在自相关性;一个设定良好的 GARCH 模型应该产生无显著自相关的标准化残差。ARCH 拉格朗日乘数(Lagrange Multiplier, LM)检验则可以用于判断平方标准化残差中是否仍然存在 ARCH 效应或条件异方差性;如果在检验中未发现显著的 ARCH 效应,则说明模型已经充分地捕捉到了原始序列的波动率聚集特性。
恩格尔与伍(Engle and Ng)提出的符号偏误检验,则通过检查过去冲击的符号和幅度是否能够预测标准化残差的平方,从而帮助识别模型设定中可能存在的不足。尼布洛姆(Nyblom)稳定性检验则提供了一种评估模型参数在样本期间是否保持稳定或者存在结构性变化的方法。最后,调整后的皮尔逊卡方(Pearson Chi-squared)拟合优度检验可以用于比较标准化残差的经验分布与模型所假定的理论分布(例如正态分布或 Student's t 分布)之间的差异。此外,还必须验证 GARCH 模型估计得到的参数是否满足正定性和平稳性的要求。例如,在 GARCH(1,1) 模型中,参数 ω、α1、β1 均应为非负值,并且 α1+β1 的和应小于 1,以确保模型的平稳性。
标准的 ARCH 与 GARCH 模型的一个主要局限性在于,它们通常假设误差项服从正态分布。然而,实证研究表明,金融时间序列普遍具有厚尾特性,即极端事件发生的概率远高于正态分布的预测。标准的 GARCH 模型对这些极端值可能较为敏感,从而可能对参数估计产生不成比例的影响。为了更好地反映金融数据的厚尾特性,研究者通常在 GARCH 模型的框架内采用其他的分布假设,例如 Student's t 分布或偏态 Student's t 分布,这些分布具有更厚的尾部,能够更准确地捕捉极端事件发生的较高概率。






请到「今天看啥」查看全文