GARCH时间序列分析

GARCH模型称为广义ARCH模型,是ARCH模型的拓展,加入了误差项条件方差的滞后期,将影响因子扩展为均方误差和条件方差前期值。这一模型的显著优点是能够在较低的阶数对高阶的滞后过程进行描述。解决了ARCH模型中滞后阶数过大的问题,从而避免参数过多而无法满足约束条件,使模型失效导致无法描述收益率的波动性。GARCH模型实际上就是在ARCH的基础上,增加考虑异方差函数的p阶自回归性而形成,它可以有效的拟合具有长期记忆性的异方差函数。
适用性:GARCH模型是一个专门针对金融数据所量体订做的回归模型,除去和普通回归模型相同的之处,GARCH对误差的方差进行了进一步的建模。特别适用于波动性的分析和预测,借助该模型好可以分析Shibor与ABS发行之间的相关性。


image.png

输入表:包括时间和利率两列


image.png

输出表:预测一定期间的利率


image.png

参数:输入开始预测的时间及需要预测的个数
完整代码如下:

from scipy import  stats
import sys
import statsmodels.api as sm  # 统计相关的库
import numpy as np
import pandas as pd
import arch  # 条件异方差模型相关的库
from statsmodels.tsa.arima_model import ARIMA
from openpyxl import Workbook
from openpyxl.compat import range
# import os

# InputPath = sys.argv[1]  # InputFilePath
# OutputPath = sys.argv[2] # OutputFilePath
# Parameters=sys.argv[3]  # json format string, optional 外部用户输入预测个数
# Parameters = json.loads(Parameters)

#read input
k = 10 # 外部引入预测值个数K
data = pd.read_excel("GARCH_input.xlsx", index_col = u'Date')

#自动定阶构建AR模型,并预测
pmax = 7#定阶
bic = [] #bic矩阵
# print(bic)
for p in range(pmax+1):
    tmp = (ARIMA(data,(p,0,0)).fit().bic)
    bic.append((p,tmp))
newBicList = sorted(bic,key=lambda item:item[1])
p = newBicList[0][0]

order = (p,0)
model = sm.tsa.ARMA(data,order).fit()
model.forecast(k)
forecast1 = np.array(model.forecast(k)[0])

#GARCH拟合
am = arch.arch_model(data,mean='AR',lags=p,vol='GARCH',p=1,q=1)
res = am.fit()

#GARCH滚动预测
start_loc = 0
end_loc = len(data)-k-1
forecasts = {}
for i in range(k):
    res = am.fit(last_obs=i+end_loc, disp='off')
    temp = res.forecast(horizon=3).variance
    fcast = temp.iloc[i+end_loc-1]
    forecasts[fcast.name] = fcast

forecast2 = np.array(np.array(pd.DataFrame(forecasts).T['h.1']).tolist()[1])
forecast = forecast1 + forecast2  #AR-GARCH的最终预测结果是 AR预测结果 + GARCH残差预测结果
print(forecast)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容