目录

前言

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,那么灰色关联系数的计算公式为

                

灰度关联分析法python 灰色关联度算法_初值

,于是我们得到了灰色关联系数表(

灰度关联分析法python 灰色关联度算法_数据_02

为分辨系数 一般取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)%灰色关联度