【MATLAB第60期】【更新中】基于MATLAB的ARMAX具有外生回归因子的移动平均自回归模型

news2024/9/23 11:16:49

【MATLAB第60期】【更新中】基于MATLAB的ARMAX具有外生回归因子的移动平均自回归模型


版本更新:

2023/7/29版本:
1.增加自定义参数,方便直接套数据运行。

pre_num=3;%预采样数据个数
learn_pr=0.85;  %训练数据比例(不包括预采样数据)
mm=pre_num;%输入响应数据个数    
nn=pre_num;%输出响应数据个数   

2.增加ARIMAX模型参数自动选择功能
(1)可手动选择ADF或者KPSS平稳性检验方式
存在不足:目前无法解决D>0的问题,所以优先选择D=0的检验方法,本文选用KPSS检验
[p, d, q ] = fit_model( Y,learn_num, test_num );
(2)检验p、d、q是否满足后续正常运行条件

if pre_num>=p+d
    disp('--------------------------------------------');
     fprintf('ARIMAX(%d, %d, %d)满足运行要求', p, d, q);
else
    disp('--------------------------------------------');
     fprintf('ARIMAX(%d, %d, %d)不满足运行要求,', p, d, q);
     disp('请增大pre_num预采样数值');
end

3.增加参数评估结果(命令行窗口展示)

最优模型参数为:ARIMAX (2, 0, 0)
ARIMAX(2,0,0) Model (Gaussian Distribution)
 
    Effective Sample Size: 53
    Number of Estimated Parameters: 7
    LogLikelihood: -164.451
    AIC: 342.901
    BIC: 356.693
 
                Value     StandardError    TStatistic    PValue
                ______    _____________    __________    ______

    Constant    -25.21        10.11          -2.49        0.01 
    AR{1}         0.30         0.08           3.63        0.00 
    AR{2}        -0.06         0.06          -1.01        0.31 
    Beta(1)       3.24         0.32          10.27        0.00 
    Beta(2)       0.00         0.00           3.21        0.00 
    Beta(3)       1.92         0.58           3.31        0.00 
    Variance     29.01         7.63           3.81        0.00 

4.增加置信区间绘图及评价(默认95%,可自行调整)
在这里插入图片描述

picp2 = PICP (ci, Y(end-test_num+1:end));
pimw2 = PIMWP(ci, Y(end-test_num+1:end));
disp(['测试集的区间覆盖率为:', num2str(picp2), '。区间平均宽度百分比为:', num2str(pimw2)])
测试集的区间覆盖率为:1。区间平均宽度百分比为:3.212

版本不足:

1.未解决D>0的问题,即只能处理通过检验方法判定的平稳的时间序列数据。
2.p、q筛选区间最大值目前只能为2,且缺少d结果的选择(d通过平稳性检验提前确定)。



一、简要介绍

  1. ARMAX模型相比ARMA考虑了影响因素 ,即可以实现基于时间序列数据的回归预测。
  2. 目前,ARMAX预测未来功能存在困难,本篇文章不予介绍。大致思路需要通过时间滞后构造数据,使前时间段的X预测后时间段的Y,即多步预测。
  3. 此示例展示如何将时间序列中的时间划分为预采样期T0、训练期Ty和预测期Tf,并显示了如何提供适当数量的观测值来初始化用于估计和预测的动态模型。
  4. 通过定义ARMA模型中的参数,可实现ARIMAX和SARIMAX模型。本文介绍最基础的ARMAX模型。
    在这里插入图片描述

二、导入数据

  1. 本篇文章案例数据采用3输入1输出,62个样本(1962-2023年)。
  2. 本文用table格式打开,方便对时间进行处理。
clear all
data=readtable('数据集.xlsx');
DataTable = table2timetable(data);%将DataTable转换为时间表。
varnames = ["Y" "X1" "X2" "X3" ];
Tbl = rmmissing(DataTable(:,varnames));%通过应用列表删除从数据中删除所有前导NaN。
T = size(Tbl,1) %总样本量
Y = Tbl.Y; %因变量
X = Tbl{:,varnames(2:end)};%变量

在这里插入图片描述

三、建立模型

为了训练和预测模型,估计必须有足够的预采样数据来初始化自回归项,同样,要从训练模型中预测,预测必须有足够的预采样样本。
此外,预测期中的回归分量需要预测历史数据或未来的预测数据Y,那么需要有与之对应的X,不然无法预测未来。

  1. 本文考虑一个ARMAX(1,2)模型,该模型以X1、X2、X3为外生变量,预测Y。
  2. 将样本的时间线划分为预采样、训练和预测时段。将模型拟合到训练样本,并使用预采样数据来初始化自回归项。然后,根据训练模型对Y进行预测。
  3. 指定预采样数据,以初始化自回归项。一般预采样数据个数为Mdl.P,因为p在之前就设置好了,所以手动设置为1。 -
  4. 指定训练数据,选择2-56作为训练数据。输入数据XEst则为X2-X56,输出为Y2-Y56
  5. 指定预测数据,57-62共6个数据进行测试。输入数据则为X57-X62,输出为Y57-Y62
idxpresample = 1;%预采样数据y0es个数,1
idxestimate = 2:56;%训练数据yest 个数,55
idxforecast = 57:T;%预测数据个数 ,6
  1. 建立ARMAX(1,2)模型
Mdl = arima(1,0,2); % P D Q
%ARIMAX(1,0,2) Model (Gaussian Distribution)
Effective Sample Size: 55
Number of Estimated Parameters: 8
LogLikelihood: -162.152
AIC: 340.303
BIC: 356.362

            Value     StandardError    TStatistic    PValue
            ______    _____________    __________    ______

Constant    -28.86        12.92          -2.23        0.03 
AR{1}         0.20         0.05           4.02        0.00 
MA{1}         0.65         0.16           4.19        0.00 
MA{2}         0.05         0.18           0.31        0.76 
Beta(1)       3.42         0.28          12.37        0.00 
Beta(2)       0.00         0.00           3.19        0.00 
Beta(3)       1.96         0.76           2.57        0.01 
Variance     21.30         5.16           4.13        0.00 
  1. 在训练样本结束时指定必要的观测值作为样本前数据进行预测,需指定训练期的数据,且数据个数至少为1,本文取两个,即训练输入的最后2个值X55-X56和训练输出的最后2个值Y55-Y56。
  2. 预测数据,假设预测的数量为M,则M必须小于等于XF的个数,不然无法运行。本文指定M=6,预测期的输入变量XF为X57-X62。
 [yf,ymse] = forecast(Mdl,M);
  1. 置信区间预测
ci = yf + 1.96*[-sqrt(ymse) sqrt(ymse)];
  1. 绘图。因年份较多,故只展示后面一半的数据。
yrs = year(Tbl.Time(round(T/2):end));%绘制后半部分的响应数据和预测。

figure;
plot(yrs,Tbl.Y(round(T/2):end),"b","LineWidth",2);
hold on
plot(yrs(end-size(idxforecast,2)+1:end),yf,"r--","LineWidth",2);
h = gca;
px = yrs([end - size(idxforecast,2)+1 end end end - size(idxforecast,2)+1]);
py = h.YLim([1 1 2 2]);
hp = patch(px,py,[0.9 0.9 0.9]);
uistack(hp,"bottom");
axis tight
title("ARMAX模型");
legend(["预测区段" "实际值" "预测值"])

四、效果展示

在这里插入图片描述

五、代码获取

后台私信回复“60期”即可获取下载方式。

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

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

相关文章

通讯录--集合动态的文件版

简易的通讯录往往需要朴实的“烹饪”就能完成一道“美味的佳肴”。 我们需要一个通讯录,能够存储联系人的信息,能够对联系人的信息进行增删查改,查询,按姓名排序。相比对之前的三子棋、扫雷,有了一定的了解&#xff0c…

一起学数据结构(2)——线性表及线性表顺序实现

目录 1. 什么是数据结构: 1.1 数据结构的研究内容: 1.2 数据结构的基本概念: 1.2.1 逻辑结构: 1.2.2 存储结构: 2. 线性表: 2.1 线性表的基本定义: 2.2 线性表的运用: 3 .线性…

【学会动态规划】打家劫舍 II(12)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

JavaScript学习 -- SM3算法基本原理

SM3算法是一种由国家密码管理局发布的哈希算法,被广泛用于数字签名和消息认证等应用中。在JavaScript中,我们可以使用第三方库来计算数据的SM3哈希值。本篇文章将介绍SM3算法的基本原理和相关技术,并提供一些实例来演示如何在JavaScript中使用…

深度剖析六大国产CPU

前言 CPU 是底层硬件基础设施中的核心,当前主流芯片架构为 ARM 和 X86,均为国外主导,芯片国产化率较低。“十五”期间,国家启动发展国产 CPU 的泰山计划,863 计划也提出自主研发 CPU。2006 年核高基专项启动&#xff…

阿里云服务器CPU处理器大全

阿里云服务器CPU型号是什么?处理器主频多少?云服务器ECS和轻量应用服务器CPU处理器性能如何?阿里云服务器网分享阿里云服务器CPU型号大全、处理器主频性能型号汇总: 目录 阿里云服务器CPU处理器大全 通用型云服务器CPU 计算型…

Redis系列:Redis 的事务机制

1 复习下何为事务机制? Transaction(事务)是计算机的特有术语,它一般指单个逻辑工作单位,由一系列的操作组合而成,在这些操作执行的时候,要么都执行成功,要么都不执行,防…

ENSP中路由器配置详解

目录 一:两个主机,两个路由器配置连接 二:两主机,三路由器配置连接 三:配置浮动路由 一:两个主机,两个路由器配置连接 打开ENSP 1.点击新建拓扑 2.点击路由器 3.将两个AR3260路由器拖出来…

ShardingSphere-Proxy读写分离详解与实战

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

基于springboot的公交线路查询系统vue

本次开发一套公交线路查询系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,公交线路管理,网站公告管理,友情链接管理,留言管理,系统管理。用户可以注册登录,查看公告线路…

java使用easyexcel读写文件

文章目录 前言一、引入pom二、write1.代码部分2.执行结果 三、read1.代码部分2.运行结果 总结 前言 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题…

掌握文件锁:使用flock实现多个进程之间的无缝文件同步

使用flock实现多个进程之间的无缝文件同步? 博主简介一、引言二、文件锁的概述2.1、定义文件锁2.2、文件锁的种类2.3、文件锁的作用 三、使用flock实现文件锁3.1、flock的简介3.2、flock的使用方法3.3、flock文件锁命令3.4、flock对文件同步的帮助 四、实现多个进程…

Sestra 实用教程(二)方程求解器

目 录 一、前言二、超单元分析三、惯性释放四、模态叠加法4.1 Eigenvalue solvers4.2 Static back substitution 五、模态综合法六、Master-Slave七、参考文献 一、前言 SESAM (Super Element Structure Analysis Module)是由挪威船级社(DNV-…

QMediaPlayer播放视频

简介 使用QT的QMediaPlayer类播放MP4格式的视频。 代码示例 头文件 Ui::MainWindow *ui; QMediaPlaylist *playlist; QMediaPlayer *player; QVideoWidget *videoWidget;方式一 应用窗体外播放视频。 .cpp文件 playlist new QMediaPlaylist;playlist->addMedia(QUrl(…

ShardingSphere-Proxy垂直分片详解与实战

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

python:图片修改尺寸和裁剪

作者:CSDN @ _养乐多_ 本文记录了使用python语言的PIL库对jpg格式的图像进行修改尺寸,按指定像素间隔裁剪的代码。 文章目录 一、修改图片尺寸二、按照指定像素裁剪图片2.1 将小块保存在本地2.2 将小块以一定间隔生成新的图片原图: 一、修改图片尺寸 修改尺寸后, from PI…

c++学习(布隆过滤器)[23]

布隆 布隆过滤器(Bloom Filter)是一种概率型数据结构,用于判断一个元素是否可能存在于一个集合中。它使用多个哈希函数和位图来表示集合中的元素。 布隆过滤器的基本原理如下: 初始化:创建一个长度为m的位图&#xf…

ARM 详解

一、ARM 的发展史 ARM 的发展历史可以追溯到 1978 年,当年克里斯库里(Chris Currry)所任职的公司遭遇财务危机,发展每况愈下,库里在和创始人深入沟通后,决定离职。当时的库里对微型计算机很感兴趣&#xf…

大致了解Redis

为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题:一个是写 AOF 和RDB 会造成 Redis 性能抖动,另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢…

什么是EPC?

文章目录 一、什么是EPC?二、EPC的优势和特征2.1、EPC的优势2.2、EPC的特征 三、EPC项目管理平台3.1、平台简介3.2、平台优势3.3、平台功能模块 一、什么是EPC? EPC(Engineering Procurement Construction)是指公司受业主委托&am…