分享

灰色系统模型GM(1,1)的R语言实现[转]

 朝闻书斋 2013-12-29

1、建模

##建立灰色模型GM(1,1)对应的函数

##x表示原始数据数列,k表示数据个数

gm11<-function(x,k)

{

n<-length(x)

x1<-numeric(n);

for(i in 1:n)   ##一次累加

{

x1[i]<-sum(x[1:i]);

}

b<-numeric(n)

m<-n-1

for(j in 1:m)

{

b[j+1]<-(0.5*x1[j+1]+0.5*x1[j])   ##紧邻均值生成

}

Yn=t(t(x[2:n]))                   ##构造Yn矩阵

B<-matrix(1,nrow=n-1,ncol=2)      

B[,1]<-t(t(-b[2:n]))              ##构造B矩阵

A<-solve(t(B)%*%B)%*%t(B)%*%Yn;   ##使用最小二乘法求得灰参数a,u

a<-A[1];

u<-A[2];

x2<-numeric(k);

x2[1]<-x[1];

for(i in 1:k-1)

{

x2[1+i]=(x[1]-u/a)*exp(-a*i)+u/a;

}

x2=c(0,x2);

y=diff(x2);                     ##累减生成,获得预测数据数列

y

}


##x1原始数据数列,x2是预测数据数列

x1<-x

x2<-gm11(x,length(x))


##检验模型精度

acc<-function(x1,x2)

{

     n<-length(x1);

     sum1=0;

     for(k in 2:n-1)

     {

            sum1<-sum1+(x1[k]-x1[1]);

     }

     s1<-sum1+0.5*(x1[n]-x1[1]);

     sum2=0;

     for(k in 2:n-1)

     {

            sum2<-sum2+(x2[k]-x2[1]);

     }

     s2<-sum2+0.5*(x2[n]-x2[1]);

     abs1<-abs(s1)

     abs2<-abs(s2)

     abs12<-abs(s1-s2)

     ee<-(1+abs1+abs2)/(1+abs1+abs2+abs12)

     ee

}


2、应用:预测2013年和2014年全国规模以上快递企业收入


##x数列是2008年-2012年全国规模以上快递企业收入数据(来源:国家邮政局,单位:亿元)


> x<-c(408.40,479.00,574.60,758.00,1055.30)   

> gm11(x,7)

[1]  408.4000  443.1355  585.3243  773.1370 1021.2131 1348.8894 1781.7069

> x1<-x

> x2<-gm11(x,length(x))

> acc(x1,x2)

[1] 0.9851449


预测结果:预计2013、2014年全国规模以上快递企业收入分别为1349亿元、1782亿元

灰色绝对关联度为0.9851449,即关联度为一级,预测精度为优

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多