(一)白噪声的检验
一般判断平稳有三种方法
(1)直接画出时间序列的趋势图,看趋势判断
(2)画出自相关和偏相关图:平稳的序列和自相关图和偏相关图要么拖尾,要么截尾。
(3)单位根检验:检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列。
设mean(x),var(x)分别为序列{x}的平均值和方差,根据自身相关系数ACF判断是否为平稳序列:
ACF=∑(x[i]-mean(x))(x[i+k]-mean(x))/(nvar(x)),0<=k<N,0<=i<N-k
import numpy;
import math;
#计算某一个k值的ACF
def auto_relate_coef(data,avg,s2,k):
ef=0.;
for i in range(0,len(data)-k):
ef=ef+(data[i]-avg)*(data[i+k]-avg);
ef=ef/len(data)/s2;
return ef;
#计算k从0到N-1所有ACF
def auto_relate_coefs(sample):
efs=[];
data=[];
avg=numpy.mean(sample);
s2=numpy.var(sample);
array=sample.reshape(1,-1);
for x in array.flat:
data.append(x);
for k in range(0,len(data)):
ef=auto_relate_coef(data,avg,s2,k);
efs.append(ef);
return efs;
如果ACF系数随K值的增加衰减到0的速度比非平稳随机序列更快,即可说明为平稳的。
不平稳序列可以通过差分转换为平稳序列。k阶差分就是相距k期的两个序列值相减。如果一个时间序列经过差分运算后具有平稳序列,则该序列为差分平稳序列。
(二)AR模型的参数估计
AR模型的参数估计主要有三种方法:矩估计、最小二乘估计和最大似然估计。
在此学习最小二乘估计。
对于样本序列{xt},当j>=p+1时,记白噪声的估计为
通常称为残差,我们的优化目标是使得残差平方和最小 残差平方和
记
得到如下方程组:
所以目标函数可以表示为:
上式对参数 a 求偏导并令其为0,得到
所以,参数 a 的最小二乘估计为
误差方差的最小二乘估计为
//以上流程就是最小二乘用矩阵的方式运算,很简单的
def ar_least_square(sample,p):
matrix_x=numpy.zeros((sample.size-p,p));
matrix_x=numpy.matrix(matrix_x);
array=sample.reshape(sample.size);
j=0;
for i in range(0,sample.size-p):
matrix_x[i,0:p]=array[j:j+p];
j=j+1;
matrix_y=numpy.array(array[p:sample.size]);
matrix_y=matrix_y.reshape(sample.size-p,1);
matrix_y=numpy.matrix(matrix_y);
#fi为参数序列
fi=numpy.dot(numpy.dot((numpy.dot(matrix_x.T,matrix_x)).I,matrix_x.T),matrix_y);
matrix_y=numpy.dot(matrix_x,fi);
matrix_y=numpy.row_stack((array[0:p].reshape(p,1),matrix_y));
return fi,matrix_y;
(三)AR模型的定阶
在对AR模型识别时,根据其样本自相关系数的截尾步数,可初步得到AR模型的阶数p,然而,此时建立的 AR(p) 未必是最优的。
定阶的一般步骤为:
(1).确定p值的上限,一般是序列长度N的比例或是lnN的倍数
(2).在补偿过max(p)值的前提下,从1开始根据某一原则确定最优p。
一个好的模型通常要求残差序列方差较小,同时模型页相对简单,即要求阶数较低。因此我们需要一些准则来比较不同阶数的模型之间的优劣,从而确定最合适的阶数。下面给出四种常用的定阶准则。
- FPE 准则
是序列的各阶样本自协方差函数,其最终预报误差可表示为
在具体应用时,通常是分别建立从低阶到高阶的 AR 模型,并计算出相应的 FPE 的值,由此确定使 FPE 达到最小的 p 值。
2.贝叶斯信息准则
定义
使得 BIC 达到最小值的 p 即为该准则下的最优 AR 模型的阶数。
3.AIC(最小信息准则)
def ar_aic(rss,p):
n=rss.size;
s2=numpy.var(rss);
return 2*p+n*math.log(s2);
4.SC(施瓦茨准则)
def ar_sc(rss,p):
n=rss.size;
s2=numpy.var(rss);
return p*math.log(n)+n*math.log(s2);
另:python中有函数可以直接求AIC,BIC,HQIC的值。
网友评论