GARCH模型是Bollerslev在1986年提出来的,全称为广义自回归条件异方差模型,Generalized Autoregressive Conditionally Heteroskedastic Models - GARCH(p,q),是ARCH模型的扩展。GARCH模型认为时间序列每个时间点变量的波动率是最近p个时间点残差平方的线性组合,与最近q个时间点变量波动率的线性组合加起来得到。即GARCH模型的条件方差不仅是滞后残差平方的线性函数,还是滞后条件方差的线性函数,因而GARCH模型适合在计算量不大时,方便地描述高阶的ARCH过程,具有更大的适用性。
其中,
为白噪音,
,否则模型将是非平稳的。GARCH模型的估计与ARCH模型类似,具体推导过程参见计量经济学相关书籍。在实际应用中,GARCH(1,1)和GARCH(2,1)一般可以满足对自回归条件异方差的描述。下面使用Python对GARCH(1,1)模型进行模拟和估计。
Python中的ARCH包
先来看下arch包中arch_model函数各参数的含义以及模型设定方法。
arch.arch_model(y, x=None, mean='Constant', lags=0, vol='Garch', p=1, o=0, q=1, power=2.0, dist='Normal', hold_back=None)
各参数含义:
y : 因变量。
x : 外生变量,如果没有外生变量则模型自动省略。
mean: 均值模型的名称,可选: ‘Constant’, ‘Zero’, ‘ARX’ 以及 ‘HARX’。
lags:滞后阶数。
vol :波动率模型,可选: ‘GARCH’ (默认), ‘ARCH’, ‘EGARCH’, ‘FIARCH’ 以及 ‘HARCH’。
p :– 对称随机数的滞后阶,即扣除均值后的部分。
o :非对称数据的滞后阶。
q :波动率或对应变量的滞后阶。
power:使用GARCH或相关模型的精度。
dist:误差分布,可选:正态分布: ‘normal’, ‘gaussian’ (default);学生T分布: ‘t’, ‘studentst’;偏态学生T分布: ‘skewstudent’, ‘skewt’;通用误差分布: ‘ged’, ‘generalized error”。
hold_back:对同一样本使用不同的滞后阶来比较模型时使用该参数。
# 模拟GARCH(1, 1) 过程 np.random.seed(1) a0 = 0.2 a1 = 0.5 b1 = 0.3 n = 10000 w = np.random.normal(size=n) garch = np.zeros_like(w) sigsq = np.zeros_like(w) for i in range(1, n): sigsq[i] = a0 a1*(garch[i-1]**2) b1*sigsq[i-1] garch[i] = w[i] * np.sqrt(sigsq[i]) _ = ts_plot(garch, lags=30,title='模拟GARCH')