%求出累积贡献率大于85%的主成分
NEW=z*v(:,1:i)%输出产生的新坐标下的数据
W=100*eig1/sum(eig1)
figure(1)
pareto(W);%画出贡献率的直方图
%主成分分析 PAC 的Matlab实现
clc
clear all
A=xlsread("D:\evaluation.xlsx",1,"B2:I16");% 数据的输入及处理
%数据的标准化处理
a=size(A,1);%获得矩阵A的行大小
b=size(A,2);%获得矩阵A的列大小
for i=1:b
SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i));%std函数是用来求向量的标准差
end
% %计算相关系数矩阵的特征值和特征向量
CM=corrcoef(SA);%计算相关系数矩阵
[V,D]=eig(CM);%计算特征值和特征向量
for j=1:b
DS(j,1)=D(b+1-j,b+1-j);%对特征值按降序排列
end
for i=1:b
DS(i,2)=DS(i,1)/sum(DS(:,1));%贡献率
DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累计贡献率
end
% % 选择主成分及对应的特征向量
T=0.9;%主成分信息保留率
for k=1:b
if DS(k,3)>=T
Com_num=k;
break;
end
end
%提取主成分对应的特征向量
for j=1:Com_num
PV(:,j)=V(:,b+1-j);
end
% % 计算各评价对象的主成分得分
new_score=SA*PV;
for i=1:a
total_score(i,1)=sum(new_score(i,:));
total_score(i,2)=i;
end
result_report=[new_score,total_score];%将各主成分得分与总分放在同一个矩阵中
result_report=sortrows(result_report,-4);%按总分降序排序
% % 输出模型及结果报告
disp("特征值及其贡献率,累加贡献率:")
DS
disp("信息保留率T对应的主成分数与特征向量:")
Com_num
PV
disp("主成分得分及排序(按第四列的总分进行排序,前三列为个主成分得分,第五列为企业编号)")
result_report