Programmes scilab
//analyse en composantes principales
function [I,qualie,V,rho] = acp(A,p,q)
//poids normés
p = p / sum(p);
q = q / sum(q);
//barycentre
g = A * p;
//matrice centrée
D = A - ones(1, size(A,'c'));
P = diag(p);
Q = diag(q);
//matrice covariance
K = D * P * D';
//vecteurs propres et valeurs propres
[vect, lams_mat] = spec(sqrt(Q) * K * sqrt(Q));
lams = diag(lams_mat);
//valeurs propres triées
[Lam, perm] = sort(lams);
//inertie
I = sum(Lam) - Lam(1) - Lam(2);
//qualité
qualite = (Lam(1) + Lam(2)) / sum(Lam);
Vect2 = Vect(:,(perm(1:2)));
//la nouvelle base de vecteurs propres
U = sqrt(Q^(-1)) * Vect2;
//les nouveaux caractères
V = U' * Q * D;
n = size(A,'r');
//les cosinus des angles entre les anciens et les nouveaux
caractères
for j = 1:2
for i = 1 : n vjn = sqrt(V(j,:) * P * V(j,:));
dkn = sqrt(D(:,k) * P * D(:,k));
rho(j,k) = (V(j,:) * P * D(k,:))
/ (vjn * dkn);
end
end
enfunction
(********************************************************************)
//analyse factorielle des correspondances
function [X,px,qx,Y,py,qy]=afc(N)
[m,n] = size(N);
//matrice X
for i=1:m
N(i,n+1) = sum(N(i,:));
Y(i,1:n) = N(i,1:n) / N(i,n+1);
end
//matrice Y
for j=1:n
N(m+1,j) = sum(N(:,j));
X(1:m,j) = N(1:m,j) / N(m+1,j);
end
//les poids pour X et Y
N(m+1,n+1) = sum(N(:,n+1));
pxt = N(m+1,1:n)/N(m+1,n+1);
px = pxt';
py = (px)^(-1);
qy = N(1:m,n+1)/N(m+1,n+1);
qx = (qy)^(-1);
endfunction
//ensuite executer acp(X,px,qx) et acp(Y',qy,py)
(********************************************************************)
// on suppose que y et q sont des vecteurs colonnes
//regression
function [alpha, Py, qualite] = regr(y,A,q)
q = q / sum(q);
Q = diag(q);
m = size(A,'r');
A = [ones(m,1),A];
alpha = (A' * Q * A) (A' * Q * y);
Py = A * alpha;
ybar = q' * y;
Pybar = q' * Py;
dpy = Py - Pybar;
dy = y - ybar;
qualite = (dy' * Q * dpy) / (sqrt(dy' * Q * dy) * sqrt(dpy' * Q * dpy));
endfunction