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)