目录
前言
1.确定母序列和子序列
2.数据归一化
1)初值化
2)均值化
3.计算绝对值差
4.计算灰色关联系数
PS:均值化数据演示
代码实现
前言
灰色关联度分析(Grey Relation Analysis,GRA)是一种多因素统计分析的办法,通俗来说,通过此算法,我们可以得到某个项目受其他因素影响的强弱,比如国内生产总值受到第一产业、第二产业、第三产业的影响,这三种产业对国内生产总值的影响分别有多大?这就是我们要讨论的问题,也是灰色关联度分析能解决的问题。
下面的讨论我们以下表的数据作为演示(数据仅供学习 不保证其真实性合理性)
表1 灾害直接经济损失及各相关影响因素原始表
年份 | 灾害直接经济损失(亿元) | 农作物成灾面积(千公顷) | 地震灾害损失(亿元) | 海洋灾害损失(亿元) | 森林火灾损失(亿元) | 泥石流损失(亿元) |
2000 | 2045.3 | 34374 | 14.6792 | 120.9 | 0.3069 | 49.4201 |
2001 | 1942.2 | 31793 | 14.8449 | 100.1 | 0.7409 | 34.8699 |
2002 | 1637.2 | 27319 | 1.4774 | 65.9 | 0.361 | 50.974 |
2003 | 1884.2 | 32516 | 46.604 | 80.52 | 3.7 | 50.4325 |
2004 | 1602.3 | 16279 | 9.4959 | 54.22 | 2.0213 | 40.8828 |
灰色关联度分析大致分为四步
1.确定母序列和子序列
灾害直接经济损失就是母序列。
农作物成灾面积、地震灾害损失、海洋灾害损失、森林火灾损失、泥石流损失就是子序列。
2.数据归一化
归一化即去量纲,由于量纲不同,指标数值可能有大有小,如果不做处理大的数据必定淹没小数据的变量的影响,因此要减少数据的绝对数值的差异,统一到近似的范围内,这就是数据归一化。
归一化主要有两种方式,分别是初值化和均值化
1)初值化
简单来说,是用每个指标的数据除以最初的值。显然表1中的最初数据就是2000年的值[2045.3 , 34374 , 14.6792 , 120.9 , 0.3069 , 49.4201]
处理完后的数据如下(保留了四位小数)
表2.1 初值化后的数据
年份 | 灾害直接经济损失(亿元) | 农作物成灾面积(千公顷) | 地震灾害损失(亿元) | 海洋灾害损失(亿元) | 森林火灾损失(亿元) | 泥石流损失(亿元) |
2000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 |
2001 | 0.9496 | 0.9249 | 1.0113 | 0.8280 | 2.4141 | 0.7056 |
2002 | 0.8005 | 0.7948 | 0.1006 | 0.5451 | 1.1763 | 1.0314 |
2003 | 0.9212 | 0.9460 | 3.1748 | 0.6660 | 12.0560 | 1.0205 |
2004 | 0.7834 | 0.4736 | 0.6469 | 0.4485 | 6.5862 | 0.8273 |
2)均值化
均值化是先算出母系列和各个子序列的平均值,然后每个指标的数据除以对应列的平均值。均值化的例子放在最后!!!
3.计算绝对值差
这一步计算被评价指标序列与参考序列对应元素的绝对值差,参考序列一般是数据归一化后的母序列,即[1.00 , 0.95 , 0.80 , 0.92 , 0.78],具体的操作为假如有m列,后m-1列都对应减去第一列,然后取绝对值,得到m-1列的表格。
表3.1 绝对值差
0 | 0 | 0 | 0 | 0 |
0.0247 | 0.0617 | 0.1216 | 1.4645 | 0.2440 |
0.0057 | 0.6998 | 0.2554 | 0.3758 | 0.2310 |
0.0247 | 2.2536 | 0.2552 | 11.1348 | 0.0993 |
0.3093 | 0.1365 | 0.3349 | 5.8028 | 0.0438 |
a=0和最大值b=11.1348
4.计算灰色关联系数
对于表3的每一个数据,我们统称这个数为x,那么灰色关联系数的计算公式为
,于是我们得到了灰色关联系数表(
为分辨系数 一般取0.5)。
表4.1 灰色关联系数表
1 | 1 | 1 | 1 | 1 |
0.9956 | 0.9890 | 0.9786 | 0.7917 | 0.9580 |
0.9990 | 0.8883 | 0.9561 | 0.9368 | 0.9602 |
0.9956 | 0.7119 | 0.9562 | 0.3333 | 0.9825 |
0.9473 | 0.9761 | 0.9433 | 0.4896 | 0.9922 |
随后对每一列取平均值,就是该列影响因素与灾害直接经济损失的关联度
表5.1 灾害直接经济损失与各相关因素的关联度
农作物成灾面积 | 地震灾害损失 | 海洋灾害损失 | 森林灾害损失 | 泥石流损失 |
0.9875 | 0.9131 | 0.9668 | 0.7103 | 0.9786 |
PS:均值化数据演示
表1 灾害直接经济损失及各相关影响因素原始表
年份 | 灾害直接经济损失(亿元) | 农作物成灾面积(千公顷) | 地震灾害损失(亿元) | 海洋灾害损失(亿元) | 森林火灾损失(亿元) | 泥石流损失(亿元) |
2000 | 2045.3 | 34374 | 14.6792 | 120.9 | 0.3069 | 49.4201 |
2001 | 1942.2 | 31793 | 14.8449 | 100.1 | 0.7409 | 34.8699 |
2002 | 1637.2 | 27319 | 1.4774 | 65.9 | 0.361 | 50.974 |
2003 | 1884.2 | 32516 | 46.604 | 80.52 | 3.7 | 50.4325 |
2004 | 1602.3 | 16279 | 9.4959 | 54.22 | 2.0213 | 40.8828 |
对每一列取均值 得到 [1822.24 , 28456 , 17.42028 , 84.328 , 1.42602 , 45.31586 ]
表2.2 均值化后的数据
年份 | 灾害直接经济损失(亿元) | 农作物成灾面积(千公顷) | 地震灾害损失(亿元) | 海洋灾害损失(亿元) | 森林火灾损失(亿元) | 泥石流损失(亿元) |
2000 | 1.1224 | 1.2079 | 0.8427 | 1.4337 | 0.2152 | 1.0906 |
2001 | 1.0658 | 1.1173 | 0.8522 | 1.1870 | 0.5196 | 0.7695 |
2002 | 0.8985 | 0.9600 | 0.0848 | 0.7815 | 0.2532 | 1.1249 |
2003 | 1.0340 | 1.1427 | 2.6753 | 0.9548 | 2.5946 | 1.1129 |
2004 | 0.8793 | 0.5721 | 0.5451 | 0.6430 | 1.4174 | 0.9022 |
表3.2 绝对值差
0.0855 | 0.2798 | 0.3113 | 0.9072 | 0.0318 |
0.0514 | 0.2137 | 0.1212 | 0.5463 | 0.2963 |
0.0616 | 0.8136 | 0.1170 | 0.6453 | 0.2264 |
0.1087 | 1.6413 | 0.0792 | 1.5606 | 0.0789 |
0.3072 | 0.3342 | 0.2363 | 0.5381 | 0.0229 |
表4.2 灰色关联系数表
0.9309 | 0.7665 | 0.7452 | 0.4882 | 0.9895 |
0.9672 | 0.8155 | 0.8956 | 0.6171 | 0.7552 |
0.9561 | 0.5161 | 0.8996 | 0.5754 | 0.8056 |
0.9077 | 0.3426 | 0.9374 | 0.3542 | 0.9377 |
0.7479 | 0.7304 | 0.7980 | 0.6208 | 1.0000 |
表5.2 灾害直接经济损失与各相关因素的关联度
农作物成灾面积 | 地震灾害损失 | 海洋灾害损失 | 森林灾害损失 | 泥石流损失 |
0.9020 | 0.6343 | 0.8552 | 0.5311 | 0.8976 |
代码实现
%灰色关联度分析
%以旅游收入为例 一共6行4列 行数代表2000-2005年 列数表示 国内生产总值 第一产业 第二产业 第三产业
%最终得到的结果代表三产业对国内生产总值的关联度
clear;clc;
load 灰色关联度分析-灾害直接经济损失.mat
[n,m]=size(X);
%初值化例子 灾害直接经济损失
%均值化例子 国内生产总值
%初值化和均值化选择一个就可以
%均值化
aveg=mean(X);%取每一列的平均值
for j=1:m
update_x(:,j)=X(:,j)./aveg(:,j);%每一列的数据除以这一列的平均值
end
%初值化
% for j=1:m
% update_x(:,j)=X(:,j)./X(1,j);%每一列的数据除以这一列的初始值
% end
for i=1:n
for j=2:m
temp_x(i,j-1)=abs(update_x(i,j)-update_x(i,1));%update_x第一列与后面几列的差值的绝对值
end
end
a=min(min(temp_x));%temp_x矩阵里的最小值
b=max(max(temp_x));%temp_x矩阵里的最大值
p=0.5;%分辨系数 一般是0.5
XX=(a+p*b)./(temp_x+p*b);
R=mean(XX,1)%灰色关联度