關於Python的ARCH包(九)

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())

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章