(10条消息) 时间序列分析中的 statsmodels.tsa.arima_model被抛弃了,如何解决?_-berry的博客-CSDN博客

"""
根据某个期货的收盘价用ARMA-GARCH拟合三年日收益率,然后求出月条件波动率平均值,得到一个月波动率序列。
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.stattools import adfuller
# 该错误是由于在使用statsmodels库中已经弃用的ARIMA模型导致的。
# 解决方法是更新代码,将statsmodels.tsa.arima_model.ARMA 和statsmodels.tsa.arima_model.ARIMA
# 替换为 statsmodels.tsa.arima.model.ARIMA。##替换ARMA
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa import stattools
from arch import arch_model
from datetime import datetime
import warnings
warnings.filterwarnings("ignore")path = "玉米期货.xlsx"# 数据处理
df = pd.read_excel(path)
df = df.loc[:,["时间","收盘价"]]
df = df.dropna(how="any")
df["时间"] = pd.to_datetime(df['时间'], format='%Y-%m-%d', errors='coerce')
l = len(df)
# 计算日收益率
df_ = pd.DataFrame()
df_["close"] = df["收盘价"][1:]
df_["daily return"] = (df_["close"].values-df["收盘价"][0:l-1].values)*100/df["收盘价"][0:l-1].values
df_.index = list(df["时间"][1:])
# 绘制日收益率图
plt.figure(figsize=(10,8))
plt.plot(df_.index,df_["daily return"])
plt.xlabel("date")
plt.ylabel("daily return")
plt.show()# Arma
dr = df_["daily return"].values
# 平稳性检验
result = adfuller(dr)
print(result) # 拒绝原假设,所以是平稳的
# 白噪声检验
p_value = acorr_ljungbox(dr, lags=12,boxpierce=False,return_df =bool)
print(p_value) # 序列白噪声检验通过
# 自相关,偏相关
plot_acf(dr,use_vlines=True,lags=30) #自相关函数图,滞后30阶
plt.show()
plot_pacf(dr,use_vlines=True,lags=30) #偏自相关函数图
plt.show()
# 该错误是由于在使用statsmodels库中已经弃用的ARIMA模型导致的。解决方法是更新代码,将statsmodels.tsa.arima_model.ARMA 和statsmodels.tsa.arima_model.ARIMA替换为 statsmodels.tsa.arima.model.ARIMA。
# 这是一个程序运行错误的信息,表示在调用statsmodels模块中的arma_order_select_ic函数时,传入的参数trend不是预期的字符串,应该是'n'或'c'。请确保调用该函数时trend参数的值符合预期要求。
# 确定系数构建模型
train_results = sm.tsa.arma_order_select_ic(dr, ic=['aic', 'bic'], trend='c', max_ar=4, max_ma=4)
print('AIC', train_results.aic_min_order) #建立AIC值最小的模型
result = ARMA(dr,(1,1)).fit(disp=-1)
print(result.summary())# GARCH
# Arch效应检验
resid1=result.resid #提取残差
LjungBox=stattools.q_stat(stattools.acf(resid1**2)[1:13],len(resid1)) #残差平方序列的白噪声检验
print(LjungBox[1][1])
# GARCH模型构建
am=arch_model(resid1)
model2=am.fit(update_freq=0)
print(model2.summary())
# 滚动预测
rolling_predictions = []
test_size = 600
for i in range(test_size):train = df_['daily return'][:-(test_size - i)]model = arch_model(train, p=1, q=1)model_fit = model.fit(disp='off')pred = model_fit.forecast(horizon=1)rolling_predictions.append(np.sqrt(pred.variance.values[-1, :][0]))rolling_predictions = pd.Series(rolling_predictions, index=df_['daily return'].index[-600:])# 计算月条件波动率
df_pre = pd.DataFrame(rolling_predictions,columns=["Volatility"])
df_pre["month"] = df_pre.index.map(lambda x : str(x)[:7])
df_pre_month = df_pre.groupby("month").agg({"Volatility":"mean"})
df_pre_month = pd.DataFrame(df_pre_month,columns=["Volatility"])
df_pre_month.to_excel("../output/excel/%s"%path.split("/")[-1])# 可视化波动率
fig, ax = plt.subplots(figsize=(10, 4))
plt.plot(rolling_predictions)
plt.title('Rolling Prediction')
plt.show()
NotImplementedError:
statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arima_model.ARIMA have
been removed in favor of statsmodels.tsa.arima.model.ARIMA (note the .
between arima and model) and statsmodels.tsa.SARIMAX.
statsmodels.tsa.arima.model.ARIMA makes use of the statespace framework and
is both well tested and maintained. It also offers alternative specialized
parameter estimators.

修改代码:

 from statsmodels.tsa.arima.model import ARIMA

并替换

from statsmodels.tsa.arima_model import ARMA

同样的,将:

from statsmodels.tsa.arima_model import ARIMA

替换

from statsmodels.tsa.arima.model import ARIMA

train_results = sm.tsa.arma_order_select_ic(dr, ic=['aic', 'bic'], trend='c', max_ar=4, max_ma=4)

print('AIC', train_results.aic_min_order) #建立AIC值最小的模型

result = ARMA(dr,(1,1)).fit(disp=-1)

print(result.summary())

# GARCH

# Arch效应检验

resid1=result.resid #提取残差

LjungBox=stattools.q_stat(stattools.acf(resid1**2)[1:13],len(resid1)) #残差平方序列的白噪声检验

print(LjungBox[1][1])

# GARCH模型构建

am=arch_model(resid1)

model2=am.fit(update_freq=0)

print(model2.summary())

# 滚动预测

rolling_predictions = []

test_size = 600

for i in range(test_size):

train = df_['daily return'][:-(test_size - i)]

model = arch_model(train, p=1, q=1)

model_fit = model.fit(disp='off')

pred = model_fit.forecast(horizon=1)

rolling_predictions.append(np.sqrt(pred.variance.values[-1, :][0]))

rolling_predictions = pd.Series(rolling_predictions, index=df_['daily return'].index[-600:])

# ARMA model
train_results = sm.tsa.arma.ARMA(dr, order=(1, 1)).fit() #使用ARMA函数
print('AIC', train_results.aic) #打印AIC值
print(train_results.summary())
# GARCH
# Arch effect test
resid1 = train_results.resid #提取残差
LjungBox = acorr_ljungbox(resid1**2, lags=12) #使用acorr_ljungbox函数进行白噪声检验
print(LjungBox[1][-1])
# GARCH model building
model = arch_model(resid1, mean='AR', vol='GARCH', p=1, q=1) #使用arch_model函数
model_fit = model.fit() #使用fit函数进行模型拟合
print(model_fit.summary())
# Rolling forecast
rolling_predictions = []
test_size = 600
for i in range(test_size):train = df_['daily return'][:-(test_size - i)]model = arch_model(train, mean='AR', vol='GARCH', p=1, q=1)model_fit = model.fit()pred = model_fit.forecast(horizon=1).variance #使用variance属性rolling_predictions.append(np.sqrt(pred.values[-1, :][0]))
rolling_predictions = pd.Series(rolling_predictions, index=df_['daily return'].index[-600:])

修改后的代码

路径就是以下:

"""
根据某个期货的收盘价用ARMA-GARCH拟合三年日收益率,然后求出月条件波动率平均值,得到一个月波动率序列。
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.stattools import adfuller
# 该错误是由于在使用statsmodels库中已经弃用的ARIMA模型导致的。
# 解决方法是更新代码,将statsmodels.tsa.arima_model.ARMA 和statsmodels.tsa.arima_model.ARIMA
# 替换为 statsmodels.tsa.arima.model.ARIMA。from statsmodels.tsa.arima_model import ARMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa import stattools
from arch import arch_model
from datetime import datetime
import warnings
warnings.filterwarnings("ignore")path = "玉米期货.xlsx"# 数据处理
df = pd.read_excel(path)
df = df.loc[:,["时间","收盘价"]]
df = df.dropna(how="any")
df["时间"] = pd.to_datetime(df['时间'], format='%Y-%m-%d', errors='coerce')
l = len(df)
# 计算日收益率
df_ = pd.DataFrame()
df_["close"] = df["收盘价"][1:]
df_["daily return"] = (df_["close"].values-df["收盘价"][0:l-1].values)*100/df["收盘价"][0:l-1].values
df_.index = list(df["时间"][1:])
# 绘制日收益率图
plt.figure(figsize=(10,8))
plt.plot(df_.index,df_["daily return"])
plt.xlabel("date")
plt.ylabel("daily return")
plt.show()# Arma
dr = df_["daily return"].values
# 平稳性检验
result = adfuller(dr)
print(result) # 拒绝原假设,所以是平稳的
# 白噪声检验
p_value = acorr_ljungbox(dr, lags=12,boxpierce=False,return_df =bool)
print(p_value) # 序列白噪声检验通过
# 自相关,偏相关
plot_acf(dr,use_vlines=True,lags=30) #自相关函数图,滞后30阶
plt.show()
plot_pacf(dr,use_vlines=True,lags=30) #偏自相关函数图
plt.show()
# 该错误是由于在使用statsmodels库中已经弃用的ARIMA模型导致的。解决方法是更新代码,将statsmodels.tsa.arima_model.ARMA 和statsmodels.tsa.arima_model.ARIMA替换为 statsmodels.tsa.arima.model.ARIMA。
# 这是一个程序运行错误的信息,表示在调用statsmodels模块中的arma_order_select_ic函数时,传入的参数trend不是预期的字符串,应该是'n'或'c'。请确保调用该函数时trend参数的值符合预期要求。
# 确定系数构建模型
# train_results = sm.tsa.arma_order_select_ic(dr, ic=['aic', 'bic'], trend='c', max_ar=4, max_ma=4)
# print('AIC', train_results.aic_min_order) #建立AIC值最小的模型
# result = ARMA(dr,(1,1)).fit(disp=-1)
# print(result.summary())
#
# # GARCH
# # Arch效应检验
# resid1=result.resid #提取残差
# LjungBox=stattools.q_stat(stattools.acf(resid1**2)[1:13],len(resid1)) #残差平方序列的白噪声检验
# print(LjungBox[1][1])
# # GARCH模型构建
# am=arch_model(resid1)
# model2=am.fit(update_freq=0)
# print(model2.summary())
# # 滚动预测
# rolling_predictions = []
# test_size = 600
# for i in range(test_size):
#     train = df_['daily return'][:-(test_size - i)]
#     model = arch_model(train, p=1, q=1)
#     model_fit = model.fit(disp='off')
#     pred = model_fit.forecast(horizon=1)
#     rolling_predictions.append(np.sqrt(pred.variance.values[-1, :][0]))
#
# rolling_predictions = pd.Series(rolling_predictions, index=df_['daily return'].index[-600:])
#
# # 计算月条件波动率
# df_pre = pd.DataFrame(rolling_predictions,columns=["Volatility"])
# df_pre["month"] = df_pre.index.map(lambda x : str(x)[:7])
# df_pre_month = df_pre.groupby("month").agg({"Volatility":"mean"})
# df_pre_month = pd.DataFrame(df_pre_month,columns=["Volatility"])
# df_pre_month.to_excel("../output/excel/%s"%path.split("/")[-1])
#
# # 可视化波动率
# fig, ax = plt.subplots(figsize=(10, 4))
# plt.plot(rolling_predictions)
# plt.title('Rolling Prediction')
# plt.show()
# ARMA model# `order` argument must be an iterable with three elements.# train_results = sm.tsa.arima.ARIMA(dr, order=(1, 1)).fit() #使用ARMA函数train_results = sm.tsa.arima.ARIMA(dr, order=(1,1,1)).fit() #使用ARMA函数
print('AIC', train_results.aic) #打印AIC值
print(train_results.summary())
# GARCH
# Arch effect test
resid1 = train_results.resid #提取残差
# LjungBox = acorr_ljungbox(resid1**2, lags=12) #使用acorr_ljungbox函数进行白噪声检验#报错
# print(LjungBox[1][1])
# 你可以尝试在调用 acorr_ljungbox() 函数时传递 lags 参数,而不是用 LjungBox[1][-1]。具体如下:
print(acorr_ljungbox(resid1**2, lags=12)[1][-1])
# GARCH model building
model = arch_model(resid1, mean='AR', vol='GARCH', p=1, q=1) #使用arch_model函数
model_fit = model.fit() #使用fit函数进行模型拟合
print(model_fit.summary())
# Rolling forecast
rolling_predictions = []
test_size = 600
for i in range(test_size):train = df_['daily return'][:-(test_size - i)]model = arch_model(train, mean='AR', vol='GARCH', p=1, q=1)model_fit = model.fit()pred = model_fit.forecast(horizon=1).variance #使用variance属性rolling_predictions.append(np.sqrt(pred.values[-1, :][0]))
rolling_predictions = pd.Series(rolling_predictions, index=df_['daily return'].index[-600:])

时间序列分析中统计模型statsmodels.tsa.arima_model相关推荐

  1. 时间序列分析中的 statsmodels.tsa.arima_model被抛弃了,如何解决?

    from statsmodels.tsa.arima_model import ARIMA # Fit model model = ARIMA(y_train, order=( 1,1,1)) #自己 ...

  2. 时间序列分析中的自相关

    什么是自相关以及为什么它在时间序列分析中是有用的. 在时间序列分析中,我们经常通过对过去的理解来预测未来.为了使这个过程成功,我们必须彻底了解我们的时间序列,找到这个时间序列中包含的信息. 自相关就是 ...

  3. 如何深入理解时间序列分析中的平稳性?

    来自 :http://www.zhihu.com/question/21982358 在引入ARMA模型之前,一般课本都会对时间序列的平稳性作一个描述,但是总感觉没有描述特别清晰: 1. 通常时间序列 ...

  4. 时序预测构建ARIMA模型时报错:NotImplementedError: statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arima_

    在我时序预测构建ARIMA模型时出现报错: NotImplementedError: statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arim ...

  5. matlab 牛顿向后差分,Matlab在时间序列分析中的应用--笔记

    <Matlab在时间序列分析中的应用--笔记>由会员分享,可在线阅读,更多相关<Matlab在时间序列分析中的应用--笔记(12页珍藏版)>请在人人文库网上搜索. 1.MATL ...

  6. 时间序列分析中的ARMA,ARIMA,ARC…

    Source:http://www.morefund.com/a/duichongshidian/2011/0422/327.html 在时间序列分析中,AR,MA,ARMA,ARIMA,ARCH,G ...

  7. 时间序列分析中 5 个必须了解的术语和概念

    时间序列是按时间排序的一系列观察或测量. 在谈论时间序列时,首先想到通常是股票价格. 其实时间序列无处不在,一个地理位置的年降雨量.超市产品的日销售额.工厂的月耗电量.化学过程的每小时测量值都是时间序 ...

  8. 成功解决Not Implemented Error: statsmodels.tsa.arima_model. ARMA and statsmodels.tsa.arima_model. ARIMA

    成功解决Not Implemented Error: statsmodels.tsa.arima_model. ARMA and statsmodels.tsa.arima_model. ARIMA ...

  9. pta求阶乘序列前n项和_python在时间序列分析中的简介

    1 时间序列分析简介 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列. 时间序列分析的主要目的是根据已有的历史数据对未来进行预测.与面板数据不同,面板数据侧重于同一时间点不同样本 ...

最新文章

  1. Java 2实用教程(第五版)耿祥义 全部课后习题答案
  2. 解决phpQuery(DOMDocument)解析部分HTML会产生乱码的问题
  3. select BUGS
  4. static成员函数不能调用non-static成员函数
  5. php is_null、empty、isset的区别
  6. js实现textarea根据内容大小自适应高度
  7. Java多线程两种实现方式的对比
  8. 非线性常微分方程组 matlab,matlab常微分方程和常微分方程组求解.doc
  9. 如何给table表格的tr行加border边框(解决篇)
  10. 中国区块链相关政策法规演变史
  11. Nutanix超融合基础架构和桌面虚拟化解决方案助力新松机器人加速数字化转型
  12. AI 研究人员收入超过百万美元!
  13. Vxscan:一款实用综合扫描工具
  14. Linux ct获取本机ip,[原]archlinux 下最新的netct工具配置ip地址
  15. React目录结构详细解析
  16. 2021-07-02 swift大礼包
  17. 【BZOJ1106】【POI2007】立方体大作战tet(树状数组+贪心)
  18. 深入理解Redis跳跃表的基本实现和特性
  19. 运用卡方检验(独立性检验)来分析问卷的两个问题之间的关联性
  20. 渐进式加载-基础讲解

热门文章

  1. 论文阅读-SEFRON: A New Spiking Neuron Model With Time-Varying Synaptic Efficacy Function
  2. 为Python安装第三方模块
  3. 免费申请.tk国际顶级域名-攻略
  4. centos开启防火墙端口
  5. 单片机c语言too many actual parameter,出现 too many actual parameters 怎么回事??? 是不是程序有问题???...
  6. 在黑马的两个月培训的感受
  7. 什么是全栈,Full Stack Developer
  8. 程序员休闲好去处:深圳东湖公园和深圳仙湖植物园精美图片
  9. JSONObject简介 - 月月鸟0820 - 博客园
  10. clip gradients 算法介绍