%Ejemplo PCA

%Datos
X=[0.5 0.5; 0.6 0.7; 0.7 0.6; 0.78 0.77; 0.67 0.54; 0.4 0.9;
0.43 0.98; 0.38 1; 0.42 0.9; 0.7 0.6; 0.75 0.6; 0.85 0.4;0.6 0.9; 0.9 0.8; 1 1; 0.8 1.1;  1.2 0.75 ;1.4 1.2;1.5 1.4;1.5 1; 2 1; 2 1.3; 1.25 1.2
0.8 0.9;1 0.9; 1.2 1; 1.2 1.1;1.4 1.1;1.4 1;1.2 0.9; 1.6 1.2; 0.6 0.8; 0.8 1;0.9 0.95;1.1 0.95;1 0.8;0.5 0.7;0.7 0.85;
1.6 1.1; 1.4 1.3;1.65 1.3; 1.7 1.35]';


%cada columna es un ejemplo (un punto 2D)
N=size(X,2); %numero de ejemplos
M=2; %dimension de cada punto

meanX=mean(X,2); %calculo del punto medio
Xm=X-mean(X,2)*ones(1,N); %centrado de los datos
C=(Xm*Xm')/N; %matriz de covarianzas de los datos
[E1 D1]=eig(C); %calculo de los valores y vectores propios


p1=E1'*Xm; %proyeccion en el eigenespacio

figure(100)
hold on
plot(X(1,:),X(2,:),'ko')   %puntos originales
plot(Xm(1,:),Xm(2,:),'ro')  %puntos centrados
plot(p1(1,:),p1(2,:),'b*') %proyecciones

legend('originales','centrados','decorrelados')

% 2 eje principal (los valores propios van de menor a mayor)
h=plot([0, 0.5*E1(1,1) ],[0 0.5*E1(2,1)],'-r')
    set(h,'LineWidth', 1.5);
h=plot([0, -0.5*E1(1,1) ],[0 -0.5*E1(2,1)],'-r')
    set(h,'LineWidth', 1.5);

% 1 eje principal
h=plot([0, E1(1,2) ],[0 E1(2,2)],'-r')
    set(h,'LineWidth', 1.5);
h=plot([0, -E1(1,2) ],[0 -E1(2,2)],'-r')
    set(h,'LineWidth', 1.5);

    
    
[V D]=eig(p1*p1'); %son los vectores sobre los ejes cartesianos    

h=plot([0, 0.5*V(1,1) ],[0 0.5*V(2,1)],'--b')
    set(h,'LineWidth', 1.5);
h=plot([0, -0.5*V(1,1) ],[0 -0.5*V(2,1)],'--b')
    set(h,'LineWidth', 1.5);

h=plot([0, V(1,2) ],[0 V(2,2)],'--b')
    set(h,'LineWidth', 1.5);
h=plot([0, -V(1,2) ],[0 -V(2,2)],'--b')
    set(h,'LineWidth', 1.5);

    
axis([-1 2.5 -1.5 2])
axis equal
grid



%%