找了十家公司的财务报表,从中选取了十个财务指标进行PCA分析。数据如下:
matlab代码如下:
clear;
clc;
%%导入数据
A = xlsread('D:/matlab_script/十家公司.xlsx','C2:L11');
%%数据标准化
a = size(A,1); %行数
b = size(A,2); %列数
for i = 1:b
SA(:,i) = (A(:,i)-mean(A(:,i)))/std(A(:,i));
end
%%计算协方差矩阵的特征值和特征向量
CM = corrcoef(SA); %计算协方差矩阵
[V,D] = eig(CM); %计算特征值(D)和特征向量(V)
%计算出来的特征值是按升序排序的
for j = 1:b
DS(j,1) = D(b+1-j,b+1-j); %按降序排序
end
s = sum(DS(:,1));
for i = 1:b
DS(i,2) = DS(i,1)/s; %贡献率
DS(i,3) = sum(DS(1:i,1))/s; %累积贡献率
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
%% 输出模型结果
disp('特征值及其贡献率、累计贡献率:')
DS
disp('信息保留率T对应的主成分与特征向量:')
Com_num
PV
小白自学!主要想记录自己写的代码,如有错误或其他方法请大佬指出。