📑 查看全课大纲(第 17 / 20 节)
- 1.时间序列分析简介
- 2.平稳性检验与特征
- 3.纯随机性检验(白噪声检验)
- 4.时间序列预处理代码实战
- 5.自回归模型(AR 模型)
- 6.自相关系数与偏自相关系数
- 7.移动平均模型(MA)与自回归移动平均模型(ARMA)
- 8.平稳时序模型识别与参数估计
- 9.模型显著性检验、优化与序列预测
- 10.平稳时间序列建模代码实战
- 11.确定性序列分解与趋势分析
- 12.季节效应分析与综合波动分析
- 13.确定性时序分析代码实战
- 14.差分平稳化与 ARIMA 模型
- 15.残差自回归模型
- 16.ARCH / GARCH 模型及其衍生
- 17.异方差检验:Portmanteau Q 检验与 LM 检验
- 18.随机性非平稳建模与 GARCH 实战
- 19.ARIMAX 模型与单位根(DF/ADF)检验
- 20.协整检验与误差修正模型(ECM)
异方差检验:Portmanteau Q 检验与 LM 检验
约 28 分钟
小象实战讲义 · 时间序列分析
在金融时间序列分析中,我们经常观察到“波动率聚集”现象——大幅波动后往往跟随大幅波动,小幅波动后则跟随小幅波动。这种波动率随时间变化的特性就是异方差。上一讲我们学习了如何用 GARCH 模型对条件异方差进行建模,但在拟合 GARCH 模型之前,一个关键问题是:如何科学地判断序列是否存在异方差?本节将系统介绍两种经典的异方差统计检验方法——Portmanteau Q 检验与拉格朗日乘子(LM)检验,它们为异方差的存在提供严格的统计证据,是连接传统 ARIMA 建模与波动率建模的关键桥梁。
💡 核心导读
- 检验思想转化:将对“方差是否恒定”的检验,转化为对“残差平方序列是否存在自相关性”的检验。
- Portmanteau Q 检验:直接检验残差平方序列前
q阶自相关系数是否联合为零,其统计量本质上是平方序列的 Ljung-Box 统计量。 - 拉格朗日乘子(LM)检验:通过检验“残差平方序列能否被其滞后项线性回归解释”来判断异方差,其统计量基于辅助回归的 构造。
- 完整建模流程:掌握“先提取水平信息(ARIMA),再检验异方差,最后拟合波动率模型(GARCH)”的标准化分析链条。
- Python 实战:使用
arch库一站式完成 GARCH 模型拟合与异方差检验,并通过模拟数据验证整个流程。
1. 异方差检验的统计原理
在经典时间序列模型(如 ARMA、ARIMA)中,我们通常假设模型的随机扰动项 是独立同分布的白噪声,即: 其中方差 为常数。条件异方差则意味着方差随时间变化,且依赖于过去信息: 其中 表示 时刻及之前的所有信息。
如何检验 是否为常数?关键在于一个经验观察:如果波动存在集群效应,那么残差平方序列 通常会表现出显著的自相关性。反之,若方差恒定, 应近似为一个无自相关的序列。
因此,异方差检验的核心思路可以归结为: 将对“方差是否恒定”的检验,转化为对“残差平方序列 是否存在自相关性”的检验。
2. Portmanteau Q 检验
Portmanteau Q 检验将上述思想直接转化为一个可计算的统计检验。
2.1 假设设定
- 原假设 :残差平方序列 的前 阶自相关系数均为零。 这意味着 是白噪声,即原序列不存在异方差。
- 备择假设 :至少存在某个 ,使得 。 这意味着 存在自相关,即原序列存在异方差。
2.2 检验统计量
设 是残差平方序列 的样本 阶自相关系数, 为有效样本量。检验统计量为:
可以证明,在原假设 成立且样本量 足够大时, 渐近服从自由度为 的卡方分布:
2.3 判别准则
给定显著性水平 (通常取 0.05):
- 若 ,则拒绝 ,认为存在异方差。
- 若 ,则不能拒绝 ,认为不存在显著的异方差。
理解:该统计量就是残差平方序列的 Ljung-Box 统计量。 值越大,说明平方序列的自相关性越强,即波动集群效应越明显,从而表明异方差存在。
3. 拉格朗日乘子(LM)检验
LM 检验(又称 ARCH-LM 检验)从回归分析的视角出发,提供了另一种检验思路。
3.1 模型与假设
考虑对残差平方序列建立如下线性回归模型(即 ARCH() 模型的结构): 其中 为新的误差项。
- 原假设 :所有滞后项系数均为零。 这意味着该回归模型不显著, 无法被其历史值预测,即无异方差(无 ARCH 效应)。
- 备择假设 :至少有一个 。 这意味着回归模型显著,存在 ARCH 效应,即存在异方差。
3.2 检验统计量
LM 检验统计量基于上述辅助回归的判定系数 构造: 其中 是用于辅助回归的有效样本量。
在原假设 成立下, 统计量渐近服从自由度为 的卡方分布:
3.3 判别准则
给定显著性水平 :
- 若 ,则拒绝 ,认为存在异方差。
- 若 ,则不能拒绝 。
理解: 衡量了滞后项对当期波动(平方)的解释力度。 很大,意味着这种解释力度在统计上是显著的,从而拒绝“无异方差”的原假设。
4. 实战演练:完整的 GARCH 建模与检验流程
下面我们通过 Python 模拟一个具有波动率聚集效应的金融收益率序列,并演示从 ARIMA 建模、异方差检验到 GARCH 拟合的完整流程。
import numpy as np
import pandas as pd
from arch import arch_model
# 固定随机种子确保结果可复现
np.random.seed(42)
n = 600
# 1. 模拟 GARCH(1,1) 金融收益率序列
# 真实参数:omega=0.05, alpha=0.15, beta=0.80 (alpha+beta=0.95 < 1,满足平稳条件)
omega_true = 0.05
alpha_true = 0.15
beta_true = 0.80
# 初始化序列
r = np.zeros(n)
sigma2 = np.zeros(n)
# 初始条件方差设为长期无条件方差
sigma2[0] = omega_true / (1.0 - alpha_true - beta_true)
# 生成标准正态扰动
eta = np.random.normal(0, 1, n)
# 初始收益率
r[0] = np.sqrt(sigma2[0]) * eta[0]
# 迭代生成 GARCH(1,1) 过程
for t in range(1, n):
sigma2[t] = omega_true + alpha_true * (r[t-1] ** 2) + beta_true * sigma2[t-1]
r[t] = np.sqrt(sigma2[t]) * eta[t]
# 转换为 pandas Series
returns = pd.Series(r, name='log_return')
# 2. 拟合 GARCH(1,1) 模型 (假设均值方程为0,即零均值收益率)
am = arch_model(returns, mean='Zero', vol='GARCH', p=1, q=1, dist='normal')
res = am.fit(disp='off')
# 3. 提取估计参数与关键指标
omega_est = res.params['omega']
alpha_est = res.params['alpha[1]']
beta_est = res.params['beta[1]']
persistence = alpha_est + beta_est # 波动率持久性
# 4. 进行外推 5 期条件方差预测
forecasts = res.forecast(horizon=5)
pred_variance = forecasts.variance.dropna().iloc[-1].values
pred_volatility = np.sqrt(pred_variance)
# 5. 打印结果
print(f"模拟金融收益率点数: {n}")
print(f"真实参数: omega = {omega_true:.4f}, alpha = {alpha_true:.4f}, beta = {beta_true:.4f} (持久性: {alpha_true + beta_true:.2f})")
print(f"GARCH(1,1) 拟合参数:")
print(f" omega: {omega_est:.4f} (p值: {res.pvalues['omega']:.4e})")
print(f" alpha[1]: {alpha_est:.4f} (p值: {res.pvalues['alpha[1]']:.4e})")
print(f" beta[1]: {beta_est:.4f} (p值: {res.pvalues['beta[1]']:.4e})")
print(f"波动率持久性 (alpha + beta < 1 弱平稳条件): {persistence:.4f} (平稳: {persistence < 1.0})")
print(f"无条件长期方差估计 (omega / (1 - alpha - beta)): {omega_est / (1.0 - persistence):.4f}")
print(f"未来 5 期预测波动率 (标准差): {np.round(pred_volatility, 4).tolist()}")运行结果:
模拟金融收益率点数: 600
真实参数: omega = 0.0500, alpha = 0.1500, beta = 0.8000 (持久性: 0.95)
GARCH(1,1) 拟合参数:
omega: 0.0491 (p值: 1.4701e-02)
alpha[1]: 0.1244 (p值: 9.8109e-06)
beta[1]: 0.8125 (p值: 1.2348e-88)
波动率持久性 (alpha + beta < 1 弱平稳条件): 0.9370 (平稳: True)
无条件长期方差估计 (omega / (1 - alpha - beta)): 0.7784
未来 5 期预测波动率 (标准差): [0.6455, 0.6629, 0.6789, 0.6934, 0.7068]结果解读:
- 参数估计:GARCH(1,1) 模型的三个参数 (
omega,alpha[1],beta[1]) 的 P 值均远小于 0.05,表明估计结果高度显著。 - 平稳性:
alpha[1] + beta[1] = 0.9370 < 1,满足 GARCH 模型的弱平稳条件。 - 波动率预测:模型对未来 5 期的波动率进行了预测,结果显示波动率随时间缓慢上升,这源于模型较高的持久性(0.9370)以及当前估计的条件方差状态。
在实际分析中,我们通常先对原始序列拟合 ARIMA 模型以提取均值信息,然后对 ARIMA 模型的残差进行异方差检验。若检验显著(如 P 值 < 0.05),则对该残差序列拟合 GARCH 模型。arch 库也提供了便捷的异方差检验函数。
# 接续上面的代码,对 GARCH 模型拟合后的标准化残差进行异方差检验(LM检验)
from statsmodels.stats.diagnostic import het_arch
# 获取 GARCH 模型拟合后的残差
garch_resid = res.resid
# 进行 Engle's ARCH-LM 检验,滞后阶数设为 10
lm_stat, lm_pval, f_stat, f_pval = het_arch(garch_resid, nlags=10)
print(f"\n【Engle's ARCH-LM 检验 (滞后10阶)】")
print(f"LM 统计量: {lm_stat:.4f}")
print(f"P 值: {lm_pval:.4f}")
print("判别: 若 P 值 < 0.05,则拒绝‘无异方差’的原假设。")
# 注意:对于已拟合 GARCH 模型的残差,此检验的 P 值应较大(不显著),
# 因为 GARCH 模型已经提取了波动率聚类信息。📝 动手练一练
检验原理:Portmanteau Q 检验和 LM 检验的原假设在表述上有何不同?为什么说这两种检验在本质上是相通的?
参考答案: Portmanteau Q 检验的原假设是:残差平方序列的前
q阶自相关系数全为零。LM 检验的原假设是:残差平方序列对其自身q阶滞后项的线性回归系数全为零。虽然表述不同,但两者本质都是检验 是否存在自相关。因为如果 存在自相关,那么其自相关系数就不会全为零(对应 Q 检验),同时其滞后项也必然能对当期值有线性预测能力(对应 LM 检验)。因此,两种检验都是从不同角度探测同一现象——波动率的集群效应。代码实验:修改模拟数据生成的参数,将
alpha_true和beta_true都设为 0,生成一个无异方差的纯白噪声序列。重新运行 GARCH(1,1) 模型拟合代码,观察参数估计结果(特别是alpha[1]和beta[1]的 P 值)与异方差检验(LM 检验)的 P 值会如何变化?这说明了什么?参考答案提示:当
alpha_true=0且beta_true=0时,数据生成过程为常数方差的纯白噪声。此时:- 拟合 GARCH(1,1) 模型时,
alpha[1]和beta[1]的估计值会非常接近 0,且它们的 P 值通常会大于 0.05,变得不显著。 - 对原始序列或简单模型残差进行 Engle’s ARCH-LM 检验,其 P 值会很大(远大于 0.05),无法拒绝“无异方差”的原假设。 这个实验验证了异方差检验的有效性:当数据本身没有波动率聚类时,检验能正确识别,且 GARCH 模型不会给出显著的波动率参数估计,避免了过度建模。
- 拟合 GARCH(1,1) 模型时,
本章小结
本节系统介绍了时间序列分析中诊断异方差的两种核心统计检验方法,它们是进行高级波动率建模(如 GARCH)前的必要步骤。
- 思想统一:成功将对异方差的检验,转化为对更易处理的残差平方序列自相关性的检验。
- 方法掌握:
- Portmanteau Q 检验:直接基于自相关系数构造统计量,计算简便,是非参数方法。
- 拉格朗日乘子(LM)检验:基于回归模型的判定系数 构造统计量,是参数方法,特别适用于检验 ARCH 效应。
- 流程内化:确立了“先建立均值模型(如 ARIMA)提取序列水平信息,再对残差进行异方差检验,若显著则拟合条件异方差模型(如 GARCH)”的标准化分析流程。
- 工具应用:熟练使用 Python 的
arch库进行 GARCH 模型拟合、参数估计、波动率预测以及异方差检验,实现从检验到建模的闭环。
行动清单
- 养成检验习惯:在分析任何可能存在波动聚类的序列(尤其是金融资产收益率)时,在完成均值模型拟合后,务必对模型残差进行异方差检验(Q 检验或 LM 检验)。
- 理解输出:能够解读检验输出的统计量与 P 值,并根据 P 值大小做出是否存在异方差的统计判断。
- 完整项目实践:选择一只股票的历史日收益率数据,完整走一遍“平稳性检验/差分 -> ARIMA 建模 -> 残差异方差检验 -> (若需要) GARCH 建模 -> 模型诊断与预测”的全流程,并撰写简要分析报告。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问