MATLAB小技巧(33)arima时间序列

MATLAB小技巧(33)arima时间序列

前言

MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章的话主要就是介绍一些大家在MATLAB中常用一些概念函数进行例程演示!

ARIMA模型全称为差分自回归移动平均模型(autoregressive integrated moving average model 简记为ARIMA)

  1. AR是自回归,p为自回归项,MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所作的差分次数。

  2. 原理:将非平稳时间序列转换为平稳时间序列然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。

  3. 自相关函数ACF(autocorrelation function):有序的随机变量序列与其自身相比较自相关函数反映了同一序列在不同时序的取值之间的相关性。

搜寻资料的时候遇到的这个示例,这里分享给大家,MATLAB版本为MATLAB2015b。

一. MATLAB仿真

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:arima时间序列
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-28
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% I. 清空环境变量
clear all
clc

tic													
%数据导入													
FH=[110	98	92	102	112	107	83	80	83	89	97	61	75	62];																																																																													
x=FH';													
[m,n]=size(x);																																							
test=[];													
Z=x;													
X=x;													
h=adftest(Z,'model','ARD','test','t1');  % 单位根检验  h=0表示不平稳,h=1表示平稳。													
plot(1:length(X),X);												
													
title('福建沿海船舶事故数据变化曲线','fontsize',15);													
ylabel('事故值','fontsize',15);													
xlabel('次数','fontsize',15);													
																										
Y=diff(X,1);%差分													
figure(2)													
plot(1:length(Y),Y);													
h1=adftest(Y,'model','ARD','test','t1');  %h1=0表示不平稳,h1=1表示平稳。													
													
title('一阶差分图','fontsize',15);													
ylabel('数值','fontsize',15);													
xlabel('次数','fontsize',15);													
																									
[PartialACF, Lags, Bounds] = parcorr(Y, 10, 2); 													
%Visually assess whether the partial ACF is zero for lags greater than 2													
figure(3)													
parcorr(Y, 10, 2);													
													
title('偏相关图','fontsize',15);													
ylabel('相关系数','fontsize',15);													
xlabel('Lag','fontsize',15);																									
													
figure(4)													
autocorr(Y, 10, 2); 																								
title('自相关图','fontsize',15);													
ylabel('相关系数','fontsize',15);													
xlabel('Lag','fontsize',15);												
																									
Z=iddata(X);													
																																																	
%利用AIC确定最佳 p q													
for p=1:3													
    for q=1:3													
        m1=armax(Z(1:m-1),[p,q]);													
        AIC=aic(m1);													
        test=[test;p q AIC];													
    end													
end													
for k=1:size(test,1)													
    if test(k,3)==min(test(:,3))													
        p_test=test(k,1);													
        q_test=test(k,2);													
    end													
end													
													
													
yc=armax(Z,[p_test q_test]);													
%利用模型预测													
L=1;													
p=iddata(Y);													
P=predict(yc,p,L);%预测但没有显示													
ValueP=P.outputdata(1:end);%预测的值													
X1=cumsum([X(1);ValueP]);  %全部差分值还原值													
X2=X1(length(X)+1:end);%预测值还原													
cc=x-X1(1:m);%计算残差													
[hcc,pValue,stat,cValue,reg]=adftest(cc,'model','ARD','test','t1');  % 单位根检验  hcc=0表示不是白噪声,hcc=1表示是白噪声。													
																																																		
L=3; %预测长度L													
y=[Y;zeros(L,1)];%加初始窗													
p=iddata(y);													
P1=predict(yc,p,L);%预测但没有显示													
ValueP=P1.outputdata(1:end);%预测的值													
X11=cumsum([X(1);ValueP]);  %全部差分值还原值													
X2=X11(length(X)+1:end);%预测值还原													
													
figure(5)													
plot(1:length(ValueP),ValueP);													
figure(6)													
compare(yc,Z,L);  %显示预测值与原先值得比较图													
													
cc=x-X1(1:m);%计算残差	
toc

二. 仿真结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三. 小结

arima时间序列的仿真示例,后期可能会用到,这里做个笔记。每天学一个MATLAB小知识,大家一起来学习进步阿!

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/125464574