时间序列分析中统计模型statsmodels.tsa.arima_model

2023-10-30

(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:])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

时间序列分析中统计模型statsmodels.tsa.arima_model 的相关文章

随机推荐

  • 人工智能知识全面讲解:机器学习的过程

    1 3 1 机器学习的三个阶段 学习了机器学习的概念后 我们知道机器学习实际上就是计算机通过算法 处理数据并且学得模型的过程 模型 这个词经常被我们挂在嘴边 但大部 分人仍然不清楚模型是怎么做出来的 模型在计算机里是怎么表示的 对模型 很难
  • linux中的无人职守安装脚本kickstart

    一 kickstart自动安装脚本的作用 在企业中安装多台操作系统时面临的问题 当安装Linux操作系统时 安装过程会需要回答很多关于设定的问题 这些问题必须手动选择 否则无法进行安装 当只安装1台Linux系统 手动选择设定工作量比较轻松
  • 使用Go语言实现百度网盘样的云存储系统

    目录 1 项目概述 2 开始项目 3 用户服务 4 文件服务 5 结语 欢迎来到这篇关于使用Go语言实现云存储系统的博客 在这篇博客中 我们将讨论如何使用Go语言和一些常见的开源库 实现一个简单的云存储系统 这个系统将包含用户注册 登录 上
  • m1 mac 使用 obs + BlackHole 内录电脑音频

    直接 obs 是内录不了的 由于 macOS 的限制 无法获取桌面音频 于是使用 BlackHole Github 工具 该方案的原理是将电脑音频同时输出到你的设备 耳机 扬声器等 BlackHole 然后让 OBS 获取 BlackHol
  • Lambda表达式【C++语法】

    C L a m b d a
  • 测试驱动开发(TDD)实践与技巧

    文章目录 引言 Google Mock 测试用例结构 断言 经典式断言 Hamcrest 断言 测试驱动开发 第一个示例 开场白 开始吧 去掉不干净的代码 增量性 fixture 设置 思索与测试驱动开发 测试驱动与测试 测试驱动开发基础与
  • Android app多渠道打包的流程与源代码示例

    Android app多渠道打包的流程与源代码示例 多渠道打包是指通过一次构建过程生成适用于不同应用商店 市场或渠道的多个APK文件 这样可以方便开发者将应用同时发布到多个平台上 提高应用的覆盖率和下载量 本文将介绍实现多渠道打包的步骤 并
  • 静态路由实验(思科Cisco)

    思科静态配置命令 静态路由的配置命令如下 router config ip route 目的网络 网络掩码 下一跳地址 出接口 默认路由的配置命令如下 router config ip route 0 0 0 0 0 0 0 0 下一跳地址
  • kali linux之手动漏洞挖掘三(sql注入)

    服务器端程序将用户输入作为参数作为查询条件 直接拼写sql语句 并将结果返回给客户端浏览器 如判断登录 select from users where user uname and password pass select from use
  • 看完这篇 教你玩转渗透测试靶机vulnhub——DC7

    Vulnhub靶机DC7渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 SSH登入 漏洞发现与利用 提权 获取flag Vulnhub靶机渗透总结 Vulnhub靶
  • 使用C#编写程序屏蔽键盘输入

    使用C 编写程序屏蔽键盘输入 在C 中 我们可以使用System Windows Forms命名空间下的Keyboard类来实现屏蔽键盘输入的功能 下面是一段示例代码 演示了如何屏蔽键盘输入 using System using Syste
  • Java自学视频整理

    1 Java基础视频 张孝祥JAVA视频教程 完整版 RMVB 东西网 历经5年锤炼 史上最适合初学者入门的Java基础视频 传智播客 张孝祥2010年贺岁视频 Java高新技术 传智播客 Java多线程与并发库高级应用 传智播客 尚学堂J
  • 区块链自定义节点

    本地自定义节点 1 cmd中 安装好geth后 cmd geth help 检查是否geth是否安装好 然后输入命令geth datadir testNet dev rpc console 自定义本地的节点 2 metaMask 再在met
  • SOCKET套接字

    操作系统提供 用于开发网络应用的一系列API函数接口 可以称为套接字函数 所有的系统平台都有对SOCKET套接字的兼容和实现 虽然网络环境中有大量的协议类型 但是绝大多数协议都是采用TCP和UDP 也就是说很多软件或网站的访问与链接一样使用
  • Java+SSM+Vue 毕业设计 汽车租赁系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最新完成的毕业设计项
  • Linux内核的Oops

    简介 什么是Oops 从语言学的角度说 Oops应该是一个拟声词 当出了点小事故 或者做了比较尴尬的事之后 你可以说 Oops 翻译成中国话就叫做 哎呦 哎呦 对不起 对不起 我真不是故意打碎您的杯子的 看 Oops就是这个意思 在Linu
  • kubernetes介绍和安装(1.25版本)

    kubernetes介绍和安装 1 25版本 K8S 是什么 K8S官网文档 https kubernetes io zh docs home K8S 是Kubernetes的全称 源于希腊语 意为 舵手 或 飞行员 基于go语言开发 官方
  • 二、读取编码器数值实现电机测速—2 、配置编码器;

    读取编码器数值实现电机测速 电机系列 二 读取编码器数值实现电机测速 2 配置编码器 encoder h encoder c main c 3 测速 电机系列 二 读取编码器数值实现电机测速 2 配置编码器 encoder h ifndef
  • Apollo SpringBoot 客户端使用

    1 简介 Apollo 阿波罗 是携程框架部门研发的分布式配置中心 能够集中化管理应用不同环境 不同集群的配置 配置修改后能够实时推送到应用端 并且具备规范的权限 流程治理等特性 适用于微服务配置管理场景 服务端基于Spring Boot和
  • 时间序列分析中统计模型statsmodels.tsa.arima_model

    10条消息 时间序列分析中的 statsmodels tsa arima model被抛弃了 如何解决 berry的博客 CSDN博客 根据某个期货的收盘价用ARMA GARCH拟合三年日收益率 然后求出月条件波动率平均值 得到一个月波动率