📄 anacor.m
字号:
%%%%%%% correspondence analysis(ANACOR) %%%%%%%%%%%%%%%%%%%%%
% X为原始数据 p X n维 即有n个样本,每个样本由p个变量来描述。返回F为R型因子分析后的结果,Q为最后的结果,A=ZZ'。
%function [G,F,A]=ANACOR(X)
function [G,F]=ANACOR(X)
%为了确保表示的向量大小与表示样本的向量大小有同样的意义,对原始数据进行处理
T=sum(sum(X));
Xi=sum(X'); %% 对行求和,即:变量的边缘概率
Xj=sum(X); %% 对列求和,即:样本的边缘概率
%%% 计算矩阵Z=(zij)
Z=(X-(Xi'*Xj/T))./sqrt(Xi'*Xj);
A=Z*Z';
%%%% 求特征值和特征向量,A为输入方阵,D为由A的全部特征值构成的对角矩阵,V的各列为对应于特征值的特征向量构成的矩阵
%[V,D]=eig(A);
D=eig(A,'nobalance');
% 特征值降序排列,并求累积量>=85%
b=sort(D);
D=b(end:-1:1);
d=sum(D);
D1=D/d;
i=1;
D2=D1(1);
while D2<=0.95
i=i+1;
D2=D2+D1(i);
end
%求前i项特征值对应的特征向量
option = struct('disp',0);
[eigvector, eigvalue] = eigs(A,i,'la',option); %'LA' or 'SA' - Largest or Smallest Algebraic
%%% R型因子分析
U=eigvector; %%修正后的特征值对应的特征向量,p X i维, i为使累积量>=85%的特征值数量
[m,n]=size(U);
U1=zeros(m,n);
E=D(1:i); %%修正后的特征值, 在此为行向量
for x=1:i
U1(:,x)=U(:,x)*sqrt(E(x));
end
%%% 求载荷矩阵 F
F=U1;
%[m,n]=size(F);
%% plot(F,'r*');
%% 画图
%for i=1:m
% plot(F(i,1),F(i,2),'r*');
% hold on;
%end
%%%求Q型因子分析
%B=Z'*Z;
V=Z'*U;
[m,n]=size(V);
V1=zeros(m,n);
E=D(1:i); %%修正后的特征值, 在此为行向量
for x=1:i
V1(:,x)=V(:,x)*sqrt(E(x));
end
G=V1;
%% 画图
[m,n]=size(F);
for i=1:m
plot(F(i,1),F(i,2),'r*');
hold on;
end
hold on
[x,y]=size(G);
for i=1:x
plot(G(i,1),G(i,2),'bo');
hold on;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -