原理:
灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线接近,相应序列之间的关联度就越大,反之就越小
在建模中的应用场景
- 用于系统分析:例如分析粮食生产系统,人们总是希望提高粮食总产量,而影响粮食总产量的因素是多方面的,有播种面积以及水利、化肥、土壤、种子、劳力、气候、耕作技术和政策环境等。为实现少投入多产出,并取得良好的经济效益、社会效益和生态效益,就必须进行系统分析
- 用于综合评价:例如根据给出的20条河流的一些指标,根据这些指标来判断哪一条河流的水质更好
一、灰色关联分析用于系统分析
示例:下表为某地区国内生产总值统计数据(单位: 百万元),问该地区从2000年到2005年之间哪一种产业对GDP总量影响最大
具体实现步骤
第一步:根据数据画出统计图
注意:画图后需要配上简单的分析
- 四个变量均呈现上升的趋势
- 第二产业的增幅较为明显
- 第二产业和第三产业的差距在后三年差距更大
第二步:确定分析数列
- 母序列(又称参考数列、母指标):能反映系统行为特征的数据序列,类似于因变量Y,此处即为 x 0 x_0 x0
- 子序列(又称为比较数列、子指标):影响系统行为的因素组成序列,类似于自变量X,此处即为 ( x 1 , x 2 , … , x m ) (x_1,x_2,…,x_m) (x1,x2,…,xm)
在本例当中:国内生产总值就是母序列,第一、第二、第三产业就是子序列
第三步:对变量进行预处理(两个目的:去量纲、缩小变量范围简化计算)
对母序列和子序列中的每一个指标进行预处理:先求出每个指标的均值,在用该指标中的每一个元素都除以其均值
第四步:计算子序列中各指标与母序列的关联系数
定义几个参数:
- 两级最小差
a = min i min k ∣ x 0 ( k ) − x i ( k ) ∣ a=\underset{i}{\min}\underset{k}{\min}\left| x_0\left( k \right) -x_i\left( k \right) \right| a=iminkmin∣x0(k)−xi(k)∣
- 两级最大差
b = max i max k ∣ x 0 ( k ) − x i ( k ) ∣ b=\underset{i}{\max}\underset{k}{\max}\left| x_0\left( k \right) -x_i\left( k \right) \right| b=imaxkmax∣x0(k)−xi(k)∣
- gamma
y ( x 0 ( k ) , x i ( k ) ) ( g a m m a ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b 其中 ρ 为 分辨系数,一 般 取 0.5 i = 1 , 2 , ⋯ , m k = 1 , 2 , ⋯ , n \underset{\left( gamma \right)}{y\left( x_0\left( k \right) ,x_i\left( k \right) \right)}=\frac{a+\rho b}{\left| x_0\left( k \right) -x_i\left( k \right) \right|+\rho b}\,\, \text{其中}\rho 为\text{分辨系数,一}般\text{取}0.5\\i=1,2,\cdots ,m\\k=1,2,\cdots, n (gamma)y(x0(k),xi(k))=∣x0(k)−xi(k)∣+ρba+ρb其中ρ为分辨系数,一般取0.5i=1,2,⋯,mk=1,2,⋯,n
第五步:定义灰色关联度
y
(
x
0
,
x
i
)
=
1
n
∑
k
=
1
n
y
(
x
0
(
k
)
,
x
i
(
k
)
)
为
x
0
和
x
i
的灰色关联度
y\left( x_0,x_i \right) =\frac{1}{n}\sum_{k=1}^n{y\left( x_0\left( k \right) ,x_i\left( k \right) \right) 为}x_0\text{和}x_i\text{的灰色关联度}
y(x0,xi)=n1k=1∑ny(x0(k),xi(k))为x0和xi的灰色关联度
第六步:通过比较三个子序列和母序列的关联度得出系统分析的结论
该地区在2000年至2005年间的国内生产总值受到第三产业的影响最大(其灰色关联度最大)
讨论
- 什么时候用标准化回归,什么时候用灰色关联分析?
答:当样本的个数n较大时,一般使用标准化回归;当样本个数n较少时,才使用灰色关联分析
- 如果母序列中有多个指标,应该怎样进行分析?
回答:例如, Y 1 , Y 2 Y_1,Y_2 Y1,Y2是母序列, X 1 , X 2 , … X m X_1,X_2,…X_m X1,X2,…Xm是子序列,那么可以首先计算 Y 1 Y_1 Y1和 X 1 , X 2 , … X m X_1,X_2,…X_m X1,X2,…Xm的灰色关联度进行分析;在计算计算 Y 1 Y_1 Y1和 X 1 , X 2 , … X m X_1,X_2,…X_m X1,X2,…Xm的灰色关联度进行分析
系统分析实现代码:
%% 灰色关联分析用于系统分析例题的讲解
clear;clc
load gdp.mat % 导入数据 一个6*4的矩阵
% 不会导入数据的同学可以看看第二讲topsis模型,我们也可以自己在工作区新建变量,并把Excel的数据粘贴过来
% 注意Matlab的当前文件夹一定要切换到有数据文件的这个文件夹内
Mean = mean(gdp); % 求出每一列的均值以供后续的数据预处理
gdp = gdp ./ repmat(Mean,size(gdp,1),1); %size(gdp,1)=6, repmat(Mean,6,1)可以将矩阵进行复制,复制为和gdp同等大小,然后使用点除(对应元素相除),这些在第一讲层次分析法都讲过
disp('预处理后的矩阵为:'); disp(gdp)
Y = gdp(:,1); % 母序列
X = gdp(:,2:end); % 子序列
absX0_Xi = abs(X - repmat(Y,1,size(X,2))) % 计算|X0-Xi|矩阵(在这里我们把X0定义为了Y)
a = min(min(absX0_Xi)) % 计算两级最小差a
b = max(max(absX0_Xi)) % 计算两级最大差b
rho = 0.5; % 分辨系数取0.5
gamma = (a+rho*b) ./ (absX0_Xi + rho*b) % 计算子序列中各个指标与母序列的关联系数
disp('子序列中各个指标的灰色关联度分别为:')
disp(mean(gamma))
二、灰色关联分析用于综合评价问题
题目:评价下表中20条河流的水质情况
注意:含氧量越高越好;PH值越接近7越好;细菌总数越少越好;植物性营养物量介于10~20之间最佳,超过20或低于10均不好
具体实现算法:
第一步:对各项指标进行正向化
第二步:对正向化后的矩阵进行预处理,得到矩阵 Z n × m = ( Z i j ) n × m Z_{n\times m}=\left( Z_{ij} \right) _{n\times m} Zn×m=(Zij)n×m
第三步:将预处理后的矩阵的每一行取出最大值构成母序列(虚构的)
第四步:计算各个指标与母序列的灰色关联度: r 1 , r 2 , r 3 , … , r m r_1,r_2,r_3,…,r_m r1,r2,r3,…,rm
第五步:计算各个指标的权重:
w
1
=
r
1
/
(
r
1
+
r
2
+
⋯
+
r
m
)
、
w
2
=
r
2
/
(
r
1
+
r
2
+
⋯
+
r
m
)
、
⋯
、
w
m
=
r
m
/
(
r
1
+
r
2
+
⋯
+
r
m
)
w_1=r_1/\left( r_1+r_2+\cdots +r_m \right) \text{、}w_2=r_2/\left( r_1+r_2+\cdots +r_m \right) \text{、}\cdots \text{、}w_m=r_m/\left( r_1+r_2+\cdots +r_m \right)
w1=r1/(r1+r2+⋯+rm)、w2=r2/(r1+r2+⋯+rm)、⋯、wm=rm/(r1+r2+⋯+rm)
第六步:计算第
k
k
k个评价对象的得分:
S
k
=
∑
i
=
1
m
z
k
i
⋅
w
i
(
k
=
1
,
2
,
⋯
,
n
)
S_k=\sum_{i=1}^m{z_{ki}\cdot w_i\,\, \left( k=1,2,\cdots ,n \right)}
Sk=i=1∑mzki⋅wi(k=1,2,⋯,n)
第七步:对得分进行归一化处理:
S
1
′
=
S
1
/
(
S
1
+
S
2
+
⋯
+
S
n
)
、
S
2
′
=
S
2
/
(
S
1
+
S
2
+
⋯
+
S
n
)
、
⋯
、
S
n
′
=
S
n
/
(
S
1
+
S
2
+
⋯
+
S
n
)
S_{1}^{'}=S_1/\left( S_1+S_2+\cdots +S_n \right) \text{、}S_{2}^{'}=S_2/\left( S_1+S_2+\cdots +S_n \right) \text{、}\cdots \text{、}S_{n}^{'}=S_n/\left( S_1+S_2+\cdots +S_n \right)
S1′=S1/(S1+S2+⋯+Sn)、S2′=S2/(S1+S2+⋯+Sn)、⋯、Sn′=Sn/(S1+S2+⋯+Sn)