Section : Statistiques en Scilab
Précédent : Calculs de moments.
Suivant : Calculs sur les lois
Analyse de données
Les fonctionnalités de Scilab en algèbre linéaire facilitent
évidemment les techniques d'analyse descriptive de tableaux de données
comme l'analyse en composantes principales, l'analyse factorielle, l'analyse
discriminante, et autres. A titre d'exemple, nous donnons ci-dessous une
fonction réalisant l'ACP réduite d'un tableau de données. La fonction
affiche la projection des individus et des variables sur le premier
plan principal, et retourne les pourcentages d'inertie expliqués par les
axes principaux. Il est facile de la compléter pour qu'elle affiche la
projection sur d'autres plans, ou de la modifier pour en déduire d'autres
types d'analyses.
function c=ACP_Reduite(echant);
// Affiche les projections des individus et des variables
// sur le premier plan principal de l'ACP reduite.
// Retourne les pourcentages d'inertie expliquee.
// L'entree est une matrice a n lignes (individus)
// et d colonnes (variables).
//
// Calculs de moments
//
moyenne = mean(echant,"r"); // moyennes par variable
ni = size(echant,"r"); // nombre d'individus
nv = size(echant,"c"); // nombre de variables
echred = echant - ones(ni,1)*moyenne; // echantillon centre
mat_cov = (echred'*echred)/ni; // matrice de covariance
ecti = diag((1)./sqrt(diag(mat_cov))); // inverses des ecart-types
echred = echred*ecti; // echantillon reduit
mat_cor = ecti*mat_cov*ecti; // matrice de correlations
//
// Calculs des projections sur les axes principaux
//
[D,U] = bdiag(mat_cor); // diagonalisation
[c,k] = sort(diag(D)); // tri des valeurs propres
c = round((c/sum(c,"r"))*100); // pourcentages d'inertie
axes = U(:,k); // reordonner les axes propres
indiv = echred*axes; // nouvelles coordonnees
//
// Representation graphique plan 1-2
//
e = max(abs(indiv)); // echelle de representation
xset("window",0); xbasc(); // preparation du graphique
xset("font",2,3);
plotframe([-e,-e,e,e],[2,10,2,10],[%f,%f],..
["Projection sur le plan 1-2","1er Axe","2eme Axe"]);
plot2d(indiv(:,1),indiv(:,2),0,"000"); // afficher les individus
cvar = axes([1,2],:); // coordonnees des variables
cvar = cvar.*.[1,0]; // insertion de l'origine
cvar = cvar';
// afficher les variables
plot2d(cvar(:,1),cvar(:,2),5*ones(1,nv),"000")
Voici un exemple d'utilisation (la fonction est dans le fichier
acp.sci).
getf("acp.sci");
M1 = zeros(3,1);
V1 = eye(3,3);
X1 = grand(1000,"mn",M1,V1);
M2 = 3*ones(3,1);
V2 = [1,0.8,0.6;0.8,1,0.2;0.6,0.2,1];
X2 = grand(1000,"mn",M2,V2);
X = [X1';X2'];
inertie = ACP_Reduite(X)
© B. Ycart (2001)