前面小编已经详细介绍了灰色GM(1,1)预测模型的推导,并且运用模型解决了几个问题。今天,小编看到国家统计局发布的近年来的江苏省人均生产总值数据,那么我们就利用这个数据再次练习一下灰色预测模型。
题目:由国家统计局网站得到2012年-2018年江苏省人均生成总值如下表所示
由于年份数据较少,在这里我们采用2012-2018年数据作为原始序列建模,以此来预测其他年份的江苏省人均生产总值。
解答
第一步:级比检验
为了保证GM(1,1)模型的可行性,需要对已知数据做必要的检验处理。建立江苏省人均生产总值的时间序列如下
-
求级比
当k=2,3,...,7时,求得
所有的λ(k)∈[0.906616,0.926752].
-
级比判断
n=7 ,计算
扫描二维码关注公众号,回复:
14748760 查看本文章
由于
故可以用x(0)做满意的GM(1,1)建模。
x0=[66533 72768 78711 85871 92658 102202 110508];
n=length(x0);
lamda=x0(1:n-1)./x0(2:n)
range=minmax(lamda)
第二步:GM(1,1)建模
对原始序列做一次累加,得到=(66533,139301,218012,303883,396541,498743,609251)。
构造数据矩阵B,及数据向量Y
求得
计算
x1=cumsum(x0)
for i=2:n
z(i)=0.5*(x1(i)+x1(i-1));
end
B=[-z(2:n)',ones(n-1,1)];
Y=x0(2:n)';
u=B\Y
第三步:求解模型
得到2012-2022年江苏省人均生产总值的预测结果
F=[];F(1)=x0(1);
for i=2:10
F(i)=(x0(1)-u(2)/u(1))/exp(u(1)*(i-1))+u(2)/u(1);
end
F=[x0(1),diff(F)]
第四步:模型检验
计算残差、相对误差、级比偏差,结果如下表
相对误差又一些偏大,但是级比偏差一直很小,所以该模型精度较高,可以进行预测和预报。
如下图所示
M=F(1:7)
epsilon=x0-M %计算残差
delta=abs(epsilon./x0) %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda %计算级比偏差值
%作图
t1=2012:2018;
t2=2012:2021;
plot(t1,x0,'r*');
hold on;
plot(t2,F(1:10),'g-');
hold on;
y=ones(1,length(t2))*435;
plot(t2,y,'black');
xlabel('年份');
ylabel('江苏省人均生产总值');
legend('实际值','预测值','阈值=435mm');
title('江苏省人均生产总值变化');
grid on;
附录:全部代码
x0=[66533 72768 78711 85871 92658 102202 110508];
n=length(x0);
lamda=x0(1:n-1)./x0(2:n)
range=minmax(lamda)
x1=cumsum(x0)
for i=2:n
z(i)=0.5*(x1(i)+x1(i-1));
end
B=[-z(2:n)',ones(n-1,1)];
Y=x0(2:n)';
u=B\Y
F=[];F(1)=x0(1);
for i=2:10
F(i)=(x0(1)-u(2)/u(1))/exp(u(1)*(i-1))+u(2)/u(1);
end
F=[x0(1),diff(F)]
M=F(1:7)
epsilon=x0-M %计算残差
delta=abs(epsilon./x0) %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda %计算级比偏差值
%作图
t1=2012:2018;
t2=2012:2021;
plot(t1,x0,'r*');
hold on;
plot(t2,F(1:10),'g-');
hold on;
y=ones(1,length(t2))*435;
plot(t2,y,'black');
xlabel('年份');
ylabel('江苏省人均生产总值');
legend('实际值','预测值','阈值=435mm');
title('江苏省人均生产总值变化');
grid on;