使用Python构造VARIMA模型

简介

VARMA(p,q)结合了VAR和VMA模型,其中p是向量自回归(VAR)模型的滞后期数,q是VMA模型的移动平均的阶数。

VARMA是ARMA的推广,它将ARMA模型扩展到多个时间序列变量的情况,通过VAR和VMA的线性组合来描述多个时间序列变量之间的联合变化,适合描述多个时间序列变量之间的关系。 时间序列变量。

通过将 q 参数设置为 0,VARMA 模型可以像 VAR 模型一样工作;通过将 p 参数设置为 0,它也可以像 VMA 模型一样工作。VARMA 也不能处理非平稳金融时间序列数据。 矢量自回归积分移动平均(VARIMA)是一种经历差分过程的VARMA模型。

首先,应用约翰森检验(Johansen test ),结果表明英国的GDP、失业率和CPIH之间存在长期均衡关系。
因此,它们可以作为协变量来预测GDP。 正如ARIMA模型分析中提到的,GDP时间序列是不稳定的,因此必须在时间序列中实施一阶差分。 然后,还应用归一化过程。使用 MinMaxScaler() 函数后,数据将缩放到特定范围。 然后,将归一化后的数据按比例划分为训练集和测试集。
通过使用VARMAX功能,它将能够自动与AIC标准进行比较并找到最佳模型。 最优模型将具有最小的 AIC 值。 此外,预测的GDP值需要进行非标准化处理,以便与原始数据进行比较。

代码构建

首先导入需要用到的Python包:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.statespace.varmax import VARMAX
from sklearn.preprocessing import MinMaxScaler
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from sklearn.metrics import mean_squared_error, mean_absolute_percentage_error

然后读取.csv文件的时序数据,这里使用了英国的GDP数据,CPI(通货膨胀率)和Unemployment rate(失业率)作为covariate(协变量)。

# 1. 读取csv时序数据
gdp_data = pd.read_csv('datasets/UK_GDP.csv')[["GDP"]]
inflation_data = pd.read_csv('datasets/UK_inflation.csv')[["Inflation"]]
unemployment_data = pd.read_csv('datasets/UK_unemployment.csv')[["Unemployment"]]
data_origin = gdp_data.copy()

接着对所有数据进行一阶差分,使其稳定(因为之前的博客已经对同数据进行过检测,并确定数据不稳定,所以要进行差分)。

gdp_data = gdp_data.diff().dropna()
inflation_data = inflation_data.diff().dropna()
unemployment_data = unemployment_data.diff().dropna()

然后对处理过的数据进行归一化。

scaler1 = MinMaxScaler()
scaled_gdp_data = pd.DataFrame(scaler1.fit_transform(gdp_data), columns=gdp_data.columns, index=gdp_data.index)
scaler2 = MinMaxScaler()
scaled_inflation_data = pd.DataFrame(scaler2.fit_transform(inflation_data), columns=inflation_data.columns, index=inflation_data.index)
scaler3 = MinMaxScaler()
scaled_unemployment_data = pd.DataFrame(scaler3.fit_transform(unemployment_data), columns=unemployment_data.columns, index=unemployment_data.index)

然后自动定阶,通过AIC找出最合适的参数。

merged_data = pd.concat([scaled_gdp_data, scaled_inflation_data, scaled_unemployment_data], axis=1)
train_size = int(len(merged_data))-3
train_data, test_data = merged_data[:train_size], merged_data[train_size:]best_aic = np.inf
best_order = None
best_model = None
pq_range = range(2) # 取值范围
for p in pq_range:for q in pq_range:try:model = VARMAX(train_data, order=(p, q))result = model.fit()aic = result.aicif aic < best_aic:best_aic = aicbest_order = (p, q)best_model = resultexcept:continueprint("Best order:", best_order)
print("Best AIC:", best_aic)

使用VARIMA模型进行预测,打印预测值和真实值的对比图,并计算模型RMSE和MAPE指标。

gdp_predictions = best_model.forecast(steps=len(test_data))[['GDP']]
gdp_predictions = pd.DataFrame(gdp_predictions, columns=['GDP'], index=test_data.index-1)
gdp_predictions = scaler1.inverse_transform(gdp_predictions)
actual = scaler1.inverse_transform(test_data[['GDP']])actual = np.array(gdp_data[-3:].cumsum() + data_origin.values[127])
predictions = gdp_predictions.cumsum() + data_origin.values[127]plt.figure()
plt.plot(actual, label='Actual')
plt.plot(predictions, label='Predicted')
plt.legend()
plt.show()rmse = np.sqrt(mean_squared_error(actual, predictions))
mape = mean_absolute_percentage_error(actual, predictions)
print(f"RMSE: {rmse}")
print(f"MAPE: {mape}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

踩雷react-useRef钩子函数

今天测试提了一个bug&#xff0c;之前做的有个需求&#xff0c;在触发事件发起请求后&#xff0c;成功响应返回的新的数据没有第一时间渲染到网页上。 方法也都成功更新了数据&#xff0c;就是渲染会慢1-2分钟&#xff0c;排错排了老半天&#xff0c;最后找到了原因。 一般情…

系统架构设计:18 论基于DSSA的软件架构设计与应用

目录 一 特定领域软件架构DSSA 1 DSSA 2 DSSA的基本活动和产物 (1)DSSA的基本活动和产物

node.js知识系列(4)-每天了解一点

目录 11. 异步文件操作文件读取文件写入 12. 包管理器&#xff08;npm&#xff09;13. 子进程14. 事件发射器&#xff08;EventEmitter&#xff09;15. 异步编程和回调16. Node.js 集成测试工具和框架17. Express.js 中间件的 HTTP 请求流程18. 文件上传和验证19. Express.js 中…

SpringBoot和Hibernate——如何提高数据库性能

摘要&#xff1a;本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在软件开发领域&#xff0c;性能是重中之重。无论您是构建小型 Web 应用程序还是大型企业系统…

单目标应用:遗传算法(Genetic Algorithm,GA)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索…

【Java 进阶篇】JavaScript 数据类型详解

JavaScript是一种弱类型脚本语言&#xff0c;具有动态类型。这意味着JavaScript中的变量可以容纳不同类型的数据&#xff0c;并且它们的类型可以在运行时更改。在本文中&#xff0c;我们将深入探讨JavaScript中的数据类型&#xff0c;包括原始数据类型和引用数据类型&#xff0…

安科瑞ARB5系列弧光保护装置,智能电弧光保护,保障用电安全

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 什么是弧光 电弧是放电过程中发生的一种现象&#xff0c;当两点之间的电压超过其工频绝缘强度极限时就会发生。当适当的条件出现时&#xff0c;一个携带着电流的等离子产生&#xff0c;直到电源侧的保护设备断开才会消失。空气在通常条件…

【ARM CoreLink 系列 6 -- DMC-400控制器简介】

文章目录 1.1 DMC-400 简介1.1.1 DFI&#xff08;DDR PHY Interface&#xff09;1.1.2 DFI 接口组1.1.3 DMC-400 兼容协议1.1.4 DMC-400 特性1.1.5 DMC-400 Interface 1.1 DMC-400 简介 DMC-400是一个由ARM开发、测试和授权的动态内存控制器&#xff0c;同时 DMC-400也是一个符…

git 回滚到指定版本

第一步&#xff1a;找到指定的需要回滚的版本的版本号 项目终端输入命令git log --oneline 第二步&#xff1a;使用git命令回滚到指定的版本 git reset --hard 版本号 第三步&#xff1a;此时再推到远程仓库用git push 会报错&#xff0c;需要用git push -f强推上去才可以哦

Swagger-go学习笔记

目录 Swagger的作用背景Swagger介绍 Swagger的基本使用1. 使用步骤2. 添加注释3. 生成接口文档数据4. 引入gin-swagger5. 测试结果6. 使用Token Swagger-go的中文文档通用API信息API操作MIME类型参数类型数据类型 Swagger的作用 背景 在传统的前后端分离的项目中&#xff0c;…

vue3组件的通信方式

一、vue3组件通信方式 通信仓库地址:vue3_communication: 当前仓库为贾成豪老师使用组件通信案例 不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 比如:vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可…

C语言自定义类型_枚举联合(3)

目录 枚举 什么是枚举类型&#xff1f; 枚举的声明 枚举的定义 枚举的优点 枚举的使用 联合&#xff08;共用体&#xff09; 什么是联合呢&#xff1f; 联合类型的定义 联合的特点 联合使用 联合大小的计算 联合的应用 今天接着我们来结束自定义类型。&#x1f19…

Flink之Watermark源码解析

1. WaterMark源码分析 在Flink官网中介绍watermark和数据是异步处理的,通过分析源码得知这个说法不够准确或者说不够详细,这个异步处理要分为两种情况: watermark源头watermark下游 这两种情况的处理方式并不相同,在watermark的源头确实是异步处理的,但是在下游只是做的判断,这…

TensorFlow学习:在web前端如何使用Keras 模型

前言 在上篇文章 TensorFlow学习&#xff1a;使用官方模型进行图像分类、使用自己的数据对模型进行微调中我们学习了如何使用官方模型&#xff0c;以及使用自己的数据微调模型。 但是吧&#xff0c;代码一直是跑在Python里&#xff0c;而我本身是做前端开发的。我是很想让它在…

es elasticsearch 基础

es https://www.elastic.co/guide/en/elasticsearch/reference/6.8/getting-started.html 倒排索引&#xff1a; 正排–>从目录到文章内容 倒排–>内容到目录文章标题 if we dont need full text search ,we dont need to create 倒排 using text type 分词&#xff1a…

C语言-贪吃蛇 1.输入控制ncurse

一、为什么要用nurse C语言中的gets()、scanf()、getchar()等函数是在用户输入后需要按下Enter键才能执行代码&#xff0c;而贪吃蛇要求按下按键后立即对蛇的方向进行操作&#xff0c;所以根据贪吃蛇功能的需求引入ncurse&#xff0c;让用户输入后就能让蛇进行对应的行动。 二、…

10.本项目的简单介绍及所用工具

本项目的简单介绍及所用工具 本项目的层次架构适合初学者或者有一些基础的同学&#xff0c;项目整体简单明了&#xff0c;有着非常严谨的逻辑思维&#xff0c;并且在前面文章中也讲了一些项目中所需要的软件安装配置以及一些前置的在本项目中所需要的java基础知识。 项目名称 …

服务器与网站部署知识体系目录

1.网站部署必备知识与实践操作 服务器全套基础知识&#xff1a;包含基本概念&#xff0c;作用&#xff0c;服务器选择&#xff0c;服务器管理等域名相关基础知识普及域名备案流程&#xff08;个人备案&#xff0c;腾讯云 / 阿里云&#xff09;将网站域名访问从http升级到https…

8路高速光栅尺磁栅尺编码器4倍频计数转Modbus TCP网络模块 YL99-RJ45

特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 高速光栅尺磁栅尺4倍频计数&#xff0c;频率可达5MHz ● 模块可以输出5V的电源给光栅尺或传感器供电 ● 支持8个光栅尺同时计数&#xff0c;可识别正反转 ● 可以设置作为16路独立DI高速计数器 ● 可网…

小程序js(正则表达式):文本框对手机号进行标准化规范

一、使用 <input> 组件的 type 属性设置为 "number"&#xff0c;并结合正则表达式进行校验。 <input type"number" bindinput"checkPhoneNumber" /> Page({checkPhoneNumber: function (e) {const phoneNumber e.detail.value;//…