相关性分析
GDP案例
Matlab参考代码实现
clear;clcl
load gdp.mat
Mean=mean(gdp);
gdp=gdp./repmat(Mean,size(gdp),1);
disp('预处理的矩阵为:');
disp(gdp)
Y=gdp(:,1);%母序列
X=gdp(:,2:end);%子序列
absX0_Xi=abs(X-repmax(Y,1,size(X,2)))%|X0-Xi|
a=min(absX0_Xi(:)); %两级最小差
b=max(absX0_Xi(:));%两级最大差
rho=0.5;
gamma=(a+rho*b)./(absX0_Xi+rho*b);%关联系数矩阵
disp('子序列中各个指标的灰色关联度分别为:')
disp(mean(gamma))
综合评价分析
Matlab参考代码实现
%灰色关联分析评价
%第一步:将原始矩阵正向化
[n,m]=size(X);
disp(['共有' num2str(n) '个评价对象,' num2str(m) '个评价指标!'])
Judge=input(['这' num2str(m) '个评价指标是否需要正向化处理,需要输入1,不需要输入0:']);
if(Judge==1)
Position=input('请输入需要正向化的指标所在列,例如第1、2、4三列需要处理,输入[1,2,4]:');
disp('请输入需要正向化处理的这些列的指标类型(1:极小型,2:中间型,3:区间型):');
Type=input('例如第1列是中间型,第2列是区间型,第3列是极小型,输入[2,3,1]:');
for i=1:size(Position,2)
X(:,Position(i))=Positivization(X(:,Position(i)),Position(i),Type(i));
end
end
disp('正向化后矩阵为:')
disp(X);
%第二步:预处理
Mean=mean(X);
Z=X./repmat(Mean,size(X,1),1);
disp('预处理后的矩阵为:');
disp(Z);
%第三步:构造母序列和子序列
X=Z; %虚构的母序列
Y=max(Z,[],2);
%计算得分
absX0_Xi=abs(X-repmat(Y,1,size(X,2)));%|X0-Xi|
a=min(absX0_Xi(:)); %两级最小差
b=max(absX0_Xi(:));%两级最大差
rho=0.5;
gamma=(a+rho*b)./(absX0_Xi+rho*b);%关联系数矩阵
disp('子序列中各个指标的灰色关联度分别为:')
disp(mean(gamma))
weight=mean(gamma)/sum(mean(gamma)); %计算子序列中各指标权重
disp('子序列中各个指标的权重分别为:')
disp(weight)
Score=sum(X.*repmat(weight,size(X,1),1),2);%未归一化的得分
Last_Score=Score/sum(Score);%归一化后的得分
[Sort_Score,index]=sort(Last_Score,'descend')