1.6 均值模型
所有的 ARCH模型開始時需要確定一個均值模型。
1.6.1非均值
class arch.univariate.
ZeroMean
(y=None, hold_back=None, volatility=None, distribution=None)[source]
0條件均值模型估計和模擬:
Parameters: |
|
---|
舉例:
>>> import numpy as np
>>> from arch.univariate import ZeroMean
>>> y = np.random.randn(100)
>>> zm = ZeroMean(y)
>>> res = zm.fit()
注意:
該零均值模型描述如下:
fit
(update_freq=1, disp='final', starting_values=None, cov_type='robust', show_warning=True, first_obs=None, last_obs=None, tol=None, options=None, backcast=None)
該模型應該具有 觀察值個數*1 的殘差值(sigma)的向量。
Parameters: |
|
---|---|
Returns: |
results – 包含模型結果的對象。 |
Return type: |
注意:
如果SciPy的優化器表明最優化困難時將會給出警示。參數使用SLSQP進行最優化。
fix
(params, first_obs=None, last_obs=None)
允許使用 ARCHModelFixedResult結果來構建固定參數模型。
Parameters: | |
---|---|
Returns: |
results – 模型結果對象 |
Return type: |
注意:
並不會針對具體模型的約束檢查參數。
forecast
(params, horizon=1, start=None, align='origin', method='analytic', simulations=1000, rng=None)
利用估計模型進行預測。
Parameters: |
|
---|---|
Returns: |
forecasts – t * h 的data frame 格式預測結果。該預測參數由align控制. |
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()
注意:
最基本的1步式預測將會返回與原始數據同樣大小的向量,其中第t個值表示t時刻對t+1時刻的預測。當預測步數大於1且使用默認值時,預測結果在位置 [t, h] 表示t時刻 h+1 步的預測結果。
如果模型包含外生變量(model.x 爲空), 則僅有1步式預測可用。預測步數大於1時將會產生警示信息,屆時除第一列外,其他列用nan填充。
如果選擇 ‘origin’,預測結果[t,h] 包括預測值y[:t] 表示h+1步預測(表示趨近但不包括t)。例如,y[100,2] 包括3步預測,使用前100個數據點,對應於結果集 y[100 + 2]. 如果選擇‘target’,則同樣的結果位於 [102, 2],以便與使用的觀察值對齊,但仍位於同一列中。
resids
(params, y=None, regressors=None)[source]
計算模型殘差
Parameters: |
|
---|---|
Returns: |
resids – 模型殘差 |
Return type: |
ndarray |
simulate
(params, nobs, burn=500, initial_value=None, x=None, initial_value_vol=None)[source]
基於零均值模型的模擬
Parameters: | |
---|---|
Returns: |
simulated_data – 包含模擬值,波動率,條件誤差和條件波動率的DataFrame列數據。 |
Return type: |
DataFrame |
舉例:
非均值和常數波動率的基本模擬:
>>> from arch.univariate import ZeroMean
>>> zm = ZeroMean()
>>> sim_data = zm.simulate([1.0], 1000)
非發散波動率過程的模擬:
>>> from arch.univariate import GARCH
>>> zm.volatility = GARCH(p=1, o=1, q=1)
>>> sim_data = zm.simulate([0.05, 0.1, 0.1, 0.8], 300)
1.6.2 常數均值
classarch.univariate.
ConstantMean
(y=None, hold_back=None, volatility=None, distribution=None)[source]
常數均值模型的估計和模擬.
Parameters: |
|
---|
舉例:
>>> import numpy as np
>>> from arch.univariate import ConstantMean
>>> y = np.random.randn(100)
>>> cm = ConstantMean(y)
>>> res = cm.fit()
注意:
該常數均值過程如下:
fit
(update_freq=1, disp='final', starting_values=None, cov_type='robust', show_warning=True, first_obs=None, last_obs=None, tol=None, options=None, backcast=None)
使用nobs*1的方差向量矩陣擬合模型。
Parameters: |
|
---|---|
Returns: |
results – 包含模型結果的對象。 |
Return type: |
注意:
如果SciPy優化器在查找最優值困難時,則會拋出收斂警示。
參數使用SLSQP進行最優化.
forecast
(params, horizon=1, start=None, align='origin', method='analytic', simulations=1000, rng=None)
基於估計模型進行預測。
Parameters: |
|
---|---|
Returns: |
forecasts – t * h大小的 data frame預測結果。該預測方法由align決定。 |
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()
注意:
最基本的1步預測返回一個與原始數據同樣大小的向量,其中第t個值爲t時刻對t+1時刻的預測。當預測步數大於1時且使用默認方法時,在預測集位置[t, h] 表示t時刻,h+1步預測。
如果模型包含外生變量 (model.x爲非空), 則僅有1步式預測可用。預測步數大於1時,將會給出警示信息,且除第一列外其他列用nan填充。
‘origin’方法的預測集位置[t,h]包含預測結果集 y[:t] 對應於預測步數h+1(也就是說,接近但不包含).例如,y[100,2] 包含基於前100個數據點的3步式預測結果,對應於結果集 y[100 + 2]. ‘target’則同樣的結果對應於 [102, 2],以便與觀察值一致,但位於同一列。
resids
(params, y=None, regressors=None)[source]
計算模型殘差。
Parameters: |
|
---|---|
Returns: |
resids –模型殘差 |
Return type: |
ndarray |
simulate
(params, nobs, burn=500, initial_value=None, x=None, initial_value_vol=None)[source]
基於常數均值模型的模擬數據。
Parameters: | |
---|---|
Returns: |
simulated_data – DataFrame數據列,包括模擬值,波動率,條件波動率以及誤差。 |
Return type: |
DataFrame |
舉例:
帶有常數均值和波動率過程的基本數據模擬。
>>> import numpy as np
>>> from arch.univariate import ConstantMean, GARCH
>>> cm = ConstantMean()
>>> cm.volatility = GARCH()
>>> cm_params = np.array([1])
>>> garch_params = np.array([0.01, 0.07, 0.92])
>>> params = np.concatenate((cm_params, garch_params))
>>> sim_data = cm.simulate(params, 1000)
1.6.3 自迴歸
classarch.univariate.
ARX
(y=None, x=None, lags=None, constant=True, hold_back=None, volatility=None, distribution=None)[source]
帶有可選外生變量的自迴歸模型估計和模擬。
Parameters: |
|
---|
舉例:
>>> import numpy as np
>>> from arch.univariate import ARX
>>> y = np.random.randn(100)
>>> arx = ARX(y, lags=[1, 5, 22])
>>> res = arx.fit()
估計自迴歸模型 GARCH(1,1)誤差:
>>> from arch.univariate import GARCH
>>> arx.volatility = GARCH()
>>> res = arx.fit(update_freq=0, disp=’off’)
注意
該AR-X 模型表述如下:
fit
(update_freq=1, disp='final', starting_values=None, cov_type='robust', show_warning=True, first_obs=None, last_obs=None, tol=None, options=None, backcast=None)
使用 nobs * 1的方差向量(sigma2)擬合模型。
Parameters: |
|
---|---|
Returns: |
results – 模型結果對象。 |
Return type: |
注意:
如果SciPy的優化器表明最優化困難時將會給出警示。參數使用SLSQP進行最優化。
fix
(params, first_obs=None, last_obs=None)
允許使用固定參數ARCHModelFixedResult.
Parameters: | |
---|---|
Returns: |
results – 模型結果對象。 |
Return type: |
注意:
參數並不針對具體模型約束進行檢查。
forecast
(params, horizon=1, start=None, align='origin', method='analytic', simulations=1000, rng=None)
構建基於估計模型的預測。
Parameters: |
|
---|---|
Returns: |
forecasts – t * h大小的 data frame預測集。該預測參數由align控制。 |
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()
注意:
最基本的1步預測會返回與原始數據同樣大小的向量,其中第 t個值則爲t時刻對t+1時刻的預測。當預測步數大於1時且使用默認align值,預測集位置 [t, h] 則爲t時刻 h+1步預測結果。
如果模型包含外生變量 (model.x 非空), 則僅有1步預測方法可用。若預測步數大於1則會產生警示信息,全部列除第一列外其他用nan填充。
如果使用‘origin’方法,預測結果[t,h]包含預測集 y[:t] 對應於h+1步預測(即接近但不包括t).例如,y[100,2]包含使用前100個數據點的3步預測,對應於預測結果y[100 + 2]. 如爲‘target’方法,則同樣的預測位於位置 [102, 2], 以便與觀察值一致,但仍位於同一列。
resids
(params, y=None, regressors=None)
計算模型殘差
Parameters: |
|
---|---|
Returns: |
resids – 模型殘差 |
Return type: |
ndarray |
simulate
(params, nobs, burn=500, initial_value=None, x=None, initial_value_vol=None)
模擬線性迴歸, AR 或 HAR模型。
Parameters: |
|
---|---|
Returns: |
simulated_data – DataFrame數據列,包括模擬值,波動率,條件波動率以及誤差。 |
Return type: |
DataFrame |
舉例:
>>> import numpy as np
>>> from arch.univariate import HARX, GARCH
>>> harx = HARX(lags=[1, 5, 22])
>>> harx.volatility = GARCH()
>>> harx_params = np.array([1, 0.2, 0.3, 0.4])
>>> garch_params = np.array([0.01, 0.07, 0.92])
>>> params = np.concatenate((harx_params, garch_params))
>>> sim_data = harx.simulate(params, 1000)
外生變量的模型模擬計算係數時需要nobs加burn個數據點。
>>> nobs = 100
>>> burn = 200
>>> x = np.random.randn(nobs + burn, 2)
>>> x_params = np.array([1.0, 2.0])
>>> params = np.concatenate((harx_params, x_params, garch_params))
>>> sim_data = harx.simulate(params, nobs=nobs, burn=burn, x=x)
1.6.4 異方差自迴歸
classarch.univariate.
HARX
(y=None, x=None, lags=None, constant=True, use_rotated=False, hold_back=None, volatility=None, distribution=None)[source]
異方差自迴歸(HAR), 且帶有可選外生係數,估計模型以及模擬。
Parameters: |
|
---|
舉例:
>>> import numpy as np
>>> from arch.univariate import HARX
>>> y = np.random.randn(100)
>>> harx = HARX(y, lags=[1, 5, 22])
>>> res = harx.fit()
>>> from pandas import Series, date_range
>>> index = date_range('2000-01-01', freq='M', periods=y.shape[0])
>>> y = Series(y, name='y', index=index)
>>> har = HARX(y, lags=[1, 6], hold_back=10)
注意:
HAR-X模型描述如下:
fit
(update_freq=1, disp='final', starting_values=None, cov_type='robust', show_warning=True, first_obs=None, last_obs=None, tol=None, options=None, backcast=None)
使用nobs*1大小的方差向量(sigma2)來擬合模型。
Parameters: |
|
---|---|
Returns: |
results – 模型結果對象 |
Return type: |
注意:
如果SciPy優化器無法獲得最優值,則拋出收斂警示信息。參數使用SLSQP進行優化。
fix
(params, first_obs=None, last_obs=None)
使用固定參數構建 ARCHModelFixedResult.
Parameters: | |
---|---|
Returns: |
results – 包含模型結果的對象。 |
Return type: |
注意:
參數並不對具體模型的約束條件進行檢查。
forecast
(params, horizon=1, start=None, align='origin', method='analytic', simulations=1000, rng=None)[source]
利用估計模型進行預測。
Parameters: |
|
---|---|
Returns: |
forecasts – t * h 大小的data frame預測集,該預測結果由align控制。 |
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()
注意:
最基本的1步預測將返回與原始數據同樣大小的向量,第t個值則爲時刻t對t+1時刻的預測。當預測步數大於1時且使用默認預測方法時,在預測集位置 [t, h]爲在時刻t,h+1 步的預測結果。
如果模型包含外生變量 (model.x非空),那麼僅有1步預測可用。當預測步數大於1時,將會產生警示信息,所有列除第一列外,由nan填充。
如果採用 ‘origin’方法,預測集[t,h] 包含預測結果y[:t] (即接近但不包括)對應於t+1步.例如,y[100,2] 包括對前100個數據點的3步預測,對應於結果 y[100 + 2]. 如果方法爲 ‘target’, 那麼同樣的預測結果位於 [102, 2], 因而與觀察值一致,但位於同一列。
resids
(params, y=None, regressors=None)[source]
計算模型殘差
Parameters: |
|
---|---|
Returns: |
resids – 模型殘差 |
Return type: |
ndarray |
simulate
(params, nobs, burn=500, initial_value=None, x=None, initial_value_vol=None)[source]
基於線性迴歸, AR 或 HAR模型模擬數據
Parameters: |
|
---|---|
Returns: |
simulated_data –包含模擬值,波動率,條件波動率及誤差的 DataFrame數據列。 |
Return type: |
DataFrame |
舉例:
>>> import numpy as np
>>> from arch.univariate import HARX, GARCH
>>> harx = HARX(lags=[1, 5, 22])
>>> harx.volatility = GARCH()
>>> harx_params = np.array([1, 0.2, 0.3, 0.4])
>>> garch_params = np.array([0.01, 0.07, 0.92])
>>> params = np.concatenate((harx_params, garch_params))
>>> sim_data = harx.simulate(params, 1000)
模擬具有外生變量的模型時,需要 nobs + burn個數據點。
>>> nobs = 100
>>> burn = 200
>>> x = np.random.randn(nobs + burn, 2)
>>> x_params = np.array([1.0, 2.0])
>>> params = np.concatenate((harx_params, x_params, garch_params))
>>> sim_data = harx.simulate(params, nobs=nobs, burn=burn, x=x)
1.6.5 最小平方法
classarch.univariate.
LS
(y=None, x=None, constant=True, hold_back=None)[source]
最小平方法估計模型和模擬。
Parameters: |
---|
舉例:
>>> import numpy as np
>>> from arch.univariate import LS
>>> y = np.random.randn(100)
>>> x = np.random.randn(100,2)
>>> ls = LS(y, x)
>>> res = ls.fit()
注意:
最小平方模型表述如下:
fit
(update_freq=1, disp='final', starting_values=None, cov_type='robust', show_warning=True, first_obs=None, last_obs=None, tol=None, options=None, backcast=None)
使用nobs*1大小的方差向量擬合模型。
Parameters: |
|
---|---|
Returns: |
results – 包含模型結果的對象 |
Return type: |
注意:
如果SciPy的優化器無法找到最優值,則拋出收斂警示信息。參數採用SLSQP最優化。
fix
(params, first_obs=None, last_obs=None)
利用固定參數構建 ARCHModelFixedResult。
Parameters: | |
---|---|
Returns: |
results –包含模型結果的對象。 |
Return type: |
注意:
參數並不針對具體模型的約束條件進行檢查。
resids
(params, y=None, regressors=None)
計算模擬殘差
Parameters: |
|
---|---|
Returns: |
resids – 模型殘差 |
Return type: |
ndarray |
simulate
(params, nobs, burn=500, initial_value=None, x=None, initial_value_vol=None)
模擬數據來自線性迴歸,AR或HAR模型。
Parameters: |
|
---|---|
Returns: |
simulated_data – 包含模擬值,波動率及條件波動率和誤差的DataFrame數據列格式。 |
Return type: |
DataFrame |
舉例:
>>> import numpy as np
>>> from arch.univariate import HARX, GARCH
>>> harx = HARX(lags=[1, 5, 22])
>>> harx.volatility = GARCH()
>>> harx_params = np.array([1, 0.2, 0.3, 0.4])
>>> garch_params = np.array([0.01, 0.07, 0.92])
>>> params = np.concatenate((harx_params, garch_params))
>>> sim_data = harx.simulate(params, 1000)
模擬具有外生變量的模型時,擬合迴歸係數需要觀察值加上burn數據點。
>>> nobs = 100
>>> burn = 200
>>> x = np.random.randn(nobs + burn, 2)
>>> x_params = np.array([1.0, 2.0])
>>> params = np.concatenate((harx_params, x_params, garch_params))
>>> sim_data = harx.simulate(params, nobs=nobs, burn=burn, x=x)
1.6.6 編寫新的均值模型
所有的均值模型必須繼承自類:class:ARCHModel ,該類提供所有public方法。如果可行,則有兩個可選的private方法。
class arch.univariate.base.
ARCHModel
(y=None, volatility=None, distribution=None, hold_back=None)[source]
ARCH過程關於均值模型的抽象基類,表明了條件均值過程。
所有的public方法如果被子類覆蓋會拋出未執行錯誤NotImplementedError。私有方法拋出未執行錯誤NotImplementedError如果可行則可選。