% ACPCOL.M

% NOTA: Calcula ACP para matrices cuyas variables estan en las columnas
%       Variables creadas por este programa:
%       X m n Xm Xsd Xs j k P d Q D Zs F
%-----------------------------------------------------------------------------

X=xlsread('oa 6897.xls');
[m,n]=size(X);

disp('Estandarizando por columnas ...')
Xm=mean(X);
Xsd=std(X);
for k=1:n;
for j=1:m;
Xs(j,k)=(X(j,k)-Xm(k))/Xsd(k);
end
end

disp('Calculando SDV ...')
[P,d,Q]=svd(Xs);

disp('Calculando D ...')
disp('Los autovalores (D) son:')

D=(d'*d)/(m-1)

disp('Calculando Zs ...')
disp('las CP (Zs) son: ')

Zs=Xs*Q*D^(-.5)

disp('Calculando F ...')
disp('autovectores (F) son:')

F=Q*D^.5

disp('Varianza explicada % (VECP) por cada componente')

Diag=diag(D);
SumaDiag=sum(Diag);
VECP=(Diag/SumaDiag)*100
hold on;
title('Autovectores: 1º rojo, 2º verde y 3º negro')
ylabel('autovectores')
plot(F(:,1),'r')
plot(F(:,2),'g')
plot(F(:,3),'b-')
hold off;

disp('Listo!')