关于Python的ARCH包(九)

本文介绍如何使用FixedVariance波动率过程优化模型估计,通过实例演示在遇到数值问题或高维参数空间问题时,如何估计那些通常难以估计的模型。首先,使用常数方差估计均值模型,然后初始化波动率模型,最后通过Zig-Zag策略重复估计,展示单一参数scale接近于1,均值参数发生变化的现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.8 使用固定方差过程

     FixedVariance波动率过程当两步过程在收敛之前不断重复时可以实现之字形(zig-zag)模型估计.当遇到数值问题或者高维参数空间问题时,该法可以用来估计那些通常看来难以估计的模型。

import warnings
warnings.simplefilter('ignore')

# %matplotlib inline
import seaborn
seaborn.set_style('darkgrid')

seaborn.mpl.rcParams['figure.figsize'] = (10.0, 6.0)
seaborn.mpl.rcParams['savefig.dpi'] = 90
seaborn.mpl.rcParams['font.family'] = 'serif'
seaborn.mpl.rcParams['font.size'] = 14

1.8.1 Setup

该例中引入的包:

#本例需要在 IPython notebook下使用

import datetime as dt
import numpy as np
from pandas_datareader import data

1.8.2 数据

VIX指数用来说明 FixedVariance过程用法. 该数据读取使用 pandas-datareader方法.

dr = data.FredReader('VIXCLS', dt.datetime(2000, 1, 1), dt.datetime(2017, 12, 31))
vix_data = dr.read()
vix = vix_data.VIXCLS.dropna()
vix.name = 'VIX Index'
ax = vix.plot(title='VIX Index')

1.8.3 初始化均值模型估计

第一步是使用常数方差来估计均值模型,从而得到残差。

from arch.univariate.mean import HARX, ZeroMean
from arch.univariate.volatility import GARCH, FixedVariance
mod = HARX(vix, lags=[1,5,22])
res = mod.fit()
print(res.summary())

 

1.8.4 初始化波动率模型估计

使用上述估计残差,可以利用ZeroMean构建一个波动率模型。在本例中,一个GJR-GARCH 过程可以用于描述方差。

vol_mod = ZeroMean(res.resid.dropna(), volatility=GARCH(p=1,o=1,q=1))
vol_res = vol_mod.fit(disp='off')
print(vol_res.summary())
ax = vol_res.plot('D')

(程序结果略)

1.8.5 使用 FixedVariance重新估计均值

FixedVariance方法在模块初始化时就要提供。方差大小应该与原始数据一致。由于HAR的滞后阶数设定,GJR-GARCH模型所得方差丢失了22个观察值, 我们将其填充为1. 这些值将不会用于估计模型,因此,无关紧要。

结果表明,单一参数scale接近于1.均值参数发生了变化,说明重新估计施加了GLS形式的加权影响。

variance = np.empty_like(vix)
variance.fill(1.0)
variance[22:] = vol_res.conditional_volatility ** 2.0
fv = FixedVariance(variance)
mod = HARX(vix, lags=[1,5,22], volatility=fv)
res = mod.fit()
print(res.summary())

1.8.6 Zig-Zag估计

前面两步的简单的重复就可以实现zig-zag策略的估计。

for i in range(5):
    print(i)
    vol_mod = ZeroMean(res.resid.dropna(), volatility=GARCH(p=1,o=1,q=1))
    vol_res = vol_mod.fit(disp='off')
    variance[22:] = vol_res.conditional_volatility ** 2.0
    fv = FixedVariance(variance, unit_scale=True)
    mod = HARX(vix, lags=[1,5,22], volatility=fv)
    res = mod.fit(disp='off')
print(res.summary())

1.8.7 直接估计

模型可以被直接估计。该结果是为了便于和此前的FixedVariance方法所得的均值参数进行对比。

mod = HARX(vix, lags=[1,5,22], volatility=GARCH(1,1,1))
res = mod.fit(disp='off')
print(res.summary())

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值