数模更新篇-4-ARCH和GARCH模型

引入ARCH模型的目的

数据呈现波动聚集性,长期看来时间序列平稳,短期看起来不平稳,存在异方差。
在这里插入图片描述
数据呈现波动聚集性的特点,但从长期来看,数据是平稳的,即长期方差(无条件方差)是定值,但是从短期来看,存在着异方差,我们称这种异方差为条件异方差(本期的方差大,下期的方差有很大的可能也大)。

何时使用ARCH或者GARCH模型

只有扰动项存在条件异方差的时候,才需要使用ARCH和GARCH模型。那么,如何判断扰动项是否存在条件异方差呢?初步的判断方法为画出时间序列图,观察是否存在“波动聚集性”。

严格的方法有三种

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ARCH和GARCH模型的应用

在这里插入图片描述
数据如下:
在这里插入图片描述

由以上的数据我们可以得到:
在这里插入图片描述
由此图可知,序列波动比较大,尤其是在15年到16年的过程中。
我们由公式计算可以得到收益率
在这里插入图片描述
由得到的数据作图:
在这里插入图片描述
由上图的形式来看,完全符合所说的,可以使用ARCH模型或者GARCH模型。但是为了严谨性,进行单位根检验:

Stata软件可以进行检验售一空v系列是否有单位根。

在这里插入图片描述
ADF检验的原假设:
数据是单位根序列,备择假设:数据是平衡序列
注意:平稳数据建模时用ARMA模型(或者ARIMA模型),单位根数据用ARIMA建模。
上图显示结果p的值为0,在99%的置信水平下拒绝原假设,所以序列平稳。
在这里插入图片描述
太多的滞后项会增加预测的误差,太少的滞后项优惠遗失部分相关信息。经验和理论知识通常是用来决定滞后项阶数的最好方式,然而,依然存在着一些准则帮助我们确定之后的阶数。为了确定那个模型拟合的效果最好,分别估计四种模型,并且计算出对应的AIC和BIC值,认为AIC和BIC的值较小,拟合效果较好。
在这里插入图片描述
容易知到,四个模型中应该选取Model1,此时AIC 和 BIC的平均值最小。

在这里插入图片描述
残差序列直方图
在这里插入图片描述
紧接着检查残差是否为白噪声
选择用Ljung-Box Q检验,来检验ARMA模型的有效性。
在这里插入图片描述
滞后12项的检验值的P值大于0.05,在5%的显著性水平下并不能拒绝原假设。故可以认为通过白噪声检验,即我们认为回归得到的残差不存在较明显的相关性,因此模型有效性较好。
在这里插入图片描述
GARCH模型估计的结果
在这里插入图片描述
预测结果
在这里插入图片描述

  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BEKK-GARCH模型是一种用于建模金融时间序列的方法,它可以同时考虑多个变量之间的波动溢出效应(volatility spillover effects)。在Python中,可以使用arch库中的BEKK-GARCH模型来实现。具体操作步骤如下: 1. 导入需要的库和数据。 ```python import pandas as pd from arch import arch_model data = pd.read_csv('data.csv', index_col=0) ``` 2. 定义BEKK-GARCH模型并拟合参数。 ```python model = arch_model(data, p=1, q=1, o=1, dist='Normal', vol='BEKK') results = model.fit(disp='off') ``` 其中,参数`p`和`q`分别是GARCH模型中的滞后阶数,`o`是BEKK模型中的滞后阶数,`dist`表示残差分布的类型,可以是正态分布、t分布等,`vol`表示使用的波动模型,可以是GARCH、EGARCH、IGARCH等。 3. 输出模型参数和拟合结果。 ```python print(results.summary()) ``` 这里使用`summary()`方法可以输出模型参数和拟合结果的详细信息。 4. 进行预测和波动率预测。 ```python forecast = results.forecast(horizon=10) print(forecast.mean.iloc[-1]) # 输出10期预测的均值 print(forecast.variance.iloc[-1]) # 输出10期预测的方差 ``` 这里使用`forecast()`方法可以进行多期预测,其中`horizon`参数表示预测的期数。`mean`和`variance`属性分别表示预测的均值和方差。 注意,在使用BEKK-GARCH模型时,需要保证数据的协方差矩阵是正定的,否则会出现计算错误。可以使用numpy库中的`np.all(np.linalg.eigvals(matrix) > 0)`函数来检查矩阵是否正定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值