时间序列预测之ARMA、ARIMA序列及季节性序列matlab实现

2023-11-19

ARMA是一种平稳时间序列模型,即均值和协方差不随时间的平移而改变。
ARMA有三种类型
在这里插入图片描述
AR序列
在这里插入图片描述

MA序列
在这里插入图片描述在这里插入图片描述
ARMA序列
在这里插入图片描述
但是由于ARMA只能处理平稳序列,而现实中的问题往往有趋势性或周期性等。为了得到平稳序列,我们对数据进行差分运算,使得新序列成为平稳序列,就能够进行ARMA分析,因此ARIMA模型,是在ARMA的基础上多了差分运算,使得其能够处理的序列范围增加了。
ARIMA序列
在这里插入图片描述
在这里插入图片描述
例题1:
在这里插入图片描述

clc,clear
a = [17.0 16.6 16.3 16.1 17.1 16.9 16.8 17.4 17.1 17.0
    16.7 17.4 17.2 17.4 17.4 17.0 17.3 17.2 17.4 16.8
    17.1 17.4 17.4 17.5 17.4 17.6 17.4 17.3 17.0 17.8
    17.5 18.1 17.5 17.4 17.4 17.1 17.6 17.7 17.4 17.8
    17.6 17.5 16.5 17.8 17.3 17.3 17.1 17.4 16.9 17.3
    17.6 16.9 16.7 16.8 16.8 17.2 16.8 17.6 17.2 16.6
    17.1 16.9 16.6 18.0 17.2 17.3 17.0 16.9 17.3 16.8
    17.0 16.6 16.3 16.1 17.1 16.9 16.8 17.4 17.1 0
    17.3 17.4 17.7 16.8 16.9 17.0 16.9 17.0 16.6 16.7
    16.8 16.7 16.4 16.5 16.4 16.6 16.5 16.7 16.4 16.4
    16.2 16.4 16.3 16.4 17.0 16.9 17.1 17.1 16.7 16.9
    16.5 17.2 16.4 17.0 17.0 16.7 16.2 16.6 16.9 16.5
    16.6 16.6 17.0 17.1 17.1 16.7 16.8 16.3 16.6 16.8
    16.9 17.1 16.8 17.0 17.2 17.3 17.2 17.3 17.2 17.2
    17.5 16.9 16.9 16.9 17.0 16.5 16.7 16.8 16.7 16.7
    16.6 16.5 17.0 16.7 16.7 16.9 17.4 17.1 17.0 16.8
    17.2 17.2 17.4 17.2 16.9 16.8 17.0 17.4 17.2 17.2
    17.1 17.1 17.1 17.4 17.2 16.9 16.9 17.0 16.7 16.9
    17.3 17.8 17.8 17.6 17.5 17.0 16.9 17.1 17.2 17.4
    17.5 17.9 17.0 17.0 17.0 17.2 17.3 17.4 17.4 17.0
    18.0 18.2 17.6 17.8 17.7 17.2 17.4 0 0 0]';

a = nonzeros(a);
r11 = autocorr(a);
r12 = parcorr(a);
da = diff(a);
r21 = autocorr(da)
r22 = parcorr(da)
n = length(da);
k = 0;
for i = 0:3
    for j = 0:3
        if i == 0 & j == 0
            continue
        elseif i == 0
            ToEstMd = arima('MALags', 1:j, 'Constant', 0);
        elseif j == 0
            ToEstMd = arima('ARLags', 1:i, 'Constant', 0);
        else 
            ToEstMd = arima('ARLags', 1:i, 'MALags', 1:j, 'Constant', 0);
        end
        k = k + 1;
        R(k) = i;
        M(k) = j;
        [EstMd, EstParamCov, logL, info] = estimate(ToEstMd, da);
        numParams = sum(any(EstParamCov));
        [aic(k), bic(k)] = aicbic(logL, numParams, n);
    end
end
fprintf('R, M, AIC, BIC的对应值如下\n ');
check = [R', M', aic', bic']
r = input('输入阶数R=');
m = input('输入阶数M=');
ToEstMd = arima('ARLags', 1:r, 'MALags', 1:m, 'Constant', 0);
[EstMd, EstParamCov, logL, info] = estimate(ToEstMd, da);
dx_Forecast = forecast(EstMd, 10, 'Y0', da)
x_Frecast = a(end) + cumsum(dx_Forecast)

在这里插入图片描述
我代码敲出来结果有一点偏差,可能数据打错了几个吧,太多了,不想看了。

例题2
在这里插入图片描述

clc,clear
x = [9.40 8.81 8.65 10.01 11.07 11.54 12.73 12.43 11.64 11.39 11.1 10.85
    10.71 10.24 8.48 9.88 10.31 10.53 9.55 6.51 7.75 7.8 5.96 5.21
    6.39 6.38 6.51 7.14 7.26 8.49 9.39 9.71 9.65 9.26 8.84 8.29
    7.21 6.93 7.21 7.82 8.57 9.59 8.77 8.61 8.94 8.4 8.35 7.95
    7.66 7.68 7.85 8.53 9.38 10.09 10.59 10.83 10.49 9.21 8.66 8.39
    8.27 8.14 8.71 10.43 11.47 11.73 11.61 11.93 11.55 11.35 11.11 10.49
    10.16 9.96 10.47 11.70 10.1 10.37 12.47 11.91 10.83 10.64 10.29 10.34];
x = x';
x = x(:);
s = 12; % 周期
n = 12; % 预测数
m1 = length(x); % 原始数据数
for i = s+1:m1
    y(i-s) = x(i) - x(i-s); % 进行周期差分变换
end
w = diff(y); % 消除趋势性差分运算
m2 = length(w); % 计算最终差分后数据个数
k = 0; % 模型个数

for i = 0:3
    for j = 0:3
        if i == 0 & j == 0
            continue
        elseif i == 0
            ToEstMd = arima('MALags', 1:j, 'Constant', 0);
        elseif j == 0
            ToEstMd = arima('ARLags', 1:i, 'Constant', 0);
        else 
            ToEstMd = arima('ARLags', 1:i, 'MALags', 1:j, 'Constant', 0);
        end
        k = k + 1;
        R(k) = i;
        M(k) = j;
        [EstMd, EstParamCov, logL, info] = estimate(ToEstMd, w'); % 模型拟合
        numParams = sum(any(EstParamCov)); % 计算拟合参数个数
        [aic(k), bic(k)] = aicbic(logL, numParams, m2);
    end
end
fprintf('R, M, AIC, BIC的对应值如下\n ');
check = [R', M', aic', bic']
r = input('输入阶数R=');
m = input('输入阶数M=');
ToEstMd = arima('ARLags', 1:r, 'MALags', 1:m, 'Constant', 0); % 指定模型结构
[EstMd, EstParamCov, logL, info] = estimate(ToEstMd, w'); % 拟合模型
w_Forecast = forecast(EstMd, n, 'Y0', w') % 计算12步预测值,注意已知数据为列向量
yhat = y(end) + cumsum(w_Forecast) % 求一阶差分还原值
for j = 1:n
    x(m1+j) = yhat(j) + x(m1 + j - s);% 求x的预测值
end
xhat = x(m1 + 1: end) % 截取n个预报值

分析:
在这里插入图片描述
这题我和他的结果是对的上的。

使用ARIMA模型简单来说就是先差分使得序列成为平稳序列,然后就是遍历AR和MA的参数的事了,看aic和bic越小的,就选哪个参数就好了。

本文参考的是司守奎,孙兆亮主编的数学建模算法与应用(第二版)

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

时间序列预测之ARMA、ARIMA序列及季节性序列matlab实现 的相关文章

  • 当 MATLAB 发生错误时如何继续循环?

    我正在使用函数将一些 dat 文件转换为 mat 文件 我在循环内调用此函数来转换多个文件 在某些情况下 我的 dat 文件已损坏 函数无法转换并发生错误 从而停止循环 现在我的问题是 是否有任何命令 当错误发生时 它应该跳过循环中的当前
  • 笛卡尔散点图上的极坐标网格线

    我有一个脚本来创建散点图 使用gscatter 基于另一个脚本生成的 x y 数据 离散数据点 不连续 由于这些数据点实际上是圆形空间中某些对象的位置 因此添加极坐标网格线将使绘图更有意义 有谁知道如何在笛卡尔散点图上显示极坐标网格线 或者
  • 在 Matlab、VB6 和 VB.NET 程序之间发送消息的最简单方法

    我们正在将一套数据采集和分析例程从 VB6 程序升级为 VB NET VB6 和 Matlab 程序的混合体 我们希望保持系统模块化 单独的 EXE 以便我们可以轻松创建专门的独立分析程序 而无需不断升级大型应用程序 当所有程序都是用 VB
  • MATLAB:解包函数

    我正在与 Mathworks 的某人讨论 unwrap http www mathworks com access helpdesk help techdoc ref unwrap html函数中对于 以外的跳跃容差有一个 bug 并且希望
  • 如何从 Matlab 在 vi​​rtualenv 中执行 Python 代码

    我正在创建一个用于研究的 Matlab 工具箱 我需要执行 Matlab 代码 但也需要执行 Python 代码 我想允许用户从 Matlab 执行 Python 代码 问题是 如果我立即执行此操作 我将必须在 Python 环境中安装所有
  • Google Chrome 的互联网历史记录脚本

    我并不是在寻找 最佳 或最有效的脚本来执行此操作 但我想知道是否存在一个脚本可以从 Google Chrome 中提取一天的互联网历史记录并将其记录到 txt 文件中 我更喜欢用 Python 或 MATLAB 编写 如果你们有不同的方法
  • 在 MATLAB 中高效地形成动态窗口

    有人可以帮助我提供一种有效的方法 或者帮助我执行提供的代码 以尽可能少的步骤获得相同的结果 我将感激你 我有一个原始数组 A 1 1 1 4 3 4 5 4 4 3 3 1 0 0 2 6 2 6 3 6 6 2 7 4 8 7 2 2 2
  • MATLAB:生成给定三种颜色的颜色图

    我正在尝试在 MATLAB 中生成给定三种颜色 最高值 零值和最低值 的颜色图 我的思维过程是从最高端到中间循环 并将每个步骤存储到一个 3xN 第一列是 R 第二列是 G 第三列是 B 矩阵 所以我正在使用 fade from high
  • 使用 libsvm 交叉验证后重新训练

    我知道交叉验证用于选择好的参数 找到它们后 我需要在不使用 v 选项的情况下重新训练整个数据 但我面临的问题是 在使用 v 选项训练后 我得到了交叉验证精度 例如 85 没有模型 我看不到 C 和 gamma 的值 在这种情况下我该如何重新
  • 将输出从符号数学 (sym) 转换为浮点型

    我的问题类似于这个问题 https stackoverflow com questions 11114101 how to convert mupad symbol i sqrt 1 to i in matlab 11114959 1111
  • 图像增强 - 从书写中清除给定图像

    我需要清理这张照片 删除 清理我 的字样并使其变亮 作为图像处理课程作业的一部分 我可能会使用 matlab 函数 ginput 来查找图像中的特定点 当然 在脚本中您应该对所需的坐标进行硬编码 您可以使用 conv2 fft2 ifft2
  • 如何使用Matlab提高PSD的分辨率

    我有音频信号 我用 Matlab 读取该信号 并使用 pwelch 获取其 PSD 这是我正在使用的代码 x Fs audioread audioFile wav x x 1 mono xPSD f pwelch x hamming 512
  • MATLAB 中的抗锯齿线和标记

    您好 我在 MATLAB 中有一张图像 我希望这条线是平滑的 看看从 0 4 到 0 8 的线 这太可怕了 当在图中使用 LineSmoothing on 运算符时 我得到了这个 我在线条上做得很好 但它也使标记变得平滑 而且它们太可怕了
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • matlab矩阵中求子矩阵的通用方法

    我正在寻找一种 好 方法来在更大的矩阵 任意维数 中找到矩阵 模式 Example total rand 3 4 5 sub total 2 3 1 3 3 4 现在我希望这样的事情发生 loc matrixFind total sub 在
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并

随机推荐

  • a标签设置下载设置文件名,并且设置无效的解决方法

    设置 a 标签的 download属性 可以重置 文件名 如下代码 文件名重置为 file xlsx a href http 192 168 1 1 abcd xlsx 下载 a 这种写法有个前提 href 的下载地址 和 当前网站地址 必
  • SQL中ALL、Any、Some的区别

    SQL语句中存在3个著名的量词 some all 和 any All 只有当其所有数据都满足条件时 条件才成立 Any 只要有一条数据满足条件 条件就成立 Some 其中存在一些数据满足条件 作用和Any大致相同 常规的使用中看作一致即可
  • 来这里读懂英文!!!认清楚API !!!

    API Aplication Programming Interface 应用程序接口 直接的说 API就好比是一个信使 发送请求 告诉系统你想要做什么 然后把结果告诉你 再或者说 不论何时想到API 都应当把它想象成为餐馆的服务生 奔波于
  • Qt自带的日志框架

    描述 Qt中使用Qt qInstallMessageHandler 注册日志消息 日志级别 qDebug 调试信息 qWarning 警告信息 qCritical 严重错误 qFatal 致命错误 代码实现 void outputMessa
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • Linux系统安装android studio

    版权声明 本文为博主原创文章 未经博主允许不得转载 标签 空格分隔 Linux android studio 下载openjdk 7 jdk 通过终端直接安装的方式 不需要进行jdk配置 如下 sudo apt get install op
  • 如何把本地项目的代码上传到 GitHub 上(详解)

    此教程适用于已经安装 git 并且已经注册 GitHub 账号的电脑 如果没有下载 git 或者还没有注册过 GitHub 账号的 可以找相关教程弄一下 下面直接开整 说明 这里的案例就用我之前写的一个前端页面 内蒙古招生考试信息网首页 来
  • 【头歌-Python】Python第六章作业(初级)

    第1关 列表的属性与方法 任务描述 初始化一个空列表 输入一个正整数 n 接下来 你将被要求输入 n 个指令 每得到一个指令后 根据指令的字符串进行对应的功能操作 指令形式及对应功能如下 insert i e 在第 i 个位置插入整数 e
  • 5秒之后自动跳转页面

  • 基础备忘:数组指针与对一维数组名取地址

    一 指向一维数组的数组指针 数组指针是指向一个数组的指针 如 int p 10 p是一个指针 指向一个包含10个元素的一维数组 数组元素是整形 如果写成了int p 10 则是一个指针数组 由于 的优先级比 的高 p先与 结合 p就是数组类
  • Mac maven删除与安装

    Mac maven删除与安装 一 删除maven 找到maven安装目录 打开终端输入 mvn version找到安装目录 终端输入sudo rm rf maven的路径 二 安装maven 到maven官网下载 选择apache mave
  • [2021首届“陇剑杯”网络安全大赛] SQL注入

    2021首届 陇剑杯 网络安全大赛 SQL注入 题目描述 某应用程序被攻击 请分析日志后作答 黑客在注入过程中采用的注入手法叫 布尔盲注 格式为4个汉字 例如 拼搏努力 黑客在注入过程中 最终获取flag的数据库名 表名和字段名是 Sqli
  • vue3中实现el-dialog弹窗

    vue3中的父子组件传递依然和vue2中的一样使用props和emit 但是写法略有不同 emit 自定义事件 子传父 props 父传子 父组件中
  • 【数学建模】预测模型——多元回归分析 SPSS实现

    线性回归介绍 回归分析是研究变量之间因果关系的一种统计模型 因变量就是结果 自变量就是原因 基于结果变量 因变量 的种类 回归分析可分为 线性回归 因变量为连续变量 logistic回归 因变量为分类变量 柏松回归 因变量为计数变量 这三种
  • config:fail,Error: 系统错误,错误码:40048,invalid url domain

    调用微信接口报出的错误 这个错误原因是因为安全域名配置错误 分两种情况 若是公众号的测试号 你完全可以写一个内网ip 比如192 168 1 100 8080 不必内网穿透 当然如果是需要微信回调的话还要外网可访问 若是公众号的正式号 可以
  • 使用Flink1.16.0的SQLGateway迁移Hive SQL任务

    使用Flink的SQL Gateway迁移Hive SQL任务 前言 我们有数万个离线任务 主要还是默认的DataPhin调度CDP集群的Hive On Tez这种低成本任务 当然也有PySpark 打Jar包的Spark和打Jar包的Fl
  • shell 脚本编写总结(1)

    知识点1 变量 1 环境变量 1 变量 BASH Bash Shell的全路径 比如 echo BASH 2 变量 BASH VERSION Bash Shell的版本号 3 变量 EUID 记录当前用户的UID root用户值为0 4 F
  • vue + 高德地图 + 标记点

    其他 高德地图引入及使用 vue 高德地图 标记点 变大变小闪烁动画 多标记点 同一位置标记点显示个数 增加标记点 绘制地图 this map new AMap Map map resizeEnable true center 120 35
  • 区块链学习笔记(一)——比特币概念以及密码学相关的知识

    自己做一些让自己读得懂的笔记 区块链学习笔记 一 1 Bitcoin History 1 1 一个关于bitcoin的时间线 2 Crytography of the Blockchain 2 1 the Hash function 2 1
  • 时间序列预测之ARMA、ARIMA序列及季节性序列matlab实现

    ARMA是一种平稳时间序列模型 即均值和协方差不随时间的平移而改变 ARMA有三种类型 AR序列 MA序列 ARMA序列 但是由于ARMA只能处理平稳序列 而现实中的问题往往有趋势性或周期性等 为了得到平稳序列 我们对数据进行差分运算 使得