【ARIMA时序预测】基于ARIMA实现时间序列数据预测附matlab代码

news2024/11/14 5:46:57

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

基于时间序列预测Arima模型和回归模型,以"职业需求总人数"为因变量,"人才缺口度""各类教育背景下的人数"和"就业岗位平均值"为自变量建立回归模型,并通过对自变量进行Arima时序预测,带入回归模型得到未来三年沈阳市潜在的人才需求,最后分析得:沈阳市对高技术人才比较看重,且人才缺口大,需要相应的政策来进行调整与补充.

⛄完整代码

clear; 

close all

clc

P = sin(0.1:0.1:9.6);

F = sin(0.1:0.1:9);

%----------------------由于时间序列有不平稳趋势,进行两次差分运算,消除趋势性----------------------% 

for i=2:96 

    Yt(i)=P(i)-P(i-1); 

end 

for i=3:96 

    L(i)=Yt(i)-Yt(i-1); 

end 

L=L(3:96); 

Y=L(1:88); 

%画图

figure; 

plot(P); 

title('原数据序列图'); 

hold on; 

plot(Y,'r'); 

title('两次差分后的序列图和原数对比图'); 

  

%--------------------------------------对数据标准化处理----------------------------------------------% 

%处理的算法 : (data - 期望)/方差

Ux=sum(Y)/88                           % 求序列均值 

yt=Y-Ux; 

b=0; 

for i=1:88 

   b=yt(i)^2/88+b; 

end 

v=sqrt(b)                              % 求序列方差 

Y=yt/v;                            % 标准化处理公式 

f=F(1:88); 

t=1:88; 

%画图

figure; 

plot(t,f,t,Y,'r') 

title('原始数据和标准化处理后对比图'); 

xlabel('时间t'),ylabel('油价y'); 

legend('原始数据 F ','标准化后数据Y '); 

  

%--------------------------------------对数据标准化处理----------------------------------------------% 

%------------------------检验预处理后的数据是否符合AR建模要求,计算自相关和偏相关系数---------------% 

%---------------------------------------计算自相关系数-----------------------------------% 

R0=0;

for i=1:88  

     R0=Y(i)^2/88+R0;   %标准化处理后的数据的方差

end 

for k=1:20 

    

    %R  协方差   

    R(k)=0; 

    for i=k+1:88

        R(k)=Y(i)*Y(i-k)/88+R(k);   

    end 

end 

x=R/R0                      %自相关系数x = 协方差/方差

%画图

figure; 

plot(x) 

title('自相关系数分析图'); 

  

%-----------------------------------计算自相关系数-------------------------------------% 

%-----------------------解Y-W方程,其系数矩阵是Toeplitz矩阵(多普里兹矩阵)。求得偏相关函数X-------------------

X1=x(1); 

X11=x(1); 

B=[x(1) x(2)]'; 

x2=[1 x(1)]; 

A=toeplitz(x2);                       

X2=A\B                          %x=a\b是方程a*x =b的解

X22=X2(2) 

B=[x(1) x(2) x(3)]'; 

x3=[1 x(1) x(2)]; 

A=toeplitz(x3);                       

X3=A\B 

X33=X3(3) 

B=[x(1) x(2) x(3) x(4)]'; 

x4=[1 x(1) x(2) x(3)]; 

A=toeplitz(x4);                       

X4=A\B 

X44=X4(4) 

B=[x(1) x(2) x(3) x(4) x(5)]'; 

x5=[1 x(1) x(2) x(3) x(4)]; 

A=toeplitz(x5);                       

X5=A\B 

X55=X5(5) 

B=[x(1) x(2) x(3) x(4) x(5) x(6)]'; 

x6=[1 x(1) x(2) x(3) x(4) x(5)]; 

A=toeplitz(x6);                       

X6=A\B 

X66=X6(6) 

B=[x(1) x(2) x(3) x(4) x(5) x(6) x(7)]'; 

x7=[1 x(1) x(2) x(3) x(4) x(5) x(6)]; 

A=toeplitz(x7);                       

X7=A\B 

X77=X7(7) 

B=[x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8)]'; 

x8=[1 x(1) x(2) x(3) x(4) x(5) x(6) x(7)]; 

A=toeplitz(x8);                       

X8=A\B 

X88=X8(8) 

B=[x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9)]'; 

x9=[1 x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8)]; 

A=toeplitz(x9);                       

X9=A\B 

X99=X9(9) 

B=[x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10)]'; 

x10=[1 x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9)]; 

A=toeplitz(x10);                       

X10=A\B    

X1010=X10(10) 

      

B=[x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10) x(11)]'; 

x11=[1 x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10)]; 

A=toeplitz(x11);                       

X101=A\B    

X1111=X101(11) 

B=[x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10) x(11) x(12)]'; 

x12=[1 x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10) x(11)]; 

A=toeplitz(x12);                       

X12=A\B    

X1212=X12(12) 

X=[X11 X22 X33 X44 X55 X66 X77 X88 X99 X1010  X1111 X1212]  

%-----------------------------------解Y-W方程,得偏相关函数X-------------------------------------% 

figure;  

plot(X); 

title('偏相关函数图'); 

%-----根据偏相关函数截尾性,初判模型阶次为5。用最小二乘法估计参数,计算10阶以内的模型残差方差和AIC值,应用AIC准则为模型定阶------% 

   S=[R0 R(1) R(2) R(3) R(4)]; 

   G=toeplitz(S); 

   %inv(G)返回G的反函数

   W=inv(G)*[R(1:5)]'                      % 参数W(i) 与X5相同  G*W = [R(1:5)]'

    

   K=0;                               

   for t=6:88 

       r=0;  

       for i=1:5 

           r=W(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;                                                      

    end 

    U(5)=K/(88-5)                        % 5阶模型残差方差 0.4420 

                                                        

K=0;T=X1; 

for t=2:88 

    at=Y(t)-T(1)*Y(t-1); 

    K=(at)^2+K;  

end                         

  U(1)=K/(89-1)                         % 1阶模型残差方差0.6954            

   

   K=0;T=X2; 

   for t=3:88                                                       

       r=0;  

       for i=1:2 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(2)=K/(88-2)                     % 2阶模型残差方差 0.6264   

     

   K=0;T=X3; 

   for t=4:88 

       r=0;  

       for i=1:3 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(3)=K/(88-3)                      % 3阶模型残差方差 0.5327 

     

    K=0;T=X4; 

    for t=5:88 

       r=0;  

       for i=1:4 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(4)=K/(88-4)                     % 4阶模型残差方差  0.4751  

     

    K=0;T=X6; 

    for t=7:88 

       r=0;  

       for i=1:6 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(6)=K/(88-6)                     % 6阶模型残差方差 0.4365  

     

    K=0;T=X7; 

    for t=8:88                                             

       r=0;  

       for i=1:7 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(7)=K/(88-7)                     % 7阶模型残差方差 0.4331 

     

    K=0;T=X8; 

    for t=9:88 

       r=0;  

       for i=1:8 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(8)=K/(88-8)                     % 8阶模型残差方差0.4310  

     

    K=0;T=X9; 

    for t=10:88 

       r=0;  

       for i=1:9 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(9)=K/(88-9)                     %9阶模型残差方差 0.4297 

     

    K=0;T=X10; 

    for t=11:88 

       r=0;  

       for i=1:10 

           r=T(i)*Y(t-i)+r; 

       end 

       at= Y(t)-r; 

       K=(at)^2+K;  

    end 

    U(10)=K/(88-10)                   % 10阶模型残差方差 0.4317  

   

    U=10*U 

    for i=1:10 

    AIC2(i)=88*log(U(i))+2*(i)        % AIC值分别为:172.6632 165.4660  153.2087 145.1442 140.7898 141.6824 142.9944 144.5601 146.3067 148.7036

    end 

%-----------------取使AIC值为最小值的阶次,判断模型阶次为5。用最小二乘法估计参数--------------------% 

  

%------------------检验{at}是否为白噪声。求{at}的自相关系数,看其是否趋近于零-----------------------% 

   C=0;K=0; 

 for t=7:88 

     at=Y(t)-W(1)*Y(t-1)-W(2)*Y(t-2)-W(3)*Y(t-3)-W(4)*Y(t-4)-W(5)*Y(t-5)+Y(6)-W(1)*Y(5)-W(2)*Y(4)-W(3)*Y(3)-W(4)*Y(2)-W(5)*Y(1); 

     at1=Y(t-1)-W(1)*Y(t-2)-W(2)*Y(t-3)-W(3)*Y(t-4)-W(4)*Y(t-5)-W(5)*Y(t-6); 

     C=at*at1+C; 

     K=(at)^2+K;  

end 

 p=C/K              %若p接近于零,则{at}可看作是白噪声                  

 %--------------------------------{at}的自相关系数,趋近于零,模型适用--------------------------------% 

  

  

 %------------AR(5)模型方程为------------------------------------------------------------------------% 

  % X(t)=W(1)*X(t-1)-W(2)*X(t-2)-W(3)*X(t-3)-W(4)*X(t-4)-W(5)*X(t-5)+at     (at=0.4420) 

  

  

%------------------------------------------后六年的数据 进行预测和效果检验----------------------------------------------% 

  

%-----------------------------单步预测  预测当前时刻后的六个数据----------------------------------% 

 XT=[L(84:94)];  

 for t=6:11 

    m(t)=0; 

    for i=1:5 

       m(t)=W(i)*XT(t-i)+m(t);   

    end 

 end 

 m=m(6:11); 

   

 %-------------预测值进行反处理---------------% 

  m(1)=Yt(90)+m(1);            %一次反差分 

  z1(1)=P(90)+m(1);            %二次反差分 

  m(2)=Yt(91)+m(2); 

  z1(2)=P(91)+m(2);   

   m(3)=Yt(92)+m(3); 

  z1(3)=P(92)+m(3);  

   m(4)=Yt(93)+m(4); 

  z1(4)=P(93)+m(4);  

   m(5)=Yt(94)+m(5); 

  z1(5)=P(94)+m(5);  

   m(6)=Yt(95)+m(6); 

  z1(6)=P(95)+m(6);  

  z1                                               % 单步预测的向后6个预测值:z1= 13.9423   13.4101   13.3588   12.9856   13.2594   12.9552 

 %---------------------------绘制数据模型逼近曲线-----------------------------------% 

 for  t=6:88 

    r=0;  

    for i=1:5 

       r=W(i)*Y(t-i)+r; 

    end 

    at= Y(t)-r;     

end  

figure; 

for t=6:88 

   y(t)=0; 

   for i=1:5 

      y(t)=W(i)*Y(t-i)+y(t);   

   end 

   y(t)=y(t)+at; 

   y(t)=Yt(t+1)-y(t); 

   y(t)=P(t+1)-y(t); 

end 

plot(y,'r-*');                    % 样本数据模型逼近曲线 

hold on; 

plot(91:96,z1,'r-*');  

hold on; 

plot(P,'--');                     % 原样本曲线 

title('AR(5)模型样本逼近预测曲线'); 

  

%-----------------------------绘制数据模型逼近曲线-----------------------------------%  

   

%-------------------------预测误差分析------------------------%  

%----------------------------------多步预测 目的是向前六步预测--------------------------------------% 

Xt=[ Y(84) Y(85) Y(86) Y(87) Y(88)];           %取当前时刻之前的6个数据 

   

Z(1)=W(1)*Xt(5)+W(2)*Xt(4)+W(3)*Xt(3)-W(4)*Xt(2)-W(5)*Xt(1)                                  

%------求向前l步的预测值  

  %预测步数小于5时 

 for l=2:5 

     K(l)=0;  

    for i=1:l-1   

       K(l)=W(i)*Z(l-i)+K(l);  

    end 

    G(l)=0; 

    for j=l:5 

        G(l)=W(j)*Xt(5+l-j)+G(l); 

    end 

    Z(l)=K(l)+G(l); 

 end 

 %预测步数大于5时(向前6步预测) 

  for l=6:6 

      K(l)=0;  

      for i=1:5 

          K(l)=W(i)*Z(l-i)+K(l);  

      end 

      Z(l)=K(l); 

  end 

 %----预测值进行反标准化处理 

 r=Z*v+Ux                   %  0.0581    0.0844    0.0156    0.0319    0.0632    0.0652 

 r(1)=Yt(90)+r(1);           %一次反差分 

 z(1)=P(90)+r(1)             %二次反差分 

 for i=2:6 

     r(i)=r(i-1)+r(i); 

     z(i)=z(i-1)+r(i)   

 end 

%---------------------------- 预测误差分析 ------------------------------% 

%-------计算绝对误差和相对误差  

%D=[13.70 13.66 13.27 13.56 13.14  14.19 ];         % 预测值 z =14.0281   13.9606   13.9087   13.8887   13.9318   14.0403    

D = sin(9.1:0.1:9.6);

 for i=1:6                                          

     e6(i)=D(i)-z(i);  

     PE6(i)= (e6(i)/D(i))*100;                                                         

 end  

 e6                                                % 多步预测的绝对误差 e = -0.3281    -0.3006   -0.6387   -0.3287   -0.7918    0.1497 

  PE6                                              % 多步预测的相对误差 

 1-abs(PE6)                                          % 准确率 

    

%------多步预测平均绝对误差                                           

mae6=sum(abs(e6)) /6   

   

%------多步预测平均绝对百分比误差                                           

MAPE6=sum(abs(PE6))/6 

%------绘制预测结果和实际值的比较图 

figure; 

plot(1:6,D,'-+')                      

hold on; 

plot(z,'r-*'); 

title('向前六步预测值和实际值对比图'); 

hold off;

function [yhat , se ] = arimapred(y,phi,theta,d,mu,sa2,l)

% ARIMAPRED(Y,PHI,THETA,D,MU,SA2,L) Forecast ARIMA process

% INPUTS:

% y = observed data; n by 1

% phi = vector of AR coefficients; p by 1

% theta = vector of MA coefficients; q by 1

% d = order of differencing; 1 by 1 integer

% mu = mean of d times differenced y process; 1 by 1

% sa2 = variance of "shocks"; 1 by 1 and positive

% l = forecast lead time; 1 by 1 positive integer

% OUTPUTS:

% yhat = point forecasts; l by 1

% se = prediction standard deviations; 1 by 1

[n m ] = size(y);

z = y;

if d > 0

   for k = 1:d

      z = z(2:(n-k+1)) - z(1:(n-k));

   end

end

acvf = armaacvf(phi,theta,n-d+l);

V = toeplitz(acvf);

V11 = V(1:(n-d),1:(n-d));

V21 = V((n-d+1):(n-d+l),1:(n-d));

V22 = V((n-d+1):(n-d+l),(n-d+1):(n-d+l));

mu1 = mu*ones(n-d,1);

mu2 = mu*ones(l,1);

[ zhat Vp ] = blip(z,mu1,mu2,V11,V22,V21);

if d==0

   yhat = zhat;

   se = sqrt(diag(Vp));

else

   A = tril(ones(l,l));

   B = A^d;

   Vpy = B*Vp*B';

   se = sqrt(diag(Vpy));

   dy = [ y(n-d+1) ];

   if d > 1

      yend = y((n-d+1):n);

      for k = 2:d

         yend = diff(yend);

         dy = [ dy ; yend(1) ];

      end

   end

   yhat = zhat;

   for k=1:d

      yhat = cumsum([ dy(d-k+1) ; yhat ]);

   end

   yhat = yhat((d+1):(l+d));

end​

⛄ 运行结果

⛄ 参考文献

[1]张斌, 安连新, 孙凯. 基于ARIMA时间序列预测的人才需求变动研究[J]. 经营者, 2019.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

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

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

相关文章

Unity常用的三种拖拽方法(内置方法 + 接口 + Event Trigger组件)

目录 内置方法OnMouseDrag【对象含有Collider组件】 配对小游戏 Event Trigger组件 接口 窗口小案例 内置方法OnMouseDrag【对象含有Collider组件】 OnMOuseOver()检测鼠标是否进入到这个2D贴图 当鼠标进入或离开2D贴图,会相应的放大、缩小 private void OnMo…

[附源码]计算机毕业设计springboot校园快递柜存取件系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

山外山通过注册:拟募资12亿 大健康与华盖信诚是股东

雷递网 雷建平 12月2日重庆山外山血液净化技术股份有限公司(简称:“山外山”)日前通过注册,准备在科创板上市。山外山计划募资12.47亿元,其中,8.63亿用于血液净化设备及高值耗材产业化项目,1.64…

【Python基础系列】Part2. 列表

二、列表 1.列表介绍 定义:列表是由一系列按照一定顺序排列的元素组成。 Python中用[]表示列表,用,分割元素。 number ["one", "two", "three"] print(number)# [one, two, three]列表中的元素可以是不同类型 numbe…

netsh interface portproxy端口转发,从本地端口到本地端口不起作用的解决办法

开启IP V6 你虽然可能用不到IPV6,但是有些系统是需要用到IPV6的dll来做端口转发的. 如图,确保你联网的连接已经开启 IPV6 检查IP Helper服务 打开任务管理器 点击 服务 查看iphlpsvc是否启动状态,点击右键如果显示的是停止,就是已经启动了. 如果显示"启动服务"则…

drools规则引擎并发结果不准确问题记录

思路 首先,drools的整体思路比较简单,一个是加载,一个是执行! 加载:把一个比较复杂的关系运算想办法放到drools里面! 执行:让drools去计算这个复杂的运算,最终我们只需要取结果就好&…

广域网技术——SR-MPLS技术基础理论讲解

目录 SR-MPLS基础概念 使用Segment Routeing MPLS技术的优点 Segment Routeing MPLS的基本原理 SRGB Segment ID Bind SID 粘连标签 OSPF对于SR-MPLS的扩展 OSPF对邻接SID做了细分 10类LSA定义的TLV类型 10类LSA定义的TLV的报文格式 ISIS对SR-MPLS的扩展…

详解设计模式:模版方法模式

模板方法模式(Template Method Pattern)也被称为模板模式(Template Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。 模板方法模式 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使…

若依框架RuoYi项目运行启动教程【傻瓜式教程】

启动若依项目 1.官网下载代码 若依官网 若依在线文档 首先去官网下载代码 链接到码云下载,要么用git下载要么压缩包下载。 然后再IDEA打开项目 想要运行就要搭建好环境 2.搭建若依环境 按照文档要求配置环境 JDK > 1.8 (推荐1.8版本) Mysql > 5.7.0 (推…

Stable Diffusion 2.0 来了

Stable Diffusion 一经发布,就立刻在业界掀起巨大的波浪。我个人后知后觉,直到 Stable Diffusion V1.4 版本发布,才接触 Stable Diffusion (之前使用的是 Disco Diffusion)。这段时间,SD 团队也没闲着,很快就发布了 V2…

【华为上机真题 2022】停车场车辆统计

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

【Python】推荐三个好玩的图像处理库

1. 引言 Python是一门高级语言,它可以实现很多功能。Python强大的原因是什么?某种程度上,在于它所拥有的现成的库,使其在编程的各个方向上都易于使用。在本文中,我将向大家展示一些Python库,这些库非常有用…

node.js的模块化

目录 一、模块化的概念 1.什么是模块化 2.编程领域中的模块化 二、node.js中模块的分类 三、require() 加载模块 四. 模块作用域 五、module对象 六、module.exports对象 七、exports对象 八、CommonJS规定: 九、关于包(第三方模块) 十、解决…

阿里P8高级专家,耗时多年整理SpringBoot指南文档

前言 相信程序员们已经看过甚至动手操作过很多的springboot项目,在项目操作中需要各种插件的支持,其实,可能还有很多大家不知道的但是很方便的操作,小编今天就给大家把这份PDF分享出来,绝对是你以前没有见到过的。 1、…

springboot读取yml文件中的list列表、数组、map集合和对象

前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型,支持类对象类型,下面我们来实战下这些形式的配置如何取…

聚观早报 | 国美电器被申请破产清算;首款太阳能汽车投入生产

今日要闻:网传国美电器被申请破产清算;全球首款太阳能汽车投入生产;苹果头显配套系统已改名为xrOS;马斯克计划植入脑机接口设备;特斯拉即将推出自动驾驶出租车网传国美电器被申请破产清算 12 月 2 日消息,据…

网站都变成灰色,有哪些方法可以快速实现?

有些时候我们需要把网站页面变成黑白色或灰色,特别是对于一些需要悼念的日子,以及一些影响力很大的伟人逝世或纪念日的时候,都会让网站的全部网页变成灰色(黑白色),以表示我们对逝者或者英雄的缅怀和悼念。…

在校大学生如何申请软著,手把手教会你(内有免费模板)

目录 一.前言 二.以学校为单位全流程申请(以我的学校为例) 1.问问导员谁负责管软著申请这块的,联系他,问需要什么。 2.为了防止学生买软著转头申请 3.按以下要求准备材料 4.没问题就发给老师,一般要破费一下 5.…

View基础知识-位置大小和滑动

前言 这篇文章可以作为基础看看,但是有时候基础就是细节,不一定所有人都记得,所以基础也要记录一下。都熟悉的话也可以看看其他系列文章: View事件分发机制(源码分析篇) Android一步一步追踪View的工作原…

【车辆动力】基于Matlab模拟停车动力学

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …