模型的识别与预测
一、实验内容
依照某 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