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,即关联度为一级,预测精度为优 |
|