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

✅作者简介:热爱科研的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电子书和数学建模资料

  • 1
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值