灰色关联度分析

cxy1114blog / 2024-10-11 / 原文

灰色关联度分析法(Grey Relation Analysis),就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱。

为此,需要设立母序列, 记为\(x_0\), 与子序列, 记为\(x_{1,2,……}\)

首先,对数据进行处理

正向化(省略)

标准化:\(\frac{x_{ij}}{\frac{1}{n}\sum_{i=1}^nx_{ij}}\)

n 处理好数据后,母序列为

\(x_0 = x_0(1), x_0(2), ……,\) 子序列为\(x_1 = x_1(1), x_1(2), ……, \\x_2 = x_2(1), x_2(2), ……, ……\)

我们首先计算出母子序列最小差\(a = min|x_0(k) −x_i(k)|, ∀i, k ,\)之后再计算一下母子序列最大差\(b = max|x_0(k) −x_i(k)|, ∀i, k.\)

其次,定义\(r(x_0k, x_ik) = \frac{a+ρb}{|x_0k−x_ik|+ρb}, ∀i, k.\)

其中,ρ一般位于[0, 1],往往取0.5. 计算各个序列,也就是指标与系统总体的关联程度。

我们定义 \(r(x_0, x_i) =\frac{ \sum_{i=1}^nr(x_0k,x_ik)}{n}\) , 用它来表达某个指标与系统总体发展的关联度。其实就是上面,求出了指标内部各个元素与母序列对应元素的关联度,把他们求个平均值,就可以看作该指标与系统总体的关联度了。

clear;clc
load gdp.mat  % 导入数据
Mean = mean(gdp);  % 求出每一列的均值以供后续的数据预处理
gdp = gdp ./ repmat(Mean,size(gdp,1),1); 
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))