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)