1.单变量波动率模型
1.1引言
1.2 举例
1.3 预测
1.4 预测举例
1.5 预测类型
1.6 均值模型
1.7 波动率过程
1.8 不变方差过程
1.9 分布
1.10 背景及引用
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#拟合结果
arch.
arch_model
(y, x=None, mean='Constant', lags=0, vol='Garch', p=1, o=0, q=1, power=2.0, dist='Normal', hold_back=None)[source]
使用便利函数以便arch模型快速初始化:
Parameters: |
|
---|---|
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)
class arch.univariate.base.
ARCHModelResult
(params, param_cov, r2, resid, volatility, cov_type, dep_var, names, loglikelihood, is_pandas, optim_output, fit_start, fit_stop, model)[source]
ARCHModel 模型的估计结果
Parameters: |
|
---|
summary
() [source] :对结果进行汇总。
plot
() :对波动率和标准化的残差进行绘图。
conf_int
()[source] :置信区间。
loglikelihood :浮点型,对数似然率的值。
params :时间序列类型,估计所得参数。
param_cov :DataFrame类型,估计参数的方差协方差。
resid :
{ndarray, Series}:观察值数组,包括模型残差。
model
ARCHModel –Model:用来拟合的模型实例
conf_int
(alpha=0.05)[source]
Parameters: | alpha (浮点型,可选) – 构建置信区间的规模(即概率). |
---|---|
Returns: | ci – 数组型,第i行包括第i个参数的置信区间。 |
Return type: | ndarray(n维数组型) |
forecast
(params=None, horizon=1, start=None, align='origin', method='analytic', simulations=1000, rng=None)
利用估计所得模型参数进行预测
Parameters: |
|
---|---|
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: |
|
---|
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=None, scale=None)
标准化残差或波动率的图形化展示
Parameters: |
|
---|---|
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
)不同,两者在参数没有估计时不存在相关关系。
ARCHModelFixedResult
class arch.univariate.base.
ARCHModelFixedResult
(params, resid, volatility, dep_var, names, loglikelihood, is_pandas, model)[source]
对于固定参数ARCH模型的估计结果
Parameters: |
|
---|
summary
() source] :汇总结果。
plot
()[source]
对波动率和标准化残差画图。
forecast
()[source]
利用模型构建预测。
loglikelihood
float – 对数似然值
params
Series – 所估计参数。
resid
{ndarray, Series} – 包括模型残差的观察值数组。
model
ARCHModel – 用于拟合的模型实例。
forecast
(params=None, horizon=1, start=None, align='origin', method='analytic', simulations=1000, rng=None)[source]
利用估计模型进行预测。
Parameters: |
|
---|---|
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=None, horizon=10, step=10, start=None, type='volatility', method='analytic', simulations=1000)[source]
Plot forecasts from estimated model
Parameters: |
|
---|---|
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=None, scale=None)[source]
标准化残差及条件波动率的图示。
Parameters: |
|
---|---|
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: | 结果实例 |