当前位置:   article > 正文

灰色关联法 —— matlab_灰色关联分析法matlab

灰色关联分析法matlab

目录

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指标之间的灰色关联度。数据表格如下:

年份x1x2x3x4x5x6x7
2007225782756949872567.7267.981.54291.172
2008256982948450483131348.511.85461.2514
2009278963158951293858.2429.12.03691.0254
2010295403489455694417.7541.292.25891.189
2011310583647857835158.1647.252.42761.4213
2012359803869560456150.1736.452.56781.5304
2013394834074662597002.88502.85461.7421

3.1 读取数据

data=xlsread('D:\桌面\huiseguanlian.xlsx')

返回:

3.2 数据标准化

  1. %数据标准化
  2. data1=mapminmax(data',0.002,1) %标准化到0.002-1区间

 返回:

3.3 绘制 x1,x4,x5,x6,x7 的折线图

  1. figure(1)
  2. t=[2007:2013];
  3. plot(t,data1(:,1),'LineWidth',2)
  4. hold on
  5. for i=1:4
  6. plot(t,data1(:,3+i),'--')
  7. hold on
  8. end
  9. xlabel('year')
  10. legend('x1','x4','x5','x6','x7')
  11. title('灰色关联分析')

返回:

从图中可以看出,这几个指标的趋势大致相同

3.4 计算灰色相关系数

3.4.1 得到其他列和参考列相等的绝对值

  1. %得到其他列和参考列相等的绝对值
  2. for i=4:7
  3. data1(:,i)=abs(data1(:,i)-data1(:,1));
  4. end

3.4.2 得到绝对值矩阵的全局最大值和最小值

  1. %得到绝对值矩阵的全局最大值和最小值
  2. data2=data1(:,4:7);
  3. d_max=max(max(data2));
  4. d_min=min(min(data2));

3.4.3 定义分辨系数

a=0.5

3.4.4 计算灰色关联矩阵

  1. data3=(d_min+a*d_max)./(data2+a*d_max);
  2. xishu=mean(data3);
  3. disp(' x4,x5,x6,x7 与 x1之间的灰色关联度分别为:')
  4. disp(xishu)

返回:

完整代码

  1. clc;clear;
  2. %读取数据
  3. data=xlsread('D:\桌面\huiseguanlian.xlsx');
  4. %数据标准化
  5. data1=mapminmax(data',0.002,1); %标准化到0.002-1区间
  6. data1=data1';
  7. %%绘制 x1,x4,x5,x6,x7 的折线图
  8. figure(1)
  9. t=[2007:2013];
  10. plot(t,data1(:,1),'LineWidth',2)
  11. hold on
  12. for i=1:4
  13. plot(t,data1(:,3+i),'--')
  14. hold on
  15. end
  16. xlabel('year')
  17. legend('x1','x4','x5','x6','x7')
  18. title('灰色关联分析')
  19. %%计算灰色相关系数
  20. %得到其他列和参考列相等的绝对值
  21. for i=4:7
  22. data1(:,i)=abs(data1(:,i)-data1(:,1));
  23. end
  24. %得到绝对值矩阵的全局最大值和最小值
  25. data2=data1(:,4:7);
  26. d_max=max(max(data2));
  27. d_min=min(min(data2));
  28. %灰色关联矩阵
  29. a=0.5; %分辨系数
  30. data3=(d_min+a*d_max)./(data2+a*d_max);
  31. xishu=mean(data3);
  32. disp(' x4,x5,x6,x7 与 x1之间的灰色关联度分别为:')
  33. disp(xishu)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/270506
推荐阅读
相关标签
  

闽ICP备14008679号