时间序列预测之armaarima序列及季节性序列matlab实现(代码片段)

IcyHunter IcyHunter     2023-03-09     735

关键词:

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越小的,就选哪个参数就好了。

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

推荐收藏基于趋势和季节性的时间序列预测实战(代码片段)

本文主要分析时间序列的趋势和季节性,分解时间序列,实现预测模型。时间序列预测是基于时间数据进行预测的任务。它包括建立模型来进行观测,并在诸如天气、工程、经济、金融或商业预测等应用中推动未来的... 查看详情

复合序列分解预测实例

例子:根据已有数据预测2006年的对应数据  图形描述数据,根据年度折叠图可判断存在季节影响因素 将数据进行处理,添加时间编号    将获得比值整理至如下表格中求平均比值,检查平均比值均值不... 查看详情

时间序列挖掘-预测算法-三次指数平滑法(holt-winters)——三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息

...http://www.cnblogs.com/kemaswill/archive/2013/04/01/2993583.html 在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(Triple/ThreeOrderExponentialSmoothing,Holt-Winters)算法可以很好的进行时间序列的预测。&... 查看详情

16种常用的数据分析方法-时间序列分析

参考技术A时间序列(timeseries)是系统中某一变量的观测值按时间顺序(时间间隔相同)排列成一个数值序列,展示研究对象在一定时期内的变动过程,从中寻找和分析事物的变化特征、发展趋势和规律。它是系统中某一变量受... 查看详情

时间序列预测初探:kats,sarima,prophet,deepar等

文章大纲时间序列简介时间序列的4个主要成分判断时间序列是否存在周期性PyStanKats安装prophet原理简介趋势项季节趋势外部变量节假日趋势优缺点优点缺点模型更新prophet超参调优deepAR参考文献时间序列简介时间序列预测就是通... 查看详情

怎样用matlab做时间序列平稳性检验

参考技术A用matlab做时间序列平稳性检验需要作图、拟合,具体说明如下所示:根据动态数据作相关图,进行相关分析,求自相关函数。相关图能显示出变化的趋势和周期,并能发现跳点和拐点。如果跳点是正确的观测值,在建... 查看详情

prophet时间序列预测算法(代码片段)

Prophet时间序列预测算法 一、背景时间序列预测是一种预测未来数据的方法,对于时间序列的分析,我们可以采用传统的统计学方法,例如ARIMA、ExponentialSmoothing等,这些方法通过分析过去的数据建立模型来预测未来的趋势,... 查看详情

Python中的多季节性时间序列分析

】Python中的多季节性时间序列分析【英文标题】:multipleseasonalityTimeseriesanalysisinPython【发布时间】:2018-11-1515:07:20【问题描述】:我有一个每日时间序列数据集,我正在使用PythonSARIMAX方法来预测未来。但我不知道如何在python中... 查看详情

时间序列预测之指数平滑法(es)(代码片段)

指数平滑法,就可以理解成一种变种的加权移动平均法吧α越大,表明最近的数据所占的权重就越大一次指数平滑法例题clc,clearyt=[505247514948514048525159]';%列向量n=length(yt);alpha=[0.20.50.8];m=length(alpha);yhat(1,[1:m])&#... 查看详情

时间序列预测 - ARIMA/ARIMAX 与 R 中的每日数据

】时间序列预测-ARIMA/ARIMAX与R中的每日数据【英文标题】:Timeseriesforecast-ARIMA/ARIMAXwithdailydatainR【发布时间】:2019-08-1017:46:36【问题描述】:entercodehere我正在做一个项目来分析和预测客户销售和收入的时间序列。为了准确性,我... 查看详情

r语言实战应用精讲50篇(二十)-r语言时间序列预测模型:arimavsknn(代码片段)

1总述要找到一个合适的模型来预测时间序列数据总是很困难。其中一个原因是,使用时间序列数据的模型往往会暴露出序列相关性。在这篇文章中,我们将比较经典的随机过程--自回归移动平均(ARIMA)。k近邻(KNN)回归(一种... 查看详情

r语言实战应用精讲50篇(二十)-r语言时间序列预测模型:arimavsknn(代码片段)

1总述要找到一个合适的模型来预测时间序列数据总是很困难。其中一个原因是,使用时间序列数据的模型往往会暴露出序列相关性。在这篇文章中,我们将比较经典的随机过程--自回归移动平均(ARIMA)。k近邻(KNN)回归(一种... 查看详情

(19)时间序列分析

参考技术A一)时间序列分析简介二)季节分解法三)专家建模法一、时间序列分析简介时间序列就是按时间顺序排列的一组数据序列。时间序列分析就是发现这组数据的变动规律并用于预测的统计技术。时间序列分析有三个基... 查看详情

如何使用 scikit-learn 的 LinearRegression() 捕获时间序列数据的趋势以进行预测

】如何使用scikit-learn的LinearRegression()捕获时间序列数据的趋势以进行预测【英文标题】:Howtocapturetrendintime-seriesdataforforecastingusingscikit-learn\'sLinearRegression()【发布时间】:2021-08-0322:17:51【问题描述】:我阅读了一些关于使用ML进... 查看详情

一文速学-时间序列分析算法之移动平均模型(ma)详解+python实例代码(代码片段)

...xff1a; MA(2)模型:自协方差函数二、Python案例实现平稳时间序列建模步骤平稳性检验输出内容解析:补充说明:MA预测模型 消除趋势和季节性变化差分Differencing分解DecompositionACF自协方差和PACF偏自相关函数模型建立​... 查看详情

一文速学-时间序列分析算法之移动平均模型(ma)详解+python实例代码(代码片段)

...xff1a; MA(2)模型:自协方差函数二、Python案例实现平稳时间序列建模步骤平稳性检验输出内容解析:补充说明:MA预测模型 消除趋势和季节性变化差分Differencing分解DecompositionACF自协方差和PACF偏自相关函数模型建立​... 查看详情

python时间序列建模:用指数平滑法预测股价走势(代码片段)

指数平滑方法适用于非平稳数据(即具有趋势和/或季节性的数据),其工作方式类似于指数移动平均线。预测是过去观察的加权平均值。这些模型更加强调最近的观察结果,因为权重随时间呈指数级变小。平滑方... 查看详情

2023美赛c题wordle预测27页中文论文及python代码详解

...portedresults进行预测,并创建一个预测区间。这是一个时间序列预测问题,本文建立机器学习模型进行时间序列数据回归预测。对于时间序列的回归预测,线性回归模型需要满足线性、独立性、正态性、方差齐性、自... 查看详情