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