灰色关联分析同层次分析法和TOPSIS法一样,可以用来进行系统分析的方法。但与其他方法不同的是灰色关联分析对样本数量要求不高,计算量较小,且不会出现量化结果与定性分析结果不符的情况。
灰色关联分析的基本思想是根据序列曲线集合形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之则越小。
第二步:确定分析序列
将这四个序列分为一个母序列和多个子序列。
母序列(参考序列)是能反映系统行为特征的序列。类似于因变量,此处记为 x 0 x_0 x0。
子序列(比较序列)是影响系统行为的因素组成的序列。类似于自变量,此处记为 ( x 1 , x 2 , x 3 , . . . x n ) (x_1,x_2,x_3,...x_n) (x1,x2,x3,...xn)。
在本例中,国内生产总值是母序列,第一二三产业是子序列。
第三步:对变量进行预处理
预处理有两个目的:
预处理的方法:先求出每个指标的均值,再用该指标中的每个元素都除以其均值。
第四步:计算子序列中各个指标与母序列的关联系数
设子序列的个数为 m m m,每个序列有 n n n个样本,则我们的数据可以表示为:
x 0 = ( x 0 ( 1 ) , x 0 ( 2 ) , . . . , x 0 ( n ) ) T x_0=(x_0(1),x_0(2),...,x_0(n))^T x0=(x0(1),x0(2),...,x0(n))T
x 1 = ( x 1 ( 1 ) , x 1 ( 2 ) , . . . , x 1 ( n ) ) T x_1=(x_1(1),x_1(2),...,x_1(n))^T x1=(x1(1),x1(2),...,x1(n))T
x m = ( x m ( 1 ) , x m ( 2 ) , . . . , x m ( n ) ) T x_m=(x_m(1),x_m(2),...,x_m(n))^T xm=(xm(1),xm(2),...,xm(n))T
设 a a a为两极最小差, b b b为两极最大差
a = m i n ( i ) m i n ( k ) ∣ x 0 ( k ) − x i ( k ) ∣ a=min(i)min(k)|x_0(k)-x_i(k)| a=min(i)min(k)∣x0(k)−xi(k)∣
b = m a x ( i ) m a x ( k ) ∣ x 0 ( k ) − x i ( k ) ∣ b=max(i)max(k)|x_0(k)-x_i(k)| b=max(i)max(k)∣x0(k)−xi(k)∣
如图
关联系数 y y y(Gamma值)的公式为:
y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) , x i ( k ) ∣ + ρ b y(x_0(k), x_i(k))=\frac{a+\rho b}{|x_0(k), x_i(k)|+\rho b} y(x0(k),xi(k))=∣x0(k),xi(k)∣+ρba+ρb
其中 ρ \rho ρ为分辨系数,一般取0.5
本例中每个样本的关联系数如图:
第五步:计算各个子序列的灰色关联度
设灰色关联度为 y ( x 0 , x i ) y(x_0,x_i) y(x0,xi),则
y ( x 0 , x i ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) y(x_0,x_i)=\frac{1}{n}\sum_{k=1}^{n}y(x_0(k),x_i(k)) y(x0,xi)=n1k=1∑ny(x0(k),xi(k))
(其实就是每个子序列的关联系数取平均值)
本例:
第一产业灰色关联度为0.5084
第二产业灰色关联度为0.6243
第三产业灰色关联度为0.7573
最后得到结论:灰色关联度最大的子序列即为对系统影响最大的因素
本例第三产业对国内生产总值影响最大
matlab代码示例:
%灰色关联分析
clear;clc
%加载数据,每个序列为一列,母序列在第一列
load gdp.mat
%画图
[n ,m]= size(gdp);
for i = 1:m
plot(gdp(:,i), 'x-');
hold on
end
hold off
xlabel('年份')
ylabel('百万元')
legend({
'国内生产总值','第一产业','第二产业','第三产业'})
%对变量进行预处理
y = gdp(:,1);
x = gdp(:,2:end);
x_norm = zeros(n ,m);
x_sum = 0;
for i = 1:m
x_sum = sum(gdp(:,i));
for j = 1:n
x_norm(j, i) = gdp(j, i) / x_sum * n;
end
x_sum = 0;
end
%计算子序列中各个指标与母序列的关联系数
x_concect = zeros(size(x));
for i = 1: length(x_concect(1,:))
x_concect(:,i) = abs(x_norm(:, 1) - x_norm(:,i+1));
end
a = min(min(x_concect));
b = max(max(x_concect));
%计算灰色关联度(gamma)
rho = 0.5;
gamma = zeros(n, m-1);
for i = 1:m-1
for j = 1:n
gamma(j, i) = (a + rho * b)/(x_concect(j,i) + rho * b);
end
end
ans = mean(gamma);
disp('最终得到的灰色关联度分别是:')
disp(ans)
% % 注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
% % 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭
学习资源和部分图片来自“清风数学建模”