關於Python的ARCH包(七)

1.6 均值模型

所有的 ARCH模型開始時需要確定一個均值模型。

1.6.1非均值

class arch.univariate.ZeroMean(y=Nonehold_back=Nonevolatility=Nonedistribution=None)[source]

0條件均值模型估計和模擬:

Parameters:
  • y ({ndarraySeries}) – 包含因變量的多維觀察值向量
  • hold_back (int) – 估計參數時需要排除的觀察值起始位置。這個在同一樣本比較不同的滯後階長度時使用。
  • volatility (VolatilityProcessoptional) – 模型使用的波動性過程。
  • distribution (Distributionoptional) – 模型誤差分佈。

舉例:

>>> import numpy as np
>>> from arch.univariate import ZeroMean
>>> y = np.random.randn(100)
>>> zm = ZeroMean(y)
>>> res = zm.fit()

注意:

該零均值模型描述如下:

fit(update_freq=1disp='final'starting_values=Nonecov_type='robust'show_warning=Truefirst_obs=Nonelast_obs=Nonetol=Noneoptions=Nonebackcast=None)

該模型應該具有 觀察值個數*1 的殘差值(sigma)的向量。

Parameters:
  • update_freq (intoptional) – 迭代頻率. 每次迭代都產生結果,設置爲0即禁用迭代。
  • disp (str) – final打印最優結果,或者off不作顯示。
  • starting_values (ndarrayoptional) – 使用的起始值數組。如果爲空,起始值由模型參數確定。
  • cov_type (stroptional) – 協方差係數的估計方法。選項支持robust,這並不假定信息矩陣平衡性成立,而classic則假定成立。在 ARCH 文獻中,‘robust’對應於Bollerslev-Wooldridge協方差估計值。
  • show_warning (booloptional) – 波爾型,則表示是否顯示收斂警示。
  • first_obs ({intstrdatetimeTimestamp}) – 估計模型時使用的第一個觀察值。last_obs ({intstrdatetimeTimestamp}) – 估計模型時使用的最後一個觀察值。
  • tol (floatoptional) – 允許結束。
  • options (dictoptional) – 傳遞給 scipy.optimize.minimize的參數. 有效輸入包括‘ftol’, ‘eps’, ‘disp’,  ‘maxiter’.
  • backcast (floatoptional) – 回測使用的值。如果模型假定非線性遞歸運算,則應該爲初始方差。
Returns:

results – 包含模型結果的對象。

Return type:

ARCHModelResult

注意:

如果SciPy的優化器表明最優化困難時將會給出警示。參數使用SLSQP進行最優化。

fix(paramsfirst_obs=Nonelast_obs=None)

允許使用 ARCHModelFixedResult結果來構建固定參數模型。

Parameters:
  • params ({ndarraySeries}) – 使用給定參數來產生結果,包括均值模型,波動率模型以及分佈的參數都應該正確提供。
  • first_obs ({intstrdatetimeTimestamp}) – 使用固定模型時的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) – 使用固定模型時的最後一個值。
Returns:

results – 模型結果對象

Return type:

ARCHModelFixedResult

注意:

並不會針對具體模型的約束檢查參數。

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

利用估計模型進行預測。

Parameters:
  • params ({ndarraySeries}optional) – 使用的替代參數。如果爲空,則使用估計所得參數,且應該與擬合模型所得參數的大小一致。
  • horizon (intoptional) – 預測步數。
  • start ({intdatetimeTimestampstr}optional) –整型,日期型或字符串型,表明預測使用的第一個觀察值。日期型僅僅適用於pandas輸入,且具有日期型索引。字符串必須可以轉換爲日期型,比如 ‘1945-01-01’.
  • align (stroptional) –‘origin’ 或 ‘target’. 設定爲 ‘origin’時,第 t行的預測值包括 t+1, t+2, …, t+h預測結果.設定爲‘target’, 第t行包括一步式預測結果,如1對應於t-1,2對應於t-2,h對應於t-h. 一旦h步預測確定,則‘target’ 簡化了預測誤差的計算。
  • method ({'analytic''simulation''bootstrap'}) – 預測使用的方法,默認爲解析法(analytic).該方法選擇僅影響預測結果的方差。並非所有波動率模型支持所有方法。應該指出,波動率模型不支持平方項線性關係的,在步數大於1時則不支持解析方法,比如EGARCH,TARCH。
  • simulations (int) – 使用simulation或bootstrap時計算的次數。
  • rng (callableoptional) – 模擬預測時使用的自主隨機數生成器,須使用rng(size)語法來表明2維數組(模擬次數,步數)。
Returns:

forecasts – t * h 的data frame 格式預測結果。該預測參數由align控制.

Return type:

ARCHModelForecast

舉例:

>>> 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(paramsy=Noneregressors=None)[source]

計算模型殘差

Parameters:
  • params (ndarray) – 模型參數
  • y (ndarrayoptional) – 計算模型殘差時的替代值。
  • regressors (ndarrayoptional) – 計算模型殘差值時的替代迴歸係數值。
Returns:

resids – 模型殘差

Return type:

ndarray

 

simulate(paramsnobsburn=500initial_value=Nonex=Noneinitial_value_vol=None)[source]

基於零均值模型的模擬

Parameters:
  • params ({ndarrayDataFrame}) – 模擬模型時使用的參數。參數順序爲 [volatility distribution].沒有均值參數。
  • nobs (int) – 模擬的時間序列長度。
  • burn (intoptional) – 模型初始化使用值的個數,且在原始數據中排除.
  • initial_value (None) – 未用值。
  • x (None) – 未用值.
  • initial_value_vol ({ndarrayfloat}optional) – 初始化波動率過程的數組或標量。
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=Nonehold_back=Nonevolatility=Nonedistribution=None)[source]

常數均值模型的估計和模擬.

Parameters:
  • y ({ndarraySeries}) – 包含因變量的觀察值多維向量
  • hold_back (int) – 估計模型時需要排除的樣本起始位置的觀察值數,該參數在對同一樣本使用不同的滯後階數進行模型比較時使用。
  • volatility (VolatilityProcessoptional) – 模型波動率過程
  • distribution (Distributionoptional) – 模型誤差分佈

舉例:

>>> import numpy as np
>>> from arch.univariate import ConstantMean
>>> y = np.random.randn(100)
>>> cm = ConstantMean(y)
>>> res = cm.fit()

注意:

該常數均值過程如下:

fit(update_freq=1disp='final'starting_values=Nonecov_type='robust'show_warning=Truefirst_obs=Nonelast_obs=Nonetol=Noneoptions=Nonebackcast=None)

使用nobs*1的方差向量矩陣擬合模型。

Parameters:
  • update_freq (intoptional) – 迭代更新頻率,每個迭代頻率都有對應結果。設置爲0則禁用迭代。
  • disp (str) –  ‘final’表示最優結果,而 ‘off’表示無顯示。
  • starting_values (ndarrayoptional) – 使用的起始觀察值數組。如果爲空,起始值由模型參數指定。
  • cov_type (stroptional) – 參數協方差的估計方法。 ‘robust’並不假定信息矩陣具有平衡性而'classic'則反之。在ARCH 文獻中,‘robust’對應於Bollerslev-Wooldridge協方差估計參數。
  • show_warning (booloptional) – 標明是否顯示收斂警示。
  • first_obs ({intstrdatetimeTimestamp}) –估計模型的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) – 估計模型使用的最後一個觀察值。
  • tol (floatoptional) – 允許終止。
  • options (dictoptional) – 傳遞給 scipy.optimize.minimize的參數. 支持參數爲‘ftol’, ‘eps’, ‘disp’ 和 ‘maxiter’.
  • backcast (floatoptional) – 回測使用的值。 Should be measure σ20 since model-specific non-linear transformations are applied to value before computing the variance recusions.
Returns:

results – 包含模型結果的對象。

Return type:

ARCHModelResult

注意:

如果SciPy優化器在查找最優值困難時,則會拋出收斂警示。

參數使用SLSQP進行最優化.

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

基於估計模型進行預測。

Parameters:
  • params ({ndarraySeries}optional) – 使用的替代參數。如果爲空,則使用擬合參數。該參數數組大小應該與擬合模型所得參數一致。
  • horizon (intoptional) – 預測步數
  • start ({intdatetimeTimestampstr}optional) – 整型,日期型或字符串型用來預測的第一個觀察值。日期型數據僅限於具有日期索引的pandas數據。字符串應可轉化爲日期型,比如 ‘1945-01-01’.
  • align (stroptional) – ‘origin’或 ‘target’. ‘origin’表示第t行的預測結果包含t+1, t+2, …, t+h.  ‘target’,則第1行對應於t-1的一步預測,第2步對應於t-2, …,第h步對應於t-h. 由於選擇h步預測,則‘target’方法簡化了預測誤差的計算。
  • method ({'analytic''simulation''bootstrap'}) – 預測方法,默認爲解析法(analytic). 方法選擇僅影響預測結果的方差。並非所有波動率支持所有方法.應該指出,與平方項呈非線性的波動率模型在預測步數大於1時,並不支持解析方法(analytic),比如EGARCH或TARCH.
  • simulations (int) – 使用模擬或自舉方法進行預測的模擬次數。
  • rng (callableoptional) – 基於模擬預測的隨機數生成器,應使用rng(size)語法(simulations,horizon的二維數組)來生成隨機樣本。
Returns:

forecasts – t * h大小的 data frame預測結果。該預測方法由align決定。

Return type:

ARCHModelForecast

舉例:

>>> 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(paramsy=Noneregressors=None)[source]

計算模型殘差。

Parameters:
  • params (ndarray) – 模型參數
  • y (ndarrayoptional) – 計算模型殘差時使用的替代值。
  • regressors (ndarrayoptional) – 計算模型殘差時使用的替代迴歸係數值。
Returns:

resids –模型殘差

Return type:

ndarray

simulate(paramsnobsburn=500initial_value=Nonex=Noneinitial_value_vol=None)[source]

基於常數均值模型的模擬數據。

Parameters:
  • params (ndarray) – 模擬模型時使用的參數. 參數順序爲 [mean volatility distribution]. 在均值模型中有一個參數 mu.
  • nobs (int) – 模擬序列的長度
  • burn (intoptional) – 初始化模型進行模擬時使用的數值個數,且在原始數據中排除。
  • initial_value (None) – 該值未使用。
  • x (None) – 該值未使用。
  • initial_value_vol ({ndarrayfloat}optional) – 初始化波動率過程時使用的數組或標量。
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=Nonex=Nonelags=Noneconstant=Truehold_back=Nonevolatility=Nonedistribution=None)[source]

帶有可選外生變量的自迴歸模型估計和模擬。

Parameters:
  • y ({ndarraySeries}) – 包括因變量的觀察值個數的向量。
  • x ({ndarrayDataFrame}optional) – nobs * k的包含外生因子的多維數組。
  • lags (scalar1-d arrayoptional) – 異方差自迴歸滯後階數。標量包括1和最大值之間的滯後階。一個1維數組包括 AR 滯後階 lags[0], lags[1], …。
  • constant (booloptional) – 模型中是否包括常數。
  • hold_back (int) – 估計模型參數時排除的樣本中觀察值數量。當使用不同的滯後階數對同一樣本進行估計比較時使用。

舉例:

>>> 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=1disp='final'starting_values=Nonecov_type='robust'show_warning=Truefirst_obs=Nonelast_obs=Nonetol=Noneoptions=Nonebackcast=None)

使用 nobs * 1的方差向量(sigma2)擬合模型。

Parameters:
  • update_freq (intoptional) – 迭代頻率,並對應於迭代結果。該參數設置爲 0 時則禁用迭代。
  • disp (str) –  ‘final’打印最優化結果,而 ‘off’則表示不顯示結果。
  • starting_values (ndarrayoptional) – 使用的起始值數組。如果爲空,則起始值由模型參數構建。
  • cov_type (stroptional) – 參數協方差的估計方法。‘robust’並不假定信息矩陣的平衡性而‘classic’則反之。在ARCH 文獻中,‘robust’對應於Bollerslev-Wooldridge協方差估計參數。
  • show_warning (booloptional) – 是否顯示收斂警示信息。
  • first_obs ({intstrdatetimeTimestamp}) – 估計模型使用的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) – 估計模型使用的最後一個觀察值。
  • tol (floatoptional) – 允許終止。
  • options (dictoptional) – 傳遞給 scipy.optimize.minimize參數. 可用參數爲 ‘ftol’, ‘eps’, ‘disp’和 ‘maxiter’.
  • backcast (floatoptional) – 回測時使用的值。如果模型爲非線性轉換,在方差遞歸計算時應爲方差。
Returns:

results – 模型結果對象。

Return type:

ARCHModelResult

注意:

如果SciPy的優化器表明最優化困難時將會給出警示。參數使用SLSQP進行最優化。

fix(paramsfirst_obs=Nonelast_obs=None)

允許使用固定參數ARCHModelFixedResult.

Parameters:
  • params ({ndarraySeries}) – 使用給定的參數生成結果,在給定均值模型,波動率模型和分佈的情況下,應該提供正確的參數值。
  • first_obs ({intstrdatetimeTimestamp}) – 固定模型使用的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) –固定模型使用的最後一個觀察值。
Returns:

results – 模型結果對象。

Return type:

ARCHModelFixedResult

注意:

參數並不針對具體模型約束進行檢查。

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

構建基於估計模型的預測。

Parameters:
  • params ({ndarraySeries}optional) – 使用的替代參數。如果爲空,則使用擬合模型的參數。該參數應與擬合參數一致。
  • horizon (intoptional) – 預測步數。
  • start ({intdatetimeTimestampstr}optional) – 整型,日期型或字符串型數據,表示用來預測的第一個觀察值。日期型數據僅限於pandas數據且具有日期索引,字符串應該可以轉換爲‘1945-01-01’.
  • align (stroptional) – ‘origin’ 或 ‘target’. 若爲 ‘origin’, 則第t行預測結果包含的預測值爲 t+1, t+2, …, t+h. 若設定爲 ‘target’, 第t行表示1步式預測結果對應於t-1,第2步對應於t-2,第h步對應於t-h. ‘target’方法在使用h步預測時,簡化了預測誤差的計算。method ({'analytic''simulation''bootstrap'}) – 預測方法,默認爲解析法(analytic). 該方法僅影響預測結果的方差。並非全部波動率模型支持所有方法。應該指出,非線性波動率模型在預測步數大於1時不支持解析方法,如 EGARCH 或 TARCH。
  • simulations (int) – 使用模擬或自舉方法進行預測時的模擬次數。
  • rng (callableoptional) – 模擬預測時使用的自主隨機數生成器,應該使用2維數組(simulations,horizon)來生成隨機樣本。
Returns:

forecasts – t * h大小的 data frame預測集。該預測參數由align控制。

Return type:

ARCHModelForecast

舉例:

>>> 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(paramsy=Noneregressors=None)

計算模型殘差

Parameters:
  • params (ndarray) – 模型係數
  • y (ndarrayoptional) – 計算模型時使用的替代值。
  • regressors (ndarrayoptional) – 計算模型殘差時使用的替代迴歸係數。
Returns:

resids – 模型殘差

Return type:

ndarray

simulate(paramsnobsburn=500initial_value=Nonex=Noneinitial_value_vol=None)

模擬線性迴歸, AR 或 HAR模型。

Parameters:
  • params (ndarray) – 模擬模型使用的參數。參數順序爲 [mean volatility distribution],均值參數爲 [constant lag[0] lag[1] … lag[p] ex[0] … ex[k-1]]。其中lag[j] 表示第j個滯後階的係數,ex[j] 則爲第j個外生變量係數。
  • nobs (int) – 模擬序列的長度。
  • burn (intoptional) – 用來模擬初始化模型的初始值個數,會在計算式排除。
  • initial_value ({ndarrayfloat}optional) – 當初始化模型時或爲標量或最大滯後階。如果忽略,則使用0.0.
  • x ({ndarrayDataFrame}optional) – nobs + burn個數值,模擬中包括 k個外生變量。 
  • initial_value_vol ({ndarrayfloat}optional) – 初始化波動率過程的數組或標量。
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=Nonex=Nonelags=Noneconstant=Trueuse_rotated=Falsehold_back=Nonevolatility=Nonedistribution=None)[source]

異方差自迴歸(HAR), 且帶有可選外生係數,估計模型以及模擬。

Parameters:
  • y ({ndarraySeries}) – 包括nobs維的因變量向量。
  • x ({ndarrayDataFrame}optional) – nobs* k大小的包括外生銀子的數組。
  • lags ({scalarndarray}optional) – HAR的滯後階數。標量包括1到最大值之間的階數。其中1維數組包括HAR lags 1:lags[0], 1:lags[1], … ,2維數組包括HAR所有滯後列的 滯後階數lags[0,j]:lags[1,j]。 
  • constant (booloptional) – 模型是否包含常數。
  • use_rotated (booloptional) –是否使用HAR的替代變換形式,且滯後無重複。
  • hold_back (int) – 估計參數時需要排除的樣本頭的觀察值個數。該法在對同一樣本進行不同滯後階數估計進行比較時使用。
  • volatility (VolatilityProcessoptional) – 模型中使用的波動率過程V
  • distribution (Distributionoptional) – 模型的誤差分佈。

舉例:

>>> 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=1disp='final'starting_values=Nonecov_type='robust'show_warning=Truefirst_obs=Nonelast_obs=Nonetol=Noneoptions=Nonebackcast=None)

使用nobs*1大小的方差向量(sigma2)來擬合模型。

Parameters:
  • update_freq (intoptional) –迭代更新頻率,並對應於每個結果。0表示禁用迭代。
  • disp (str) –  ‘final’打印最優化結果而‘off’則不顯示信息。
  • starting_values (ndarrayoptional) – 使用的起始數組。如果爲空,則使用模型參數構建初始值。
  • cov_type (stroptional) – 參數協方差的估計方法。‘robust’不假定信息矩陣的均衡化而 ‘classic’則反之。在 ARCH文獻中,‘robust’對應於 Bollerslev-Wooldridge協方差估計參數。
  • show_warning (booloptional) – 是否顯示收斂警示信息。
  • first_obs ({intstrdatetimeTimestamp}) –估計模型使用的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) –估計模型使用的最後一個觀察值。
  • tol (floatoptional) –允許終止程序。
  • options (dictoptional) – 傳遞給 scipy.optimize.minimize的參數.有效參數包括: ‘ftol’, ‘eps’, ‘disp’和 ‘maxiter’.
  • backcast (floatoptional) – 回測使用的值。如果在方差遞歸計算前爲非線性變換則爲方差。
Returns:

results – 模型結果對象

Return type:

ARCHModelResult

注意:

如果SciPy優化器無法獲得最優值,則拋出收斂警示信息。參數使用SLSQP進行優化。

fix(paramsfirst_obs=Nonelast_obs=None)

使用固定參數構建 ARCHModelFixedResult.

Parameters:
  • params ({ndarraySeries}) – 使用所給具體參數生成結果。應該給出關於均值模型,波動率模型和分佈的正確的具體參數。
  • first_obs ({intstrdatetimeTimestamp}) – 固定模型使用的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) – 固定模型使用的最後一個觀察值。
Returns:

results – 包含模型結果的對象。

Return type:

ARCHModelFixedResult

注意:

參數並不對具體模型的約束條件進行檢查。

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

利用估計模型進行預測。

Parameters:
  • params ({ndarraySeries}optional) – 使用的替代參數。如果爲空,則表示使用擬合模型所得參數。其大小必須與擬合模型參數一致。
  • horizon (intoptional) – 預測步數
  • start ({intdatetimeTimestampstr}optional) – 整型,日期型或字符串型數值,表示用來預測的第一個觀察值數據。日期型僅僅適於帶有日期索引的pandas數據,字符串必須可轉換爲日期型,如: ‘1945-01-01’.
  • align (stroptional) – ‘origin’或 ‘target’.  ‘origin’表示第t行的預測內容包括t=1,t+2,...t+h的預測結果。, 當設定爲 ‘target’時,第t行數據表示1步對應於t-1,2步對應於t-2,...,h步對應於t-h. ‘target’在h步結果的出後可以簡化預測誤差的計算。
  • method ({'analytic''simulation''bootstrap'}) –預測方法,默認爲解析法。該方法僅影響預測方差。並非所有波動率模型支持所有方法。應該指出,非線性模型在預測步數大於1時不支持解析方法,比如EGARCH 或 TARCH。
  • simulations (int) – 使用simulation 或bootstrap進行預測計算時的模擬次數。
  • rng (callableoptional) –用於模擬預測的自主隨機數生成器 ,應該使用rng(size)(2維數組,包括simulation,horizon)語法來生成隨機樣本。
Returns:

forecasts – t * h 大小的data frame預測集,該預測結果由align控制。

Return type:

ARCHModelForecast

舉例:

>>> 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(paramsy=Noneregressors=None)[source]

計算模型殘差

Parameters:
  • params (ndarray) –模型參數
  • y (ndarrayoptional) – 計算模型殘差的替代值。
  • regressors (ndarrayoptional) – 計算模型殘差時替代迴歸係數值。
Returns:

resids – 模型殘差

Return type:

ndarray

simulate(paramsnobsburn=500initial_value=Nonex=Noneinitial_value_vol=None)[source]

基於線性迴歸, AR 或 HAR模型模擬數據

Parameters:
  • params (ndarray) – 模擬模型的參數,參數順序爲[mean volatility distribution] ,其中均值模型的參數順序爲[constant lag[0] lag[1] … lag[p] ex[0] … ex[k-1]] 。其中, lag[j] 表示模型第j階滯後, ex[j]表示第j個外生變量。
  • nobs (int) –模擬序列的長度
  • burn (intoptional) – 用於初始化模型的值得個數,且會在原始數據中排除。
  • initial_value ({ndarrayfloat}optional) – 初始化模型的標量值或最大滯後階數數組。若省略,則使用0.0.
  • x ({ndarrayDataFrame}optional) – 模擬中nobs + burn 大小且包含 k個外生變量的數組。 
  • initial_value_vol ({ndarrayfloat}optional) – 初始化波動率過程使用的數組或標量。
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=Nonex=Noneconstant=Truehold_back=None)[source]

最小平方法估計模型和模擬。

Parameters:
  • y ({ndarrayDataFrame}optional) – 包含因變量的nobs維向量 
  • y – nobs *k維包含外生變量的數組
  • constant (booloptional) – 是否包含常數
  • hold_back (int) – 估計模型參數時需要排除的樣本頭的觀察值數量。在對同一樣本進行不同滯後階數的比較分析時使用。

舉例:

>>> 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=1disp='final'starting_values=Nonecov_type='robust'show_warning=Truefirst_obs=Nonelast_obs=Nonetol=Noneoptions=Nonebackcast=None)

使用nobs*1大小的方差向量擬合模型。

Parameters:
  • update_freq (intoptional) – 迭代頻率,且對應於每個結果。0表示禁用迭代。
  • disp (str) –  ‘final’打印最優結果,而 ‘off’則表示不顯示。
  • starting_values (ndarrayoptional) – 使用的起始值數組,如果爲空,則使用模型參數構建起始值。
  • cov_type (stroptional) – 參數協方差的估計方法,robust不假定信息矩陣平衡性而classic則反之。在ARCH文獻中,robust對應於 Bollerslev-Wooldridge協方差估計方法。
  • show_warning (booloptional) – 是否顯示收斂警示信息。
  • first_obs ({intstrdatetimeTimestamp}) – 估計模型使用的第一個觀察值。
  • last_obs ({intstrdatetimeTimestamp}) – 估計模型使用的最後一個觀察值。
  • tol (floatoptional) – 允許終止。
  • options (dictoptional) – 傳遞給 scipy.optimize.minimize的參數,包括 ‘ftol’, ‘eps’, ‘disp’,和 ‘maxiter’.
  • backcast (floatoptional) – 回測使用的值,在進行方差遞歸運算前若爲非線性變換,則應爲方差。
Returns:

results – 包含模型結果的對象

Return type:

ARCHModelResult

注意:

如果SciPy的優化器無法找到最優值,則拋出收斂警示信息。參數採用SLSQP最優化。

fix(paramsfirst_obs=Nonelast_obs=None)

利用固定參數構建 ARCHModelFixedResult。

Parameters:
  • params ({ndarraySeries}) – 使用給定參數來產生結果,應該給出均值模型,波動率模型和分佈的正確數量的參數。
  • first_obs ({intstrdatetimeTimestamp}) – 固定模型使用的第一個觀察值
  • last_obs ({intstrdatetimeTimestamp}) – 固定模型使用的最後觀察值
Returns:

results –包含模型結果的對象。

Return type:

ARCHModelFixedResult

注意:

參數並不針對具體模型的約束條件進行檢查。

resids(paramsy=Noneregressors=None)

計算模擬殘差

Parameters:
  • params (ndarray) – 模型參數。
  • y (ndarrayoptional) – 計算模型殘差使用的替代值。
  • regressors (ndarrayoptional) – 計算模型殘差時使用的替代迴歸係數值。
Returns:

resids – 模型殘差

Return type:

ndarray

simulate(paramsnobsburn=500initial_value=Nonex=Noneinitial_value_vol=None)

模擬數據來自線性迴歸,AR或HAR模型。

Parameters:
  • params (ndarray) – 模擬模型時使用的參數. 參數順序爲 [mean volatility distribution],其中均值參數順序爲[constant lag[0] lag[1] … lag[p] ex[0] … ex[k-1]]。其中, lag[j] 表示模型中的第j階滯後, ex[j]表示第j個外生變量。
  • nobs (int) – 模擬序列長度
  • burn (intoptional) – 原始數據中被排除且用於模擬時初始化模型的數據。
  • initial_value ({ndarrayfloat}optional) – 初始化模型的標量值或最大滯後階數max(lags)數組。如果省略,則使用0.0.
  • x ({ndarrayDataFrame}optional) – nobs + burn,模擬中表示k個外生變量.
  • initial_value_vol ({ndarrayfloat}optional) –初始化波動率過程的數組或標量。
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=Nonevolatility=Nonedistribution=Nonehold_back=None)[source]

ARCH過程關於均值模型的抽象基類,表明了條件均值過程。

所有的public方法如果被子類覆蓋會拋出未執行錯誤NotImplementedError。私有方法拋出未執行錯誤NotImplementedError如果可行則可選。

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