时间序列——ARIMA模型

 ARIMA模型

 

一、知识储备

1、ARIMA(p,d,q):自回归差分移动平均序列

ARIMA模型的确定:

d的确定:差分后检查自相关系数,确定序列是否平稳,直到平稳为止

p、q的确定:由自相关系数、偏自相关系数确定,或由AIC、BIC准则确定。(AIC、BIC都是越小越好)

2、平稳性检验

1)若时间序列的自相关函数在k>3时都落入置信区间,且逐渐趋于0,则该时间序列具有平稳性

2)若时间序列的自相关函数更多的落在置信区间外面,则该时间序列就不具有平稳性

 

二、例题

  某化工生产过程每2h的浓度读数(逐行排列)如表1所示。

                                                                      表1:化工生产过程浓度读数

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.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

 

 

 

(1)对这一生产过程建模

(2)对这一生产过程进行10步预测

MATLAB程序

clc,clear
a=textread('hua.txt'); %把原始数据按照原来的排列格式存放在纯文本文件hua.txt
a=nonzeros(a'); %按照原来数据的顺序去掉零元素
r11=autocorr(a)   %计算自相关系数
r12=parcorr(a)    %计算偏相关系数
da=diff(a);       %计算1阶差分
r21=autocorr(da)  %计算1阶差分后自相关系数
r22=parcorr(da)   %计算1阶差分后偏相关系数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,1)
autocorr(a)     %画出自相关系数图形
title('自相关系数图形')
subplot(2,2,2)
autocorr(da)    %画出1阶差分后自相关系数图形
title('1阶差分后自相关系数图形')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n=length(da);  %计算1阶差分后的数据个数
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)); %计算拟合参数的个数
        %compute Akaike and Bayesian Information Criteria
        [aic(k),bic(k)]=aicbic(logL,numParams,n);
    end
end
fprintf('R,M,AIC,BIC的对应值如下\n %f');  %显示计算结果
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)  %计算10步预报值
x_Forecast=a(end)+cumsum(dx_Forecast)   %计算原始数据的10步预测值

猜你喜欢

转载自blog.csdn.net/qq_40581789/article/details/81837552