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

2023-11-04

【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期”即可获取下载方式。

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

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

  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • Matlab没有优化以下内容吗?

    我有一个很长的向量 1xrv 和一个很长的向量w1xs 和一个矩阵Arxs 它是稀疏的 但维度非常大 我期望 Matlab 对以下内容进行优化 这样我就不会遇到内存问题 A v w 但看起来 Matlab 实际上是在尝试生成完整的v w矩阵
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • 如何在MATLAB中显示由三个矩阵表示的图像?

    我有 3 个相同大小的 2D 矩阵 假设 200 行和 300 列 每个矩阵代表三种 基本 颜色 红色 绿色和蓝色 之一的值 矩阵的值可以在 0 到 255 之间 现在我想组合这些矩阵以将它们显示为彩色图像 200 x 300 像素 我怎样
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • MATLAB:在不使用循环的情况下提取矩阵的多个部分

    我有一个巨大的 2D 矩阵 我想从中提取 15 个不同的 100x100 部分 我有两个向量 x 和 y 其中保存了零件的左上角索引 我用过这样的东西 result cam1 x 1 end x 1 end 99 y 1 end y 1 e

随机推荐

  • docker进入容器出现bash-4.2#解决办法

    docker进入容器显示bash 4 2 如下 root VM 4 15 centos shopmall docker exec it u root 1f654abf60ac bash bash 4 2 出现上述问题是因为在 root 目录
  • go语言标准库

    在Go语言的安装文件里包含了一些可以直接使用的包 即标准库 Go语言的标准库 通常被称为语言自带的电池 提供了清晰的构建模块和公共接口 包含 I O 操作 文本处理 图像 密码学 网络和分布式应用程序等 并支持许多标准化的文件格式和编解码协
  • Linux 系统常用命令

    Linux 系统常用命令格式 command option argument1 argument2 其中option以 开始 多个option可用一个 连起来 如 ls l a 与 ls la 的效果是一样的 根据命令的不同 参数分为可选的
  • Centos设置屏幕不休眠

    前言 前段时间因工作需要 安装了一个centos7虚拟机体验了一把linux编程 感觉有些情况下比在windows中开发方便许多 囧 期间遇到一小问题 就是虚拟机每隔几分钟不操作 则会自动进入屏幕保护 需要重新输入密码才能进入 为此查了一下
  • 删除卷与分页文件(虚拟内存文件)

    无法删除卷可能是由于这个磁盘中存在分页文件 虚拟内存文件 引起的
  • Tomcat优化大全,进来看了,真就会了

    前言 Tomcat 服务器是一个开源的轻量级Web应用服务器 在中小型系统和并发量小的场合下被普遍使用 是开发和调试Servlet JSP 程序的首选 相信大家对于 Tomcat 已经是非常熟悉了 本篇将介绍tomcat的常见优化 那么为什
  • 网络设备网卡、中继器、集线器、网桥、交换机、路由器工作原理

    b 网络设备网卡 中继器 集线器 网桥 交换机 路由器工作原理 b b 网卡 b 1 工作在物理层 进行数据接收和发送 b 中继器 b 1 工作在物理层 用来复原网络中的信号并重新发送到其他网段上 进行数据接收再发送 b 集线器 b 1 工
  • echarts tooltip文字太长换行

    tooltip文字太长换行 设置了宽度也没有换行 加上一句 extraCssText max width 300px white space pre wrap 没加之前是这样 加上之后 extraCssText max width 300p
  • Tomcat8安装及配置详解

    Tomcat8安装及配置详解 1 下载安装包 2 安装Tomcat8 下载的zip包为免安装版 解压后可直接使用 3 配置环境变量 4 运行命令 5 测试是否成功 1 下载安装包 访问Tomcat官网https tomcat apache
  • Unity中协程(IEnumerator)的使用方法介绍

    在Unity中 一般的方法都是顺序执行的 一般的方法也都是在一帧中执行完毕的 当我们所写的方法需要耗费一定时间时 便会出现帧率下降 画面卡顿的现象 当我们调用一个方法想要让一个物体缓慢消失时 除了在Update中执行相关操作外 Unity还
  • MacOS Excel 科研作图示例

    系统版本 MacOS Catalina Excel版本 Excel for Mac 2019 效果图如下 介绍一下源数据 共有2种电极 分别用方法1与方法2处理而得 将这些电极分别用3种biomarker进行特异性实验 获得数据如下图 首先
  • RFID技术在机场行李自动分拣系统中的应用—铨顺宏

    RFID技术在机场行李自动分拣系统中的应用 1 社会背景 科技改变世界的工作方式 随着全球经济的迅猛发展 全世界范围内的贸易量不断加大 对整个的物流行业提出了更高的要求 机场行李自动分拣系统作为现代物流中的一个重要组成部分 同样面临着严峻的
  • 那些年,我们一起误解过的REST

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由sammyshen 发表于云 社区专栏 最近几年REST API越来越流行 特别是随着微服务的概念被广泛接受和应用 很多Web Service都使用了REST API REST
  • Python 入門語法和類型

    Python 入門語法和類型
  • MYSQL实现Oracle函数 over (partition by ...order by ...)

    mysql是没有oracle的这个分析函数 故只能自然根据原有语法写 先创建一个测试数据库 如图 要实现根据组别gid按num排序后重新获取列表 理论上就是自联表 把num比自己大的或者比自己小的作为临时表 代码如下 SELECT t CO
  • SAP MM ME2M ME2L ME28 增强自定义字段

    本人诚心接ABAP远程开发任务 价格公道 有需要的联系我 欢迎个人 甲方爸爸 乙方私信联系 目前项目需要增强ME2L 去增加客制化的字段 一开始顾问要求是copy标准程序 然后增加字段 查阅资料之后发现 SAP 预留了标准的增强出口去做增强
  • 计算共形几何 pdf_几何着色器

    几何着色器概述 Introduction PDF下载地址传送positiveczp github io positiveczp github io 25E5 2587 25A0 25E4 25BD 2595 25E7 259D 2580 2
  • Unity制作地震防空知识视频讲解程序

    https www bilibili com video BV1Hy4y1S78b 定制访问 https item taobao com item htm spm a2oq0 12575281 0 0 50111debJplIKu ft t
  • 技术人再不懂区块链,你就OUT了?漫画版

    这几天区块链技术无意中被徐小平 忽悠 的更加红火了 蹭着区块链的大火 今天小编就再给大家普及一下区块链相关知识 一幅漫画秒懂 区块链 区块链技术是指一种全民参与记账的方式 所有的系统背后都有一个数据库 你可以把数据库看成是一个大账本 目前是
  • 【MATLAB第60期】【更新中】基于MATLAB的ARMAX具有外生回归因子的移动平均自回归模型

    MATLAB第60期 更新中 基于MATLAB的ARMAX具有外生回归因子的移动平均自回归模型 版本更新 2023 7 29版本 1 增加自定义参数 方便直接套数据运行 pre num 3 预采样数据个数 learn pr 0 85 训练数