matlab5.白噪声检验

案例:

x = [97 130 156.5 135.2 137.7 180.5 205.2 190 188.6 196.7 180.3 210.8 196 223 238.2 263.5 292.6 317 335.4 327 321.9 353.5 397.8 436.8 465.7 476.7 462.6 460.8 501.8 501.5 487.5 542.3 512 559.8 542 567];
figure;
subplot(1,2,1)  %一行二列的第一个图
plot(x);        % x为原始数据
title('原始数据时序图')
subplot(1,2,2)
autocorr(x);    %自相关系数图
title('自相关系图像')

%易知原始数据不是平稳的,不能做随机性检验
%然后求差分,目的:变成平稳的
%有向上向下趋势,做一阶差分
%有周期性,做步差分
x=x';
x1=diff(x);   %Xt-Xy-1,后面的数减前面的数,逐个
[h1,p1,adf,ljz]=adftest(x1);    %检验是否平稳
figure;
subplot(2,1,1);
plot(x1);
title('原始数据时序图')
subplot(2,1,2);
autocorr(x1);
title('自相关系数图');


%白噪声检验,继续使用前么的一阶差分之后的数据x1
yanchi=[6,12,18];   %做6.12.18步延迟
[H,pValue,Qstat,CriticalValue]=lbqtest(x1,'lags',yanchi);
%lb检验  'lags'按照步长  延迟 ,x1改变就好了
%H,结果,p概率,Qlb的统计量,临界值
fprintf('%15s%15s%15s','延迟阶数','卡方统计量','p值');%把逗号后的字符串,15s的空格
fprintf('\n');
for i=1:length(yanchi)    %i=1,时候为6,i=2时候为12
    fprintf('%18f%19f%19f',yanchi(i),Qstat(i),pValue(i));
    fprintf('\n');
end

%p比0.05大接受原假设
%原假设:一阶差分后序列延迟1.6.12步相关系数=0,一阶差分之后是一个白噪声序列
%既然白噪声序列就不能用时间序列了,一阶差分之后发现,内部没有存在相互传递的关系,有趋势
%把趋势弄出来
%剩下的是白噪声的,白噪声的按照白噪声(随机过程的方法)的去做在这里插入代码片




h1 =

     1


p1 =

   1.0000e-03


adf =

   -5.5223


ljz =

   -1.9491


延迟阶数          卡方统计量             p值
          6.000000           3.427471           0.753593
         12.000000           3.991735           0.983585
         18.000000           5.991523           0.996231

你可能感兴趣的:(matlab学习)