当前位置:首页 » 《随便一记》 » 正文

GM(1,1)预测模型的残差检验、关联度检验、后验差检验代码_1117慧and佳的博客

6 人参与  2022年02月22日 12:17  分类 : 《随便一记》  评论

点击全文阅读


      在建立好灰色模型后,首先要进行模型的检验,以检验模型的效果。一般有三种检验方法:相对残差检验、关联度检验、后验差检验。当三种检验全部通过时,表明模型的效果较好,才可以使用模型进行后续的预测;否则,将要对模型进行残差修正,直到三种检验均通过为止。

     这篇文章就着重阐述一下三种检验~

一、检验准则

     下面就不详细阐述各检验的基本原理了,重点说一下各检验的评判准则。

1.相对残差检验(根据自己的要求与题意任选一个要求进行衡量即可)

 (1)最严格的要求:\o(i)<0.005      其中\o(i)为相对误差序列,这个不等式表示当相对误差序列中的元素应都小于0.005时,通过相对残差检验。

(2)较宽泛的要求:     其中表示相对误差序列中元素的均值。

        给定a,当,当不等式成立时,称模型为合理模型。

        一般a取0.01、0.05、0.1,分别对应优秀、合格、勉强通过。

2.关联度检验

      其中 当,关联度大于0.6时,检验通过。

3.后验误差

        方差比C、小误差概率:

       根据P与C的取值,有对应好、合格、勉强合格、不合格的模型评价结果。

 二、例题

    题目:利用GM(1,1) 对以下数据进行预测,并对得到的模型进行三种检验。

     利用GM(1,1)进行预测得到对应的结果:

      分别对预测进行上述三种检验:(注:此处的结果与下方代码的输出结果对应)

1.相对残差检验

         此处输出的为相对残差序列,发现相对残差序列都小于0.5%,因此认为模型的精确度高。

         若每个序列都小于0.5%,就不用考虑相对平均误差了,因为当严格检验通过时,较宽泛的检验一定也通过。(因此此题只看严格检验的结果就足够了,下面的较宽泛检验可删去,但是为了让大家可以将这个检验应用到不同的情况,进行了宽泛检验的讲解)。

        当严格检验不通过时,可以考虑较宽泛的检验,从而对模型进行检验(这里的思想类似于假设检验里a的选取,如果对模型的要求高就对其进行严格检验,若要求不是太高,可降低标准,以使模型通过检验。),得到如下结果:

         可以得到相对平均误差为0.0018,小于0.01.因此通过相对残差检验。

2.关联度分析

        得到平均关联系数:

       R大于0.6,因此表明预测序列与原始序列的关联度较强,通过关联度检验。

3.后验差检验 

      得到方差比为1.8879%,小误差概率为100%,根据判断准则发现,C<0.35,同时P>0.95,因此说明模型较好,认为通过后验差检验。 

       综上,三种检验均通过,因此可以使用此模型进行后续的预测与操作。

       以上就是这次分享的内容,后期会陆续更新统计算法、机器学习、R软件等相关内容,感兴趣的小可爱,关注一波~

 

       残差检验、关联度检验、后验差检验matlab代码如下:

CA=abs(XY-X0) ;    %残差数列,X0为原始序列,XY为预测序列
Theta=CA    ;   %残差检验 绝对误差序列
XD_Theta= CA ./ X0  %残差检验 相对误差序列
AV=mean(XD_Theta)      % 残差数列平均值
R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5
R=sum(R_k)/length(R_k)  %关联度
GD=mean(CA); %绝对残差均值
Temp0=(CA-GD).^2 ;
Temp1=sum(Temp0)/length(CA);
S2=sqrt(Temp1) ;    %绝对误差序列的标准差
%----------
AV_0=mean(X0);     % 原始序列平均值
Temp_0=(X0-AV_0).^2 ;
Temp_1=sum(Temp_0)/length(CA);
S1=sqrt(Temp_1)   ;     %原始序列的标准差
TempC=S2/S1*100;      %方差比
C=strcat(num2str(TempC),'%')   %后验差检验  %方差比
%----------
Delta=abs(CA-AV);
SS=0.675*S1 ;
elta=abs(CA-AV) ;
TempN=find(Delta<=SS);
N1=length(TempN);
N2=length(CA);
TempP=N1/N2*100;
P=strcat(num2str(TempP),'%')   %后验差检验    %计算小误差概率


点击全文阅读


本文链接:http://zhangshiyu.com/post/35152.html

检验  序列  误差  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1