灰色系统分析方法在建模中的应用:相关性问题、预测问题
1)灰色关联分析;2)灰色预测:人口、灾变...等;3)灰色决策;4)灰色预测
灰色系统:系统内一部分信息已知,另一部分未知,系统内各因素间有不确定关系。
灰色预测法:对一种含有不确定因素(在一定范围内变化的、与时间有关的灰色过程)的系统进行预测的方法。
灰色系统通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并可对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列(等时距),然后建立相应的微分方程模型,从而预测事务未来发展趋势的状况。
一、灰色预测的四种常见类型
1)灰色时间序列预测
2)畸变预测(异常值的预测:如 异常气候等)
通过灰色模型预测异常值出现的时刻,预测异常值什么时候出现特定时区内。
3)系统预测
对系统行为特征指标建立一组相互关联的灰色预测模型,预测系统中众多变量间的相互协调关系的变化。
4)拓扑预测
二、灰色关联度与优势分析
2.1灰色关联度
sign:符号函数(y=sign(x): x<0,y=-1;x=0,y=0;x>0,y=1 )
2.2案例分析 (注意统一量纲)
三、灰色生成数列
四、灰色模型GM(1,1)
GM(1,1)灰色预测步骤:
经检验,原始数据列满足 级比检验
计算实例:
级比偏差均小于0.2,因此精度可以
案例:SARS疫情对某些经济指标影响
表一:商品零售额(亿元)
表二:接待海外旅游人数(万人)
表三:综合服务业累计数据(亿元)
模型的分析与假设
提出假设:
建立灰色预测模型GM(1,1)
模型求解
代码计算每个表(以表1为例)
clc,clear
% 表一数据(表2,3同理)
han1=[83.0 79.8 78.1 85.1 86.6 88.2 90.3 86.7 93.3 92.5 90.9 96.9
101.7 85.1 87.8 91.6 93.4 94.5 97.4 99.5 104.2 102.3 101.0 123.5
92.2 114.0 93.3 101.0 103.5 105.2 109.5 109.2 109.6 111.2 121.7 131.3
105.0 125.7 106.6 116.0 117.6 118.0 121.7 118.7 120.2 127.8 121.8 121.9
139.3 129.5 122.5 124.5 135.7 130.8 138.7 133.7 136.8 138.9 129.6 133.7
137.5 135.3 133.0 133.4 142.8 141.6 142.9 147.3 159.6 162.1 153.5 155.9
163.2 159.7 158.4 145.2 124.0 144.1 157.0 162.6 171.8 180.7 173.5 176.5];
han1(end,:)=[];%相当于 han1=han1(1:6,:);
m=size(han1,2);%把月份提取出来,12个月
x0=mean(han1,2);%返回每行的平均值
x1=cumsum(x0);%一次累加
alpha=0.4;
n=length(x0);%长度,数据的维度,n=6
z1=alpha*x1(2:n)+(1-alpha)*x1(1:n-1)%求邻域生成数
Y=x0(2:n);
B=[-z1,ones(n-1,1)];
ab=B\Y%求出a,b
k=6;%已知6年
x7hat=(x0(1)-ab(2)/ab(1))*(exp(-ab(1)*k)-exp(-ab(1)*(k-1)))%预测结果
z=m*x7hat %预测03年12个月总值
u=sum(han1)/sum(sum(han1)) %03年每月占全年的比例
v=z*u %03年每个月的预测值
模型结果分析:
灰色关联性分析代码:
%灰色关联分析步骤
%【1】确定比较对象(评价对象)(就是数据,并且需要进行规范化处理,就是标准化处理,见下面例题的表格数据)和参考数列(评价标准,一般该列数列都是1,就是最优的的情况)
%【2】确定各个指标权重,可用层次分析确定
%【3】计算灰色关联系数
%【4】计算灰色加权关联度
%【5】评价分析
clear,clc
x1=[1.14 1.49 1.69 2.12 2.43 4.32 5.92 6.07 7.85;
3.30 3.47 3.61 3.80 4.00 4.19 4.42 4.61 4.80;
6.00 6.00 6.00 7.50 7.50 7.50 9.00 9.00 9.00;
1.20 1.20 1.80 1.80 1.80 2.40 2.70 3.60 4.00;
4.87 5.89 6.76 7.97 8.84 10.05 11.31 12.25 11.64];%原始数据5行9列
x=x1;
n=length(x1)%列(指标数)
for i=1:5
for j=1:9
x(i,j)=x(i,j)/x1(1,j);
end
end
x1=x;
for i=1:5
for j=1:9
x(i,j)=abs(x(i,j)-x1(i,1));
end
end
max=x(1,1);
min=x(1,1);
for i=1:5
for j=1:9
if x(i,j)>=max
max=x(i,j)
end
end
end
for i=1:5
for j=1:9
if x(i,j)<=min
min=x(i,j)
end
end
end
k=0.5 ;%分辨系数取值
l=(min+k*max)./(x+k*max)%求关联系数矩阵
guanliandu=sum(l')/n
[rs,rind]=sort(guanliandu,'descend') %对关联度进行排序
灰色预测代码:
%灰色预测步骤
%(1)输入前期的小样本数据
%(2)输入预测个数
%(3)运行
clear,clc
y=input('请输入数据:'); %例如输入[1,3,5,7,9,10,12]
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
yy(i)=yy(i-1)+y(i)
end
B=ones(n-1,2);
for i=1:(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2;
B(i,2)=1;
end
BT=B';
for j=1:(n-1)
YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
t=u/a;
t_test=input('输入需要预测的个数:');
i=1:t_test+n;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+t_test:-1:2
ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+t_test;
yn=ys(2:n+t_test);
plot(x,y,'^r',xs,yn,'*-b');
det=0;
for i=2:n
det=det+abs(yn(i)-y(i));
end
det=det/(n-1);
disp(['百分绝对误差为:',num2str(det),'%']);
disp(['预测值为:',num2str(ys(n+1:n+t_test))]);