logo资料库

时间序列的分析——模型的识别与预测(实验报告+源代码).docx

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
模型的识别与预测 一、实验内容 依照某 AR 模型生成一段数据(1000),同时用另一 MA 模型生成一段数据 (200),合成一段 1200 长度的数据 1)依赖于这 1200 个数据的前 800 个数据,识别这段数据背后的 AR 模型。 2)在 1)的基础上对新数据进行预测,并通过后续的 400 个数据进行判别 (数据模型是否匹配)或者模型的修正(修正只需要提供思路和方法)。 二、理论基础 1.时间序列模型介绍 时间序列是随时间改变而随机地变化的序列。时间序列分析的目的是找出它 的变化规律,即线性模型,主要有三种:AR 模型(自回归模型)、MA 模型(滑 动平均模型)和 ARMA 模型(自回归滑动平均模型或混合模型)。 设{Xt}为零均值的实平稳时间序列,阶数为 p 的 AR 模型定义为 X t   1 X t 1    2 X t  2 ...   p X pt   a t 其 ,0] [ taE [ aaE s t ]  s ,   a  ,0  2 t , t   , s [ XaE s t  ,0] s  t 其中{ ,  kk ,...,2,1 p }成为自回归系数,白噪声序列{ ta }成为新信息序列; 阶数为 q 的 MA 模型定义为 X t  a t  a  1 t 1  ...   a tq  2 其中{ ,  kk ,...,2,1 q }称为滑动平均系数; P 阶自回归 q 阶 ARMA 模型定义为 X t   1 X t 1  ...   p X pt   a t  a  1 t 1  ...   a qtq  记为 ARMA(p,q)。 2. 模型的识别 根据教材对平稳时间序列的特性分析,对初步识别平稳时间序列的类型提供 了依据,如表 1 所示:
表 1 各时间序列模型的特性 类别 模型 自相关函数 AR(p) 拖尾 截尾 k=q 处 MA(q) ARMA(p,q) 拖尾 拖尾 偏相关函数 截尾 k=p 处 拖尾 3. 模型阶数的确定 1)样本自相关函数和样本偏相关函数 设有零均值平稳时间序列{ tX }的一段样本观测值 , xx 1 2 ,..., Nx ,样本协方差函 数估计式为 ^  k  1 N 同理样本自相关函数定义为 kN   i 1  xx i ki  k  ,...,1,0 N  1 ^  k  ^  k ^  0 k  ,...,1,0 N  1 2)MA 模型阶数的确定 设{ tX }是正态的零均值平稳 MA(q)序列,而对于充分大的 N,可以认为 ^ k 的分布近似于正态分布 N /1(,0( 2N )) ,从而, ^ k 的截尾性判断如下:首先计算 , ^ 2 ,..., ^ ^ M 1 ^ ^  q q 1  , ,...,  2 (取 10/NM  ),因为 q 值未知,故令 q 值从小到大,分别检验 ^  Mq  满足 ^  k 1 N ^  k 或 2 N 的比例是否占总个数 M 的 68.3%或 95.5%。第一个满足上述条件的 q 就是 ^ k 的 截尾处,及 MA(q)模型的阶数。 4. 模型参数的估计 当选定模型及确定阶数后,进一步的问题就是估计出模型的位置参数。参数 估计的方法有矩法,最小二乘法及极大似然估计等。在工程计算中,只要用样本
自协方差函数 k 或样本自相关函数 k 中的一部分数值。这里不详细介绍。 5. 模型的检验 由样本观测序列{ txt ,  ,...,2,1 N },经过模型的识别,阶数的确定和参数估计, 可以初步建立{ tX }的模型。这样建立的模型一般还需要进行统计检验,只有经检 验确认模型基本上能反映{ tX }的统计特性时,用它进行预测才能获得良好的效果。 模型的所谓自相关函数检验法,其基本思想是,如果模型是正确的,则模型的估 计值与实际观测值所产生的残差序列 a t  x t  ^ ( tx t  ,...,2,1 N ) 应是随机干扰产生 的误差,即{ ta }应是白噪声序列。否则,模型不正确。 6. 模型的预报 根据时间序列观测数据,建立了一个与实际问题相适应的模型后,就可以利 用过去与现在的观测值,对该序列未来时刻的取值进行估计,即预报。关于预报 效果优劣的标准,下面采用的是在平稳性最小方差意义下的预报。 三、具体步骤 1. 从 AR 模型中提取 1000 个样本点以及 MA 模型中提取 200 个样本点,分别存 储于 x2 和 x1 中; 2. 取 x2 的前 800 个数据作为模型识别的样本观测值,存储于 X2 中,计算样本 自相关函数和样本偏相关函数,并通过它们的特性识别模型;
3. 根据自相关或者偏相关确定模型阶数,用最小二乘法求模型系数; 4. 提取 1000 个数据中后 200 个数样本据检验所得模型是否正确,用卡方假设检 验,其自由度为 M,显著性水平为 0.05; 5. 预测模型的新数据,并与原始数据相比较; 6. 通过后续的 400 个数据进行判别(数据模型是否匹配)
四、结论 程序基本满足实验要求,能通过一组样本数据通过计算自相关函数和偏相关 函数来识别其背后的模型,并确定模型的阶数以及模型的系数,得到一个完整的 时间序列。在此基础上,可以通过该数据模型预报一组新的数据,与原始数据相 比,能有较好的预报性,还能判别一组数据与这个模型是否匹配。 我关于模型修正的思路:为将这后续 400 个数据与再从原始的 800 个数据提 取出的 400 个数据合并,重新进行一次模型的建立,理论上能得到较好的修正模 型。 五、分析总结 尽管程序已基本完成实验内容,但还是有一些不尽人意的地方,还存在如下 问题: 1)已给 AR 模型为 2 阶,程序中未考虑到更高阶的情况,即使识别到的是 更高阶模型,也作二阶来处理,会存在误差,这点有待完善; 2)在确定模型阶数时,偏相关函数的计算不够准确也可能导致阶数的判定 出错,但在后续加了检验程序可在一定程度上解决该问题; 3)对于一阶情况也未作处理,样本数据被判别为别的模型时也未处理,这 点可以后续完善。 六、附录 clear all; clc; %从 MA 模型 X(t)=a(t)-1.3a(t-1)+0.4a(t-2)中提取 200 个样本点 K=200; a1=randn(1,K); x1=zeros(1,K); x1(1)=1; x1(2)=1; for i=3:K end x1(i)=a1(i)-1.3*a1(i-1)+0.4*a1(i-2);
X1=x1; %从 AR 模型 X(t)+0.8X(t-1)=a(t)中提取 1000 个样本点 N=1000; a2=randn(1,N); x2=zeros(1,N); x2(1)=0.1; x2(2)=0.1; x2(3)=1; for i=3:N end x2(i)=1.5*x2(i-1)-0.5*x2(i-2)+a2(i); %取 x2 的前 800 个数据作为模型识别的样本观测值 L=800; X2=x2(1,1:L); %计算样本自相关函数和样本偏相关函数 r=zeros(1,L); for k=0:L-1 %样本协方差矩阵 %求样本协方差 rk=0; for i=1:L-k rk=rk+X2(i)*X2(i+k); end r(k+1)=(1/L)*rk; s1=s1+p(k+1-j)*pp(k,j); end end p=zeros(1,L); for i=1:L p(i)=r(i)/r(1); M=L/10; pp=zeros(M,M); pp(1,1)=p(2); p(1)=[]; for k=1:M-1 s1=0; s2=0; for j=1:k %求样本自相关函数 %样本偏相关系数矩阵 %求样本偏相关函数
s2=s2+p(j)*pp(k,j); end pp(k+1,k+1)=(p(k+1)-s1)/(1-s2); for j=1:k pp(k+1,j)=pp(k,j)-pp(k+1,k+1)*pp(k,k+1-j); end end pp1=diag(pp); %提取偏相关系数 subplot(2,1,1) plot(p); title('自相关图'); subplot(2,1,2) plot(pp1); title('偏相关图'); %识别模型,返回模型的阶数 %取 M=L/10 个自相关和偏相关系数 if abs(p(f1))<=1/sqrt(L) count=count+1; end if count/M>=0.683 break; count=0; for f1=1:M end end count_1=0; for f2=1:M if abs(pp1(f2))<=1/sqrt(L) count_1=count_1+1; end if (count_1)/M>=0.683 break end end if f1==M&&f2
disp('建立 AR 模型'); %确定模型阶数 for i=1:M if abs(pp1(i))<=1/sqrt(L) jieshu=i-1; break end end fprintf('其阶数为:%d\n',jieshu); %最小二乘法求模型系数 for n=1:jieshu Y=X2'; Y(1:n)=[]; m=L-n;X=[]; for i=1:m for j=1:n X(i,j)=X2(n+i-j); end end xishu=inv(X'*X)*(X'*Y); end %用后 200 个数据检验所得模型是否正确 X3=x2(1,L+1:end); T=N-L; a3=zeros(1,T); ra=ones(1,T+1); %提取后 200 个样本点 %由观测样本点计算得到的白噪声点 %白噪声的协方差 a3(1)=X3(1); a3(2)=X3(2)-xishu(1)*X3(1); if jieshu>1 for i=1:T-2 a3(i+2)=X3(i+2)-xishu(1)*X3(i+1)-xishu(2)*X3(i); %用模型估计值与样本观测值产生白噪声序列 end %求白噪声协方差 M=T/10; for i=0:M s3=0; for j=1:T-i
分享到:
收藏