關於Python的ARCH包(二)

1.單變量波動率模型
1.1引言
1.2 舉例
1.3 預測

1.4 預測舉例

1.5 預測類型
1.6 均值模型

1.7 波動率過程

1.8 不變方差過程
1.9 分佈

1.10 背景及引用


1.1 關於ARCH 模型的介紹

 

1.1.1理論模型

ARCH 模型是一種流行的波動率建模方法,其主要使用收益率或殘差的觀測值作爲波動率參考方式。一種基本的GARCH 模型表示如下:

 

完整的GARCH模型需要上述三個部分,然而簡單的計算可以利用下式得出:

import datetime as dt

import pandas_datareader.data as web

from arch import arch_model

start = dt.datetime(2000, 1, 1)
end = dt.datetime(2014, 1, 1)
sp500 = web.DataReader('^GSPC', 'yahoo', start=start, end=end)
returns = 100 * sp500['Adj Close'].pct_change().dropna()
am = arch_model(returns)

注:實際無法運行,由於Yahoo網絡變動,導致出現提示:

ImmediateDeprecationError: 
Yahoo Daily has been immediately deprecated due to large breaks in the API without the
introduction of a stable replacement. Pull Requests to re-enable these data
connectors are welcome.

See https://github.com/pydata/pandas-datareader/issues

使用其他收益率數據後,可直接運行:

from arch import arch_model

am = arch_model(returns)

也可從結構設計開始手動構建ARCH模型:

from arch import ConstantMean, GARCH, Normal

am = ConstantMean(returns)
am.volatility = GARCH(1, 0, 1)
am.distribution = Normal()

-----

這幾行代碼已經無法正常使用,應該是升級導致。因此,直接的使用應該是:

am = arch_model(abc3.iloc[1:800,:])
res=am.fit() #擬合

res.summary#擬合結果

1.1.2 關鍵內容:關於arch_model方法


arch.arch_model(yx=Nonemean='Constant'lags=0vol='Garch'p=1o=0q=1power=2.0dist='Normal'hold_back=None)[source]

使用便利函數以便arch模型快速初始化:

Parameters:
  • y ({ndarraySeriesNone}) – 因變量
  • x ({np.arrayDataFrame}optional) –外生變量.如果沒有外生變量則模型自動省略。
  • mean (stroptional) – 均值模型的名稱.目前支持: ‘Constant’, ‘Zero’, ‘ARX’ 以及 ‘HARX’
  • lags (int or list (int)optional) –一個整數標量,用來表明滯後階,或者使用表明滯後位置的整數列表。
  • vol (stroptional) – 波動率模型的名稱,目前支持: ‘GARCH’ (默認), ‘ARCH’, ‘EGARCH’, ‘FIARCH’ 以及 ‘HARCH’。
  • p (intoptional) – 對稱隨機數的滯後階(譯者注:即扣除均值後的部分)。
  • o (intoptional) – 非對稱數據的滯後階
  • q (intoptional) – 波動率或對應變量的滯後階
  • power (floatoptional) – 使用GARCH或相關模型的精度
  • dist (intoptional) –

    誤差分佈的名稱,目前支持下列分佈:

    • 正態分佈: ‘normal’, ‘gaussian’ (default)
    • 學生T分佈: ‘t’, ‘studentst’
    • 偏態學生T分佈: ‘skewstudent’, ‘skewt’
    • 通用誤差分佈: ‘ged’, ‘generalized error”
  • hold_back (int) – 估計模型參數時樣本最初需排除的觀察值數. 對同一樣本使用不同的滯後階來比較模型時使用該參數。
Returns:

model – Configured ARCH model

Return type:

ARCHModel

除了直接使用arch_model以外,也可以具體表明GARCH參數來描述均值及波動率模型:

am = arch_model(returns, mean='AR', lags=2, vol='harch', p=[1, 5, 22])

下面可以是一個0均值,TGARCH模型,誤差爲學生T分佈的通用ARCH模型:

am = arch_model(returns, mean='zero', p=1, o=1, q=1, power=1.0, dist='StudentsT')

注意:

輸入內容並非特指,均值爲0的滯後期設定等,默認忽略。

模型結果

所有模型返回同樣的對象,即結果類(ARCHModelResult)



1.1.3 ARCHModelResult

class arch.univariate.base.ARCHModelResult(paramsparam_covr2residvolatilitycov_typedep_varnamesloglikelihoodis_pandasoptim_outputfit_startfit_stopmodel)[source]

 ARCHModel 模型的估計結果

Parameters:
  • params (ndarray) – 估計參數
  • param_cov ({ndarrayNone}) – 估計參數的方差協方差矩陣.如果爲空,則表示使用方法基於參數協方差來計算模型方差。
  • r2 (float) – 模型R2(即可決係數或判決係數)
  • resid (ndarray) – 模型殘差。殘差矩陣大小相同,幷包括估計中未使用的空值。
  • volatility (ndarray) – 來自模型的條件波動率。
  • cov_type (str) – 描述協方差估計值的字符串。
  • dep_var (Series) – 因變量。
  • names (list (str)) – 模型參數名稱。
  • loglikelihood (float) – 估計參數的對數似然率。
  • is_pandas (bool) – 判斷原始輸入數據是否是pandas類型。
  • fit_start (int) – 用來擬合模型的第一個觀察值的整數索引。
  • fit_stop (int) – 最後一個觀察值的整數索引,切片表示: fit_start:fit_stop
  • model (ARCHModel) – 用來估計參數的模型。

 

summary() [source] :對結果進行彙總。

plot() :對波動率和標準化的殘差進行繪圖。

conf_int()[source] :置信區間。

loglikelihood :浮點型,對數似然率的值。

params :時間序列類型,估計所得參數。

param_cov :DataFrame類型,估計參數的方差協方差。

resid :{ndarray, Series}:觀察值數組,包括模型殘差

modelARCHModel –Model:用來擬合的模型實例

conf_int(alpha=0.05)[source]

Parameters: alpha (浮點型,可選) – 構建置信區間的規模(即概率).
Returns: ci – 數組型,第i行包括第i個參數的置信區間。
Return type: ndarray(n維數組型)

forecast (params=Nonehorizon=1start=Nonealign='origin'method='analytic'simulations=1000rng=None)

利用估計所得模型參數進行預測

Parameters:
  • params (ndarrayoptional) –使用的替代參數。如爲空,則使用模型擬合的參數,其大小必須與模型擬合所得參數一致。
  • horizon (intoptional) – 預測步數。
  • start ({intdatetimeTimestampstr}optional) – 一個整數型,日期型或字符串型數據,表示用作預測的第一個觀察值。日期型僅僅適用於具有日期型索引的pandas類型數據。字符串型必須可以轉換爲日期型數據,比如 ‘1945-01-01’.
  • align (stroptional) – 爲 ‘origin’ 或 ‘target’. 當爲 ‘origin’時,第t行預測包括的預測值爲 t+1, t+2, …, t+h. 當爲‘target’時,第t行以t-1行爲基礎進行1步式預測,t-2行爲基礎進行2步式預測,或以t-h爲基礎進行h步預測。 如選擇h步預測,‘target’方式簡化了預測誤差計算。 
  • method ({'analytic''simulation''bootstrap'}optional) – 執行預測的方法。默認爲解析型 (analytic).該方法僅僅影響預測結果的方差。 並非全部波動率模型支持全部方法。比如,波動率模型並不支持平方模式下的變化,比如EGARCH 或者TARCH, 這些方法當預測步數大於1時不再支持‘analytic’ 方法。
  • simulations (intoptional) – 使用模擬或拔靴等方法計算預測結果的次數。
  • rng (callableoptional) – 基於模擬預測的自主隨機數生成器方式。當使用rng語法用於2維元組(simulations,horizon)時,必須生成隨機樣本。
Returns:

forecasts – t*h data frame 的預測結果。其預測或計算方式由align參數控制。

Return type:

ARCHModelForecast

注意:

最基本的1步式預測將會返回與原始數據同維的向量,這裏第t個值即爲用於t+1時間預測的值。當步數大於1時且計算方式默認時,在 [t, h] 處的預測值即爲在t時間, h+1步的預測值。

如果模型包括外生變量(model.x非空),那麼僅僅有1步式預測可用。當步數 > 1時,將會出現提示,且所有列除第一列外,全部爲空。

如果計算方式爲 ‘origin’,[t,h] 預測值基於y[:t] 預測且步數爲h+1(那就是說,截至但不包括t). 例如,y[100,2] 表示使用前100個數據點進行3步式預測,即實現結果爲 y[100 + 2]. 如果計算方式是 ‘target’, 那麼同樣的預測表示爲 [102, 2]。這樣是爲了與原始數值一致便於比較,但是仍然在同一列中。

hedgehog_plot(params=None, horizon=10, step=10, start=None, type='volatility', method='analytic', simulations=1000)
基於估計模型將預測結果圖形化。

Parameters:
  • params ({ndarraySeries}) – 使用的替代參數.如果不填寫,將使用模型擬合參數。其須是1維且與擬合模型的參數大小一致。
  • horizon (intoptional) – 預測步數。
  • step (intoptional) – 不同的樣條之間預測步數需跳過的非空預測。
  • start (intdatetime or stroptional) – 一個整數,日期或字符串數據,表示預測數據使用的第一個觀察值。日期型選項僅僅用於使用日期索引的pandas數據。字符串必須可轉化爲日期型,比如 ‘1945-01-01’. 如果不填寫,則計算起始點被設置爲最早可使用觀察值。
  • type ({'volatility''mean'}) – 數量到圖,預測波動率或預測平均值。
  • method ({'analytic''simulation''bootstrap'}) – 進行預測時使用的方法,默認爲解析方法。該方法僅僅影響預測結果位置的方差。並非所有波動率模型支持所有方法。比如,波動率模型並不支持平方模式下的變化,比如EGARCH 或者TARCH, 這些方法當預測步數大於1時不再支持‘analytic’ 方法。
  • simulations (int) – 使用模擬或拔靴等方法計算預測結果的次數。
Returns:

fig – 圖形手柄

Return type:

圖形

Examples

>>> import pandas as pd
>>> from arch import arch_model
>>> am = arch_model(None,mean='HAR',lags=[1,5,22],vol='Constant')
>>> sim_data = am.simulate([0.1,0.4,0.3,0.2,1.0], 250)
>>> sim_data.index = pd.date_range('2000-01-01',periods=250)
>>> am = arch_model(sim_data['data'],mean='HAR',lags=[1,5,22],  vol='Constant')
>>> res = am.fit()
>>> fig = res.hedgehog_plot(type='mean')

plot(annualize=Nonescale=None)

標準化殘差或波動率的圖形化展示

Parameters:
  • annualize (stroptional) – 數據頻率的字符串,表明圖形應該年華波動率,支持 ‘D’ (daily), ‘W’ (weekly) and ‘M’ (monthly), 表示大小分別爲 252, 52, 和 12。
  • scale (floatoptional) – 年化收益時使用的值.如提供數值,則表示忽略年化,使用實際值。
Returns:

fig – 圖形手柄

Return type:

圖形

舉例:

>>> from arch import arch_model
>>> am = arch_model(None)
>>> sim_data = am.simulate([0.0, 0.01, 0.07, 0.92], 2520)
>>> am = arch_model(sim_data['data'])
>>> res = am.fit(update_freq=0, disp='off')
>>> fig = res.plot()

使用年化波動率畫圖:

>>> fig = res.plot(annualize='D')
使用252日代替360日畫圖,以便更符合實際:
>>> fig = res.plot(scale=360)

summary()[source]

構建模型擬合結果.

Returns: summary – 對象,包括表格以及便利輸出類內容,諸如 text, html or latex
Return type: 結果實例

如果使用 fix 方法, 該對象 (ARCHModelFixedResult) 與另一對象 (ARCHModelResult)不同,兩者在參數沒有估計時不存在相關關係。

1.1.4 ARCHModelFixedResult

class arch.univariate.base.ARCHModelFixedResult(paramsresidvolatilitydep_varnamesloglikelihoodis_pandasmodel)[source]

對於固定參數ARCH模型的估計結果

Parameters:
  • params (ndarray) –估計參數
  • resid (ndarray) – 模型殘差。殘差結果與原始數據大小一致,且包含未在估計中使用的空值。
  • volatility (ndarray) – 模型的條件波動率
  • dep_var (Series) – 因變量
  • names (list (str)) – 模型參數名
  • loglikelihood (float) – 參數的對數似然率
  • is_pandas (bool) – 原始輸入是否是pandas類型
  • model (ARCHModel) – 所要估計的模型

summary()  source] :彙總結果。

plot()[source]

對波動率和標準化殘差畫圖。

forecast()[source]

利用模型構建預測。

loglikelihood

float – 對數似然值

params

Series – 所估計參數。

resid

{ndarray, Series} – 包括模型殘差的觀察值數組。

model

ARCHModel – 用於擬合的模型實例。

 

forecast(params=Nonehorizon=1start=Nonealign='origin'method='analytic'simulations=1000rng=None)[source]

利用估計模型進行預測。

Parameters:
  • params (ndarrayoptional) – 使用的替代參數。如果沒有賦值,則使用模型擬合估計參數,且該參數大小必須與擬合模型參數一致。
  • horizon (intoptional) – 預測步數。
  • start ({intdatetimeTimestampstr}optional) – 爲整數型,日期型或者字符串型,爲用於預測的第一個觀察值。日期型僅僅適用於具有日期索引的pandas類型數據,字符串型必須可以轉化爲日期型,比如 ‘1945-01-01’.
  • align (stroptional) – 爲原始或者目標兩種方式。當設定爲原始型時,第t行的預測包括預測值的位置爲 t+1, t+2, …, t+h. 當設定爲目標型時,第t行包括在t-1時的第1步預測,第2步包括在t-2時的預測等等諸如此類,即第h步來自t-h時點.既然h步預測和實現得以實現的話,目標型方式簡化描述了預測誤差。 
  • method ({'analytic''simulation''bootstrap'}optional) – 用於預測的方法,默認爲解析方法。該方法僅影響預測結果的方差。並非所有波動率模型支持所有方法。尤其是,波動率模型並不能解決平方項,比如EGARCH或TARCH就不支持預測步數大於1的解析方法。
  • simulations (intoptional) – 模擬或自舉的次數。
  • rng (callableoptional) – 基於模擬預測的自主隨機數生成器。當大小爲2維元組類型時(模擬機預測步數),必須使用rng(size)語法生成自主隨機樣本。
Returns:

forecasts – t*h大小的dataframe格式的預測結果。該預測的方法由align參數控制。

Return type:

ARCHModelForecast

注意:

最基本的1步式預測會返回與原始數據同樣長度的向量,且第t個值爲t時對於t+1時的預測。當預測步數大於1時且使用默認align方式,[t,h]的預測值即是時間t對h+1步的預測。

如果模型包括外生變量(model.x爲非空),則僅有1步式預測可用。預測步數大於1時將會產生警示信息,所有列除第1列外,將會被空值填充。

如果align方式爲原始方法,對於步數h + 1,預測結果[t,h]包括數據 y[:t] (即趨近t但不包括t). 例如, y[100,2] 爲3步式預測,使用前100個數據點,對應結果 y[100 + 2]. 如果選擇 ‘target’方法, 那麼同樣的預測位置爲 [102, 2], 因此與預測時使用的原始數據一致,但是仍然爲同一列。

hedgehog_plot(params=Nonehorizon=10step=10start=Nonetype='volatility'method='analytic'simulations=1000)[source]

Plot forecasts from estimated model

Parameters:
  • params ({ndarraySeries}) – 替代選擇參數。如果沒有賦值,則使用模型擬合參數。該參數爲1維且與模型擬合的參數一致。
  • horizon (intoptional) – 預測步數。
  • step (intoptional) – 樣條之間需要略過的預測非負值。
  • start (intdatetime or stroptional) – 一個整數,日期或字符串型參數,用於表示使用的第1個觀察值。日期型僅僅適用於pandas型且使用日期索引的數據。字符串必須可以轉換爲日期型,比如‘1945-01-01’. 如果沒有賦值,則起始點爲最早預測日期。
  • type ({'volatility''mean'}) – 繪圖數,爲波動率或者預測均值。
  • method ({'analytic''simulation''bootstrap'}) – 用於預測的方法,默認爲解析方法。該方法僅僅影響預測結果的方差。並非所有波動率模型支持所有方法。尤其是,波動率模型並不支持平方項,如 EGARCH 或 TARCH就不支持在支持步數大於1的解析方法。
  • simulations (int) – 自舉或者模擬的次數。
Returns:

fig – 繪圖手柄。

Return type:

圖像

舉例:

>>> import pandas as pd
>>> from arch import arch_model
>>> am = arch_model(None,mean='HAR',lags=[1,5,22],vol='Constant')
>>> sim_data = am.simulate([0.1,0.4,0.3,0.2,1.0], 250)
>>> sim_data.index = pd.date_range('2000-01-01',periods=250)
>>> am = arch_model(sim_data['data'],mean='HAR',lags=[1,5,22],  vol='Constant')
>>> res = am.fit()
>>> fig = res.hedgehog_plot(type='mean')

plot(annualize=Nonescale=None)[source]

標準化殘差及條件波動率的圖示。

Parameters:
  • annualize (stroptional) –包括年化波動率的數據頻率圖示字符串,支持 ‘D’ (daily)型, ‘W’ (weekly)型 及 ‘M’ (monthly)型,分別表示252, 52和12日情況下的方差。
  • scale (floatoptional) – 年化收益使用的參數,如果該參數被賦值,年化參數以實際賦值爲準。
Returns:

fig – 繪圖手柄

Return type:

圖像

舉例

>>> from arch import arch_model
>>> am = arch_model(None)
>>> sim_data = am.simulate([0.0, 0.01, 0.07, 0.92], 2520)
>>> am = arch_model(sim_data['data'])
>>> res = am.fit(update_freq=0, disp='off')
>>> fig = res.plot()

年化波動率圖:

>>> fig = res.plot(annualize='D')

以360日代替慣常使用的 252 日來畫圖:

>>> fig = res.plot(scale=360)

summary()[source]

擬合結果:

Returns: summary –包括表格以及文本,html和latex等便利輸出內容。
Return type: 結果實例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章