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步预测值