目录
1.简介
2.算法详解
2.1 数据标准化
2.2 计算灰色相关系数
2.3 计算灰色关联度系数
3.实例分析
3.1 读取数据
3.2 数据标准化
3.3 绘制 x1,x4,x5,x6,x7 的折线图
3.4 计算灰色相关系数
完整代码
1.简介
对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。因此,灰色关联分析方法,是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法。
灰色关联分析可以用于衡量因素相关程度的同时,也有论文将其用于综合评价,其原理思想和TOPSIS法是比较相似的。
2.算法详解
2.1 数据标准化
因为每个指标的数量级不一样,需要把它们化到同一个范围内再比较。标准化的方法比较多,这里仅用最大最小值标准化方法。
设标准化后的数据矩阵元素为rij,由上可得指标正向化后数据矩阵元素为 (Xij)'
2.2 计算灰色相关系数
我们常见的灰色相关系数表达式如下:
Xo(k)为参考列,p为分辨系数。它的范围为(0~1),它的作用为控制区分度,它的值越小,区分度越大,它的值越大,区分度越小。 常常取0.5。乍一看这个公式还是有些难懂,接下来详细介绍一下它的原理。
2.3 计算灰色关联度系数
- 参考向量的选择
例如研究x2指标与x1指标之间的灰色关联度。所以将x1列作为参考向量,即要研究与谁的关系,就将谁作为参考。设参考向量为Y1=x1,生成新的数据矩阵 X1=x2.
- 生成绝对值矩阵
设生成的绝对值矩阵为A
A=[X1-Y1],亦是A=[x2-x1]
设dmax为绝对值矩阵A的最大值,dmin为绝对值矩阵A的最小值。
-
计算灰色关联矩阵
设灰色关联矩阵为B
- 计算灰色关联度
3.实例分析
其中指标,x1:货物运输量;x2:港口货物吞吐量;x3:货物周转量;x4:GDP;x5:财政收入x6:城市居民人均可支配收入;x7:农村居民人均净收入。现研究x4-x7指标与x1指标之间的灰色关联度。数据表格如下:
年份 | x1 | x2 | x3 | x4 | x5 | x6 | x7 |
2007 | 22578 | 27569 | 4987 | 2567.7 | 267.98 | 1.5429 | 1.172 |
2008 | 25698 | 29484 | 5048 | 3131 | 348.51 | 1.8546 | 1.2514 |
2009 | 27896 | 31589 | 5129 | 3858.2 | 429.1 | 2.0369 | 1.0254 |
2010 | 29540 | 34894 | 5569 | 4417.7 | 541.29 | 2.2589 | 1.189 |
2011 | 31058 | 36478 | 5783 | 5158.1 | 647.25 | 2.4276 | 1.4213 |
2012 | 35980 | 38695 | 6045 | 6150.1 | 736.45 | 2.5678 | 1.5304 |
2013 | 39483 | 40746 | 6259 | 7002.8 | 850 | 2.8546 | 1.7421 |
3.1 读取数据
data=xlsread('D:\桌面\huiseguanlian.xlsx')
返回:
3.2 数据标准化
%数据标准化
data1=mapminmax(data',0.002,1) %标准化到0.002-1区间
返回:
3.3 绘制 x1,x4,x5,x6,x7 的折线图
figure(1)
t=[2007:2013];
plot(t,data1(:,1),'LineWidth',2)
hold on
for i=1:4plot(t,data1(:,3+i),'--')hold on
end
xlabel('year')
legend('x1','x4','x5','x6','x7')
title('灰色关联分析')
返回:
从图中可以看出,这几个指标的趋势大致相同
3.4 计算灰色相关系数
3.4.1 得到其他列和参考列相等的绝对值
%得到其他列和参考列相等的绝对值
for i=4:7data1(:,i)=abs(data1(:,i)-data1(:,1));
end
3.4.2 得到绝对值矩阵的全局最大值和最小值
%得到绝对值矩阵的全局最大值和最小值
data2=data1(:,4:7);
d_max=max(max(data2));
d_min=min(min(data2));
3.4.3 定义分辨系数
a=0.5
3.4.4 计算灰色关联矩阵
data3=(d_min+a*d_max)./(data2+a*d_max);
xishu=mean(data3);
disp(' x4,x5,x6,x7 与 x1之间的灰色关联度分别为:')
disp(xishu)
返回:
完整代码
clc;clear;
%读取数据
data=xlsread('D:\桌面\huiseguanlian.xlsx');
%数据标准化
data1=mapminmax(data',0.002,1); %标准化到0.002-1区间
data1=data1';
%%绘制 x1,x4,x5,x6,x7 的折线图
figure(1)
t=[2007:2013];
plot(t,data1(:,1),'LineWidth',2)
hold on
for i=1:4plot(t,data1(:,3+i),'--')hold on
end
xlabel('year')
legend('x1','x4','x5','x6','x7')
title('灰色关联分析')%%计算灰色相关系数
%得到其他列和参考列相等的绝对值
for i=4:7data1(:,i)=abs(data1(:,i)-data1(:,1));
end%得到绝对值矩阵的全局最大值和最小值
data2=data1(:,4:7);
d_max=max(max(data2));
d_min=min(min(data2));
%灰色关联矩阵
a=0.5; %分辨系数
data3=(d_min+a*d_max)./(data2+a*d_max);
xishu=mean(data3);
disp(' x4,x5,x6,x7 与 x1之间的灰色关联度分别为:')
disp(xishu)