首页 > 其他分享 >计量经济学(七)——时间序列GARCH模型

计量经济学(七)——时间序列GARCH模型

时间:2024-10-16 20:58:58浏览次数:8  
标签:02 plt data 模型 计量经济学 GARCH 序列 ARCH

金融市场中的波动性建模是金融计量经济学的重要研究内容。时间序列数据,尤其是金融市场数据,往往表现出强烈的波动聚集现象,这意味着波动率在某些时期较高,而在其他时期较低,波动性具有异方差性(heteroskedasticity)。为了有效描述这种现象,Engle(1982年)提出了ARCH(自回归条件异方差)模型,此后Bollerslev(1986年)又在其基础上发展了GARCH(广义自回归条件异方差)模型,成为金融波动性建模的重要工具。

方差在金融学中被广泛用于衡量投资组合的风险和波动性。波动性反映了资产回报率的变动程度,方差则定量表示这一波动性。当资产的回报率方差较大时,投资收益的不确定性也较高,意味着风险较大。马科维茨的资产组合理论(Markowitz Portfolio Theory)是现代投资组合理论的基石,该理论基于方差来优化投资组合的风险与收益平衡。马科维茨提出,通过将不同资产组合在一起,投资者可以降低总体风险,因为各资产的收益率并非完全正相关。通过计算各资产的期望收益和方差,投资者可以找到“有效前沿”(Efficient Frontier),即在相同风险水平下最大化预期收益的投资组合。资产组合的总方差(即风险)不仅取决于各资产的方差,还取决于它们之间的协方差,因此分散投资有助于减少非系统性风险。

一、ARCH模型的基本结构

金融数据的特性之一是波动性集中的特征,这意味着大波动常常跟随大波动,小波动跟随小波动,这种现象与方差的动态变化密切相关。在经典的线性回归模型中,误差项的方差通常被假设为常数,即同方差性(homoscedasticity),但对于金融时间序列,这一假设往往不成立。为了建模这种条件异方差性,Engle在1982年提出了ARCH模型,它可以捕捉到金融数据中波动性的时间依赖性。

1.1 ARCH模型的数学形式

ARCH模型是通过假设当前时刻的方差依赖于之前时刻的误差项的平方来实现的。假设时间序列\(y_t\)​的生成过程如下:

\[y_t = \mu + \epsilon_t \quad \epsilon_t = \sigma_t z_t \]

其中,\(\epsilon_t\)为残差,服从均值为0的条件正态分布,\(\sigma_t^2\)为条件方差,且\(z_t\)​为独立同分布(iid)随机变量,通常假设其服从标准正态分布。

ARCH(q)模型假设条件方差是前q期残差平方的线性函数,表示为:

\[\sigma_t^2 = \alpha_0 + \alpha_1 \epsilon_{t-1}^2 + \alpha_2 \epsilon_{t-2}^2 + \dots + \alpha_q \epsilon_{t-q}^2 \]

其中,\(\alpha_0 > 0\),且\(\alpha_i \geq 0(i=1, 2, \dots, q)\),以保证方差非负。通过ARCH模型,波动性能够随时间动态变化,且过去的误差项会影响当前的条件方差。

1.2 ARCH模型的局限性

ARCH模型通过有限个滞后期的误差项平方描述方差的变化,因此模型的阶数q越高,能够捕捉的波动性信息越多。但这一特性也带来了局限性:

  • 高阶问题:为了捕捉长时间序列中的波动性,ARCH模型需要较高的阶数,这使得模型估计过程变得复杂,参数估计也变得不稳定。
  • 波动持久性问题:ARCH模型假设波动性仅依赖于有限期的误差项,未能有效捕捉金融数据中波动性的长记忆特性(即波动性持久性)。

为了克服这些问题,Bollerslev(1986年)在ARCH模型的基础上提出了GARCH模型。

二、GARCH模型

GARCH模型是对ARCH模型的推广,其通过引入条件方差的自回归结构来简化模型的阶数并同时捕捉到波动性持久性。与ARCH模型只包含滞后期的残差平方不同,GARCH模型还引入了前期条件方差的自回归成分,从而降低了模型的阶数需求,并有效捕捉到长时期的波动动态。

2.1 GARCH模型的数学形式

GARCH(p, q)模型结合了ARCH和ARMA模型的思想。它假设当前的条件方差不仅与过去的误差项平方相关,还与之前的条件方差有关。其形式为:

\[y_t = \mu + \epsilon_t \]

\[\epsilon_t = \sigma_t z_t \]

\[\sigma_t^2 = \alpha_0 + \sum_{i=1}^{q} \alpha_i \epsilon_{t-i}^2 + \sum_{j=1}^{p} \beta_j \sigma_{t-j}^2 \]

其中,\(\alpha_i \geq 0\) 和 \(\beta_j \geq 0\) 确保条件方差为正值;\(\alpha_0\) 是常数项;\(\alpha_i\) 为ARCH项的参数,表示误差项平方的影响;\(\beta_j\) 为GARCH项的参数,表示前期条件方差的影响。

2.2 GARCH(1,1)模型

最常见的GARCH模型是GARCH(1,1),即条件方差仅依赖于上一期的误差平方和上一期的条件方差。其形式为:

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

GARCH(1,1)模型的优势在于其简洁性,尽管是一个低阶模型,但通常能够很好地拟合金融时间序列中的波动性特征。

相比ARCH模型,GARCH模型具有以下优势:

  • 降低模型阶数:GARCH模型通过引入条件方差的自回归部分,减少了对高阶ARCH项的依赖,从而简化了模型的结构。
  • 波动性持久性:GARCH模型能够捕捉到波动性的持久性,即大波动通常会持续较长时间,这与金融市场中的实际情况相符。
  • 自适应性:GARCH模型可以灵活调整,能够适应不同金融时间序列的特性。

2.3 模型的转换

ARCH模型的基本思想是条件方差依赖于过去的残差项平方,这类似于自回归模型对均值的依赖。然而,ARCH模型的一个缺点是当需要捕捉长时记忆的波动性时,必须引入较高阶的ARCH项,导致模型参数繁多,模型复杂性增加。为此,GARCH模型引入了条件方差的自回归部分,使得模型不仅依赖于过去的残差项平方,还依赖于过去的条件方差。可以将GARCH模型视为将ARCH模型中的高阶滞后项“打包”为条件方差的一个移动平均过程。其核心思想是:通过将高阶ARCH模型的滞后结构简化为条件方差的ARMA过程,减少了参数个数的同时,仍能捕捉到长期的波动性特征。
在均值方程中,ARMA模型通过自回归和移动平均部分描述了时间序列的动态过程;类似地,在方差方程中,GARCH模型通过条件方差的自回归部分和误差项平方的移动平均部分描述波动率的动态变化。因此,GARCH模型可以视作在异方差框架下的ARMA模型:
- ARCH部分类似于移动平均过程(MA),它描述了过去误差项的影响。
- GARCH部分类似于自回归过程(AR),它描述了过去条件方差的影响。
这种类比为我们理解GARCH模型提供了直观的框架。

三、GARCH模型的估计与检验

GARCH模型的参数估计通常采用最大似然估计(MLE)方法。具体来说,在给定样本数据的情况下,通过对似然函数进行最大化处理,获得模型参数的估计值。

3.1 构建似然函数

假设误差项 \(\epsilon_t\) 服从正态分布,即 \(z_t \sim N(0,1)\),那么条件似然函数为:

\[L(\theta) = \prod_{t=1}^{n} f(y_t | \mathcal{F}_{t-1}, \theta) \]

其中,\(\theta\) 为模型参数的集合,\(\mathcal{F}_{t-1}\) 表示基于过去信息的条件分布,\(f(y_t | \mathcal{F}_{t-1}, \theta)\) 是条件正态分布的概率密度函数。

对数似然函数为:

\[\ell(\theta) = \sum_{t=1}^{n} \log f(y_t | \mathcal{F}_{t-1}, \theta) \]

对于正态分布的GARCH模型,条件对数似然函数为:

\[\ell(\theta) = -\frac{n}{2} \log(2\pi) - \frac{1}{2} \sum_{t=1}^{n} (\log \sigma_t^2 + \frac{\epsilon_t^2}{\sigma_t^2}) \]

通过最大化该对数似然函数,可以获得模型的参数估计值。由于GARCH模型的条件方差方程是非线性的,对数似然函数的最大化通常需要使用数值优化算法,如BFGS算法或牛顿-拉夫森法。这些方法能够有效地找到对数似然函数的最优解,从而估计出模型参数。

3.2 GARCH模型的检验方法

在估计GARCH模型后,需对其进行检验,以判断模型的有效性和拟合优度。常见的检验方法包括残差检验和参数显著性检验。

残差检验。对于GARCH模型,估计得到的标准化残差应满足独立同分布的要求。因此,可以通过以下两种方法对残差进行检验:

  • Ljung-Box检验:用于检验残差的自相关性,若模型正确拟合,则残差序列应无显著自相关。
  • ARCH效应检验:用于检验残差平方序列是否存在自相关性,若模型正确拟合,则残差平方序列应无显著自相关。
    参数显著性检验。估计得到的参数应满足显著性检验,即每个参数的t值应显著不同于零。这可以通过检验参数的标准误来实现,若参数的t值超过某一临界值,则该参数被认为是显著的。
    信息准则选择模型阶数。为了选择合适的GARCH模型阶数,通常使用信息准则(如AIC或BIC)来对不同阶数的模型进行比较。信息准则考虑了模型的拟合优度和复杂度,阶数较低的模型通常具有较低的AIC/BIC值,因此可以通过比较信息准则来选择最佳模型。

四、案例分析

沪深300指数下载网址

沪深300指数,是由沪深证券交易所于 2005 年 4 月 8 日联合发布的反映沪深 300 指数编制目标和运行状况的金融指标,并能够作为投资业绩的评价标准,为指数化投资和指数衍生产品创新提供基础条件。因此,本次数据来源于网易财经,研究的数据集对象是沪深 300 指数(股票代码为000300),此次分析选取了沪深 300 指数2013年1月4日到2019年10月17日的工作日收盘价格数据,数据文件为000300.csv。

4.1 时序图

为了分析数据的波动情况,对其进行对数化和差分得到对数收益率,下图为沪深 300 指数的收盘价时序图和对数收益率时序图。

收盘价 对数收益率
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates  # 导入处理日期格式的模块
import os

# 获取当前工作路径并找到数据文件
current_path = os.getcwd()
file_path = os.path.join(current_path, '000300.csv')

# 读取沪深300指数的CSV文件
data = pd.read_csv(file_path)

# 确保 'Date' 列是时间序列格式,并矫正格式为 'YYYY-MM-DD'
# 假设 'Date' 列格式为 'YYYYMMDD',我们指定格式来解析它
data['Date'] = pd.to_datetime(data['Date'], format='%Y%m%d')
data.set_index('Date', inplace=True)

# 绘制沪深300指数收盘价时序图
plt.figure(figsize=(10, 5))
plt.plot(data['Close'], label='HS300 Closing Price')
plt.title('HS300 Closing Price Time Series')
plt.xlabel('Date')
plt.ylabel('Closing Price')

# 只显示年份在时间轴
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.YearLocator())

plt.grid(True)
plt.legend()
plt.show()

# 计算对数收益率:log(收盘价) 的差分
data['log_return'] = np.log(data['Close']).diff()

# 绘制对数收益率时序图
plt.figure(figsize=(10, 5))
plt.plot(data['log_return'], label='HS300 Log Returns', color='orange')
plt.title('HS300 Log Returns Time Series')
plt.xlabel('Date')
plt.ylabel('Log Returns')

# 只显示年份在时间轴
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.YearLocator())

plt.grid(True)
plt.legend()
plt.show()

4.2 ARCH模型建立

为了对收益率数据进行ARCH模型的检验,首先我们需要使用arch库进行拟合和检验,确定其阶数,并基于残差和残差平方的图形表示模型的拟合效果。步骤概述:

对收益率数据(对数收益率)进行ARCH效应的检验,可以使用Ljung-Box检验来判断是否存在自相关。
然后对ARCH模型进行拟合,通过AIC、BIC等准则确定最佳阶数。
模型残差和残差平方图:
绘制模型的残差图和残差平方图,以评估模型的拟合效果。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import os
from arch import arch_model
from statsmodels.stats.diagnostic import acorr_ljungbox

# 获取当前工作路径并找到数据文件
current_path = os.getcwd()
file_path = os.path.join(current_path, '000300.csv')

# 读取沪深300指数的CSV文件
data = pd.read_csv(file_path)

# 确保 'Date' 列是时间序列格式,并矫正格式为 'YYYY-MM-DD'
data['Date'] = pd.to_datetime(data['Date'], format='%Y%m%d')
data.set_index('Date', inplace=True)

# 计算对数收益率:log(收盘价) 的差分
data['log_return'] = np.log(data['Close']).diff()

# 删除NaN值(第一个值会是NaN,以及可能的其他NaN值)
data = data.dropna()

# **对数收益率缩放:乘以100**
data['log_return_scaled'] = data['log_return'] * 100

# 1. Ljung-Box检验:检验收益率序列的ARCH效应(是否存在自相关)
lb_test = acorr_ljungbox(data['log_return_scaled'], lags=[10], return_df=True)
print("Ljung-Box Test:")
print(lb_test)

# 2. 拟合ARCH模型
best_aic = np.inf
best_bic = np.inf
best_order = None
for i in range(1, 11):  # 尝试1到10阶的ARCH模型
    model = arch_model(data['log_return_scaled'], vol='ARCH', p=i)
    result = model.fit(disp='off')
    
    if result.aic < best_aic:
        best_aic = result.aic
        best_bic = result.bic
        best_order = i

    print(f'ARCH({i}) - AIC: {result.aic}, BIC: {result.bic}')

print(f"\n最佳阶数:ARCH({best_order}) - AIC: {best_aic}, BIC: {best_bic}")

# 使用最佳阶数拟合最终模型
final_model = arch_model(data['log_return_scaled'], vol='ARCH', p=best_order)
final_result = final_model.fit(disp='off')
print(final_result.summary())

# 3. 绘制残差图和残差平方图
residuals = final_result.resid
residuals_squared = residuals**2

# 残差图
plt.figure(figsize=(10, 5))
plt.plot(data.index, residuals, label='Residuals')
plt.title(f'ARCH({best_order}) Residuals')
plt.xlabel('Date')
plt.ylabel('Residuals')

# 只显示年份在时间轴
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.YearLocator())

plt.grid(True)
plt.legend()
plt.show()

# 残差平方图
plt.figure(figsize=(10, 5))
plt.plot(data.index, residuals_squared, label='Squared Residuals', color='red')
plt.title(f'ARCH({best_order}) Squared Residuals')
plt.xlabel('Date')
plt.ylabel('Squared Residuals')

# 只显示年份在时间轴
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.YearLocator())

plt.grid(True)
plt.legend()
plt.show()

通过Ljung-Box检验结果,初步判断收益率是否存在自相关,从而决定是否适合ARCH模型。
通过比较不同阶数的ARCH模型的AIC和BIC值,选择最优的模型阶数。
绘制残差图和残差平方图,进一步验证模型拟合的合理性。

Ljung-Box Test:
      lb_stat  lb_pvalue
10  45.805398   0.000002
ARCH(1) - AIC: 5887.888532447291, BIC: 5904.11230541497
ARCH(2) - AIC: 5789.433050609739, BIC: 5811.064747899978
ARCH(3) - AIC: 5715.202078933974, BIC: 5742.241700546772
ARCH(4) - AIC: 5660.977670391141, BIC: 5693.425216326499
ARCH(5) - AIC: 5627.943603865988, BIC: 5665.799074123905
ARCH(6) - AIC: 5586.313260095362, BIC: 5629.576654675839
ARCH(7) - AIC: 5548.808974157157, BIC: 5597.480293060193
ARCH(8) - AIC: 5550.795393095225, BIC: 5604.874636320821
ARCH(9) - AIC: 5540.3366884804, BIC: 5599.823856028555
ARCH(10) - AIC: 5507.216214925034, BIC: 5572.111306795749

最佳阶数:ARCH(10) - AIC: 5507.216214925034, BIC: 5572.111306795749
                      Constant Mean - ARCH Model Results                      
==============================================================================
Dep. Variable:      log_return_scaled   R-squared:                       0.000
Mean Model:             Constant Mean   Adj. R-squared:                  0.000
Vol Model:                       ARCH   Log-Likelihood:               -2741.61
Distribution:                  Normal   AIC:                           5507.22
Method:            Maximum Likelihood   BIC:                           5572.11
                                        No. Observations:                 1649
Date:                Wed, Oct 16 2024   Df Residuals:                     1648
Time:                        20:47:08   Df Model:                            1
                                Mean Model                                
==========================================================================
                 coef    std err          t      P>|t|    95.0% Conf. Int.
--------------------------------------------------------------------------
mu             0.0716  2.945e-02      2.432  1.501e-02 [1.391e-02,  0.129]
                               Volatility Model                              
=============================================================================
                 coef    std err          t      P>|t|       95.0% Conf. Int.
-----------------------------------------------------------------------------
omega          0.3085  8.471e-02      3.642  2.701e-04      [  0.143,  0.475]
alpha[1]       0.0168  4.802e-02      0.350      0.726   [-7.733e-02,  0.111]
alpha[2]       0.1130  4.295e-02      2.632  8.495e-03    [2.885e-02,  0.197]
alpha[3]       0.1345  4.211e-02      3.193  1.406e-03    [5.194e-02,  0.217]
alpha[4]       0.1062  5.821e-02      1.825  6.800e-02   [-7.855e-03,  0.220]
alpha[5]       0.1094  4.917e-02      2.225  2.611e-02    [1.301e-02,  0.206]
alpha[6]       0.0823  5.225e-02      1.576      0.115   [-2.009e-02,  0.185]
alpha[7]       0.1702  6.311e-02      2.698  6.986e-03    [4.655e-02,  0.294]
alpha[8]   9.0539e-03  3.242e-02      0.279      0.780 [-5.449e-02,7.260e-02]
alpha[9]       0.0884  5.176e-02      1.708  8.757e-02   [-1.302e-02,  0.190]
alpha[10]      0.1462  5.563e-02      2.628  8.597e-03    [3.714e-02,  0.255]
=============================================================================
残差图 残差平方图

ARCH模型表达式: σ²ₜ = 0.3085 + 0.0168 * ε²ₜ₋1 + 0.1130 * ε²ₜ₋2 + 0.1345 * ε²ₜ₋3 + 0.1062 * ε²ₜ₋4 + 0.1094 * ε²ₜ₋5 + 0.0823 * ε²ₜ₋6 + 0.1702 * ε²ₜ₋7 + 0.0091 * ε²ₜ₋8 + 0.0884 * ε²ₜ₋9 + 0.1462 * ε²ₜ₋10

4.3 GARCH模型建立

数据处理:程序首先读取CSV文件并将日期列转换为时间序列格式。计算对数收益率并删除缺失值。
Ljung-Box检验:对收益率序列进行Ljung-Box检验,判断是否存在自相关性。
模型阶数评估:程序尝试不同的GARCH模型阶数 (p, q),并计算每个模型的AIC和BIC值。通过遍历多种组合,我们能够选择AIC/BIC最小的模型作为最优模型。
GARCH模型拟合:选择AIC最小值对应的GARCH模型进行拟合,并输出其详细的估计结果。
残差分析:绘制了模型的残差及残差平方的时序图,以检验模型的拟合效果。
输出GARCH模型表达式:程序从最优模型中提取参数,输出该GARCH模型的数学表达式。并通过Markdown语法格式化成红色加粗的字体,字号放大。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
from arch import arch_model
from statsmodels.stats.diagnostic import acorr_ljungbox

# 获取当前工作路径并找到数据文件
current_path = os.getcwd()
file_path = os.path.join(current_path, '000300.csv')

# 读取沪深300指数的CSV文件
data = pd.read_csv(file_path)

# 确保 'Date' 列是时间序列格式,并设置为索引
data['Date'] = pd.to_datetime(data['Date'], format='%Y%m%d')
data.set_index('Date', inplace=True)

# 计算对数收益率:log(收盘价) 的差分
data['log_return'] = np.log(data['Close']).diff()

# 删除缺失值(首次差分会产生NaN)
data = data.dropna()

# 对收益率进行放大100倍,避免DataScaleWarning
data['log_return_scaled'] = data['log_return'] * 100

# 绘制对数收益率时序图
plt.figure(figsize=(10, 5))
plt.plot(data['log_return_scaled'], label='HS300 Scaled Log Returns', color='orange')
plt.title('HS300 Scaled Log Returns Time Series')
plt.xlabel('Date')
plt.ylabel('Scaled Log Returns')
plt.grid(True)
plt.legend()
plt.show()

# Ljung-Box检验
lb_test = acorr_ljungbox(data['log_return_scaled'], lags=[10], return_df=True)
print(f"Ljung-Box Test:\n{lb_test}")

# 设定最大阶数范围
max_p = 5  # GARCH模型的最大p阶
max_q = 5  # GARCH模型的最大q阶

# 用于存储AIC和BIC的结果
aic_values = np.zeros((max_p, max_q))
bic_values = np.zeros((max_p, max_q))

# 遍历不同的(p, q)阶数的GARCH模型,评估AIC/BIC
for p in range(1, max_p + 1):
    for q in range(1, max_q + 1):
        try:
            model = arch_model(data['log_return_scaled'], vol='Garch', p=int(p), q=int(q))
            result = model.fit(disp='off')
            aic_values[p-1, q-1] = result.aic
            bic_values[p-1, q-1] = result.bic
        except Exception as e:
            print(f"Error for GARCH({p},{q}): {e}")
            aic_values[p-1, q-1] = np.nan
            bic_values[p-1, q-1] = np.nan

# 找到AIC/BIC最小值对应的(p, q)阶数
min_aic_idx = np.unravel_index(np.nanargmin(aic_values), aic_values.shape)
min_bic_idx = np.unravel_index(np.nanargmin(bic_values), bic_values.shape)

optimal_p_aic, optimal_q_aic = int(min_aic_idx[0] + 1), int(min_aic_idx[1] + 1)
optimal_p_bic, optimal_q_bic = int(min_bic_idx[0] + 1), int(min_bic_idx[1] + 1)

print(f"Optimal (p, q) based on AIC: GARCH({optimal_p_aic}, {optimal_q_aic})")
print(f"Optimal (p, q) based on BIC: GARCH({optimal_p_bic}, {optimal_q_bic})")

# 选择AIC最小值对应的最优GARCH模型进行拟合
final_model = arch_model(data['log_return_scaled'], vol='Garch', p=optimal_p_aic, q=optimal_q_aic)
garch_fit = final_model.fit(disp='off')
print(garch_fit.summary())

# 提取残差
residuals = garch_fit.resid
# 残差平方
residuals_squared = residuals ** 2

# 绘制残差图
plt.figure(figsize=(10, 5))
plt.plot(residuals, label='Residuals')
plt.title('GARCH Model Residuals')
plt.xlabel('Date')
plt.ylabel('Residuals')
plt.grid(True)
plt.legend()
plt.show()

# 绘制残差平方的时序图
plt.figure(figsize=(10, 5))
plt.plot(residuals_squared, label='Squared Residuals', color='purple')
plt.title('GARCH Model Squared Residuals')
plt.xlabel('Date')
plt.ylabel('Squared Residuals')
plt.grid(True)
plt.legend()
plt.show()

# 输出最优GARCH模型表达式
params = garch_fit.params
omega = params['omega']
alpha1 = params['alpha[1]']
beta1 = params['beta[1]']

# 构建GARCH模型的表达式
garch_expression = f"σ²ₜ = {omega:.4f} + {alpha1:.4f} * ε²ₜ₋1 + {beta1:.4f} * σ²ₜ₋1"
print(f"Optimal GARCH Model Expression (AIC-based):\n{garch_expression}")

# Markdown格式输出模型表达式
markdown_expression = f"""
<p style="font-size: 2em; color: red; font-weight: bold;">
    {garch_expression}
</p>
"""
print("\nMarkdown GARCH Model Expression:")
print(markdown_expression)
Ljung-Box Test:
      lb_stat  lb_pvalue
10  45.805398   0.000002
Optimal (p, q) based on AIC: GARCH(2, 1)
Optimal (p, q) based on BIC: GARCH(1, 1)
                     Constant Mean - GARCH Model Results                      
==============================================================================
Dep. Variable:      log_return_scaled   R-squared:                       0.000
Mean Model:             Constant Mean   Adj. R-squared:                  0.000
Vol Model:                      GARCH   Log-Likelihood:               -2706.18
Distribution:                  Normal   AIC:                           5422.35
Method:            Maximum Likelihood   BIC:                           5449.39
                                        No. Observations:                 1649
Date:                Wed, Oct 16 2024   Df Residuals:                     1648
Time:                        21:05:44   Df Model:                            1
                                Mean Model                                
==========================================================================
                 coef    std err          t      P>|t|    95.0% Conf. Int.
--------------------------------------------------------------------------
mu             0.0565  2.593e-02      2.179  2.933e-02 [5.679e-03,  0.107]
                               Volatility Model                              
=============================================================================
                 coef    std err          t      P>|t|       95.0% Conf. Int.
-----------------------------------------------------------------------------
omega      8.1043e-03  5.496e-03      1.474      0.140 [-2.668e-03,1.888e-02]
alpha[1]       0.0101  3.563e-02      0.285      0.776 [-5.968e-02,7.997e-02]
alpha[2]       0.0641  4.308e-02      1.487      0.137   [-2.036e-02,  0.149]
beta[1]        0.9254  1.766e-02     52.402      0.000      [  0.891,  0.960]
=============================================================================

Garch模型表达式:σ²ₜ = 0.0081 + 0.0101 * ε²ₜ₋1 + 0.9254 * σ²ₜ₋1

总结

从ARCH模型到GARCH模型的发展反映了计量经济学家在处理时间序列波动性方面的不断创新与进步。ARCH模型通过引入条件异方差性成功描述了金融市场中的波动聚集现象,而GARCH模型则通过条件方差的自回归结构进一步增强了对波动性持久性的描述能力。两者都为金融市场的波动性分析提供了重要的工具。随着GARCH模型的不断扩展,如EGARCH、TGARCH等,研究者能够捕捉到更多复杂的金融市场特征,如波动性非对称性和厚尾分布。通过适当的估计和检验方法,GARCH模型能够为金融风险管理和市场预测提供坚实的理论基础和实用工具。

参考资料

  1. 计量经济学经典eviewsARCH和GARCH估计
  2. 【R语言】GARCH模型的应用
  3. 波动性GARCH模型与波动率预测(代码+结果分析)

标签:02,plt,data,模型,计量经济学,GARCH,序列,ARCH
From: https://www.cnblogs.com/haohai9309/p/18468652

相关文章

  • 【bayes-Transformer多维时序预测】bayes-Transformer多变量时间序列预测,基于bayes-Tr
    %% 划分训练集和测试集P_train=res(1:num_train_s,1:f_)';T_train=res(1:num_train_s,f_+1:end)';P_test=res(num_train_s+1:end,1:f_)';T_test=res(num_train_s+1:end,f_+1:end)';%% 划分训练集和测试集M=size(P_train,2);N=siz......
  • Idea序列图插件-SequenceDiagram Core
    简介SequenceDiagramCore是一个IntelliJIDEA插件,它允许开发者直接在IDE中创建和编辑序列图(SequenceDiagrams)。序列图是UML(统一建模语言)中的一种图表类型,用于描述对象之间如何交互以及这些交互的顺序。这种类型的图表对于理解复杂的系统流程、设计模式或者组件之间......
  • 文件同步文件备份软件 Goodsync 序列号
    GoodSync是一种简单和可靠的文件备份和文件同步软件。它会自动分析、同步,并备份您的电子邮件、珍贵的家庭照片、联系人,、MP3歌曲,财务文件和其他重要文件本地-之间的台式机,笔记本电脑,服务器,外部驱动器,以及WindowsMobile设备,以及通过FTP远程,网友的WebDAV等等。该版本已内置序......
  • shiro反序列化简单利用-1
    https://www.bilibili.com/video/BV1iF411b7bD?t=16.0环境搭建gitclonehttps://github.com/apache/shiro.gitcdshirogitcheckoutshiro-root-1.2.4编辑shiro/samples/web目录下的pom.xml,将jstl的版本修改为1.2流程分析静态分析尝试登录并抓包username和Password都......
  • JSON 请求太大,无法反序列化
    方案一asp.netmvc默认的json序列化ValueProviderFactory使用的是javascriptserializer,可以在配置文件web.config中设置:<addkey="aspnet:MaxJsonDeserializerMembers"value="150000000"/>和<system.web.extensions><scripting><w......
  • 计量经济学(六)——时间序列滞后变量模型
    滞后变量模型(LaggedVariableModels)是一种时间序列分析方法,主要通过引入自变量和因变量的滞后项来解释当前变量的行为。该模型在经济学、金融学中广泛应用,尤其在预测和政策评估时。滞后变量反映了过去事件对当前变量的持续影响,揭示变量间的动态关系。它包括自回归模型、分布滞后......
  • 计量经济学(五)——时间序列分析之ARIMA模型预测
    时间序列分析(ARIMA)模型是一种广泛用于预测和分析随时间变化的数据模型。ARIMA模型由自回归(AutoRegressive,AR)、差分(Integrated,I)和移动平均(MovingAverage,MA)三部分构成。它通过对过去数据的自回归和移动平均来预测未来数据点,广泛应用于经济学、金融、气象学等领域中的时间序列预测......
  • leetcode 刷题day43动态规划Part12(115.不同的子序列、583. 两个字符串的删除操作、72.
    115.不同的子序列思路:这个题还是比较有难度的,问题s中有多少个t子序列可以转化为s字符串中有多少删除元素的方式,使s可以变成t。考虑动规五部曲。1、确定dp数组(dptable)以及下标的含义dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。2、确定递推公式......
  • leetcode 刷题day42动态规划Part11(1143.最长公共子序列、1035.不相交的线、53. 最大子
    1143.最长公共子序列思路:718.最长重复子数组两个数组对应相同且连续,所以递推公式是dp[i-1][j-1]+1。最长公共子序列不要求连续但要求相对顺序,差别主要在于递推公式。对于该题主要有两大情况:text1[i-1]与text2[j-1]相同,text1[i-1]与text2[j-1]不相同。如果te......
  • shiro 反序列化漏洞
    shiro反序列化漏洞Shiro-550漏洞原理影响版本:ApacheShiro<1.2.4特征判断:返回包中包含rememberMe=deleteMe字段。为了让浏览器或服务器重启后用户不丢失登录状态,Shiro支持将持久化信息序列化并加密后保存在Cookie的rememberMe字段中,下次读取时进行解密再反序列化。Pa......