MATLAB 灰度关联分析

灰度关联系数定义

假设定义一组参考数列: x j x_j ,一组待比较数列: x i x_i
则定义关联系数:
ξ j i ( k ) = m i n   m i n x j ( k ) x i ( k ) + ρ   m a x   m a x x j ( k ) x i ( k ) x j ( k ) x i ( k ) + ρ   m a x   m a x x j ( k ) x i ( k ) \xi_{ji}(k)=\frac{min\ min|x_j(k)-x_i(k)|+\rho\ max\ max|x_j(k)-x_i(k)|}{|x_j(k)-x_i(k)|+\rho\ max\ max|x_j(k)-x_i(k)|}

公式说明

  • x j x_j 表示待比较数列矩阵,每一列是一个变量, x i x_i 是目标变量列向量。
  • x j x_j x i x_i 必须进行单位归一化
  • 式中 x j ( k ) x i ( k ) |x_j(k)-x_i(k)| 是一个矩阵, x j x_j 的每一列都减去减去列向量 x i x_i
  • m a x   m a x max\ max m i n   m i n min\ min 分别表示矩阵中的最大值和最小值
  • ρ \rho 是常数,一般在0-1之间,越小分辨率越高
  • 最后化简为一个数除以一个列向量(数组相除),得到的列向量就是灰度关联系数,系数越大表示关联度越大

MATLAB程序

function result = MCM_gray(X,y,ro)

X = zscore(X);
y = zscore(y);
d = ones(size(y));
for i = 1:size(X,2)
    d(:,i) = abs(y-X(:,i));
end
maxnum = max(max(d));
minnum = min(min(d));
ksi = (minnum + ro*maxnum)./(d + ro*maxnum);
result = mean(ksi);

end

实例

  • 运用我们之前逐步回归的数据进行试验。四组变量数据如程序所示,根据逐步回归,简化为只和前两个变量相关,与后两个变量关系不大,我们用灰度看看结果。
x1 = [7 1 11 11 7 11 3 1 2 21 1 11];
x2 = [26 29 56 31 52 55 71 31 54 47 40 66];
x3 = [6 15 8 8 6 9 17 22 18 4 23 9];
x4 = [60 52 20 47 33 22 6 44 22 26 34 12];
y = [78.5 73.4 104.3 87.6 95.9 109.2 102.7 72.5 93.1 115.9 83.9 113.3];

ksi = ones(4,10);
for i = 1:10
    ksi(:,i) = MCM_gray([x1' x2' x3' x4'],y',i*0.1);
end
disp(ksi)

在这里插入图片描述
由数据可知,确实前两个系数比后两个系数大。

猜你喜欢

转载自blog.csdn.net/qq_43575267/article/details/90323800