ACP SOUS SAS
La procédure d’ACP sous SAS (proc princomp) est assez sommaire : elle ne trace pas les graphiques, ne fournit rien en ce qui concerne les individus (coordonnées, contributions, qualité de représentation) et ne permet pas la mise en supplémentaire d’individus ou de variables. On doit avoir recours à la programmation si l’on veut intégrer ces possibilités. Nous présentons ici le programme de base, ainsi que quelques compléments, permettant de compléter les résultats.
0) Quelques rappels de base pour la programmation sous SAS
Syntaxe
SAS ne différencie pas les majuscules des minuscules.
On appelle instruction une ligne de programme. Chaque instruction doit être séparée d’un point-virgule.
les noms des variables et des tables SAS ne doivent pas contenir plus de 8 caractères. Seules les lettres et le caractère _ peuvent être incluses dans ces noms.
Les commentaires éventuels se mettent à l’intérieur de /* */
Construction d’une table SAS A partir d’une table SAS d’origine
On veut construire une table SAS, qui l’on appelle A, à partir d’une autre table SAS appelée B : DATA A ; (crée A)
SET B ; (va chercher B)
Instructions permettant d’obtenir la table A à partir de B (création de variables, suppression d’individus….) ; RUN ; (lance le programme)
A partir d’une liste :
On veut créer une table SAS, que l’on appelle A, à partir de plusieurs colonne de valeurs, chaque colonne représentant une variable (les variables seront appelées var1-varn)
DATA A ; (crée A)
INPUT var1 var 2…….varn ; (rentre les champs des variables) (*)
CARDS; (fait un tableau)
Valeurs en colonne, la colonne j représentant les valeurs de la variable varj
;
RUN ; (lance le programme)
(*) : Si une des variables est de type caractère (par exemple var1), on devra faire succéder son nom d’un $ : input var1 $ var 2…varn;
1) Programme de base :
La procédure d’ACP est la suivante :
PROC PRINCOMP DATA= A OUT= B OUTSTAT= C N = nombre COV VARDEF = nombre ; VAR liste des variables quantitatives étudiées ;
WEIGHT variable ; RUN ;
N.B. souligné = facultatif
PRINCOMP signifie PRINCIPAL COMPONENTS ( = composantes principales ) A = Nom donné à la table SAS contenant les données (créée par l’étape 0)).
B = Nom de la table SAS, créée automatiquement par SAS contenant, entre autre, les composantes principales et les variables quantitatives étudiées (cette table est nécessaire pour faire les graphiques, ou pour imprimer les contributions et qualités de représentations)
C =Nom de la table contenant un résumé de l’analyse (valeurs propres, vecteurs propres...).
N = nombre d’axes à calculer. Par défaut, SAS calcule p axes (autant d’axes que de variables étudiées). Ne pas confondre avec le nombre d’axes à retenir, qui se trouve après analyse.
COV = si cette option est précisée, SAS fera une ACP centrée, mais non réduite (la matrice d’inertie est la matrice de variance-covariance et non de corrélation), par défaut les données seront réduites.
Vardef=spécifie le nombre de degrés de libertés pour le calcul de variance (= à n ou n-1). Par défaut, SAS calcule les variances et les écarts- types non biaisés. Cela ne change rien à l’expression des axes principaux, mais les coordonnées sont différentes (pas assez toutefois pour modifier les conclusions de l’analyse)
Weight= spécifie une variable dans laquelle se trouvent les poids des individus. Cette instruction est optionnelle ; par défaut, SAS fait une ACP normée avec poids identiques pour chaque individu.
2) Résultats du programme de base :
SAS donne les sorties suivantes à partir du programme de base (sans les option COV, N, ni l’instruction weight) : Les valeurs des différents tableaux se rapportent aux données brutes fournies au paragraphe 4.
Tableau n° 1 : Récapitulatif des données ( nombre d’individus et de variables ) The princomp procedure Observations : 8 (nombre d’individus = n ) Variables : 5 (nombre de variables étudiées =p)
Tableau n° 2 : Statistiques descriptives
Simple Statistics
variables Maths Sciences Francais Latin Art
Mean (moyenne) 9.687 9.875 9.937 9.950 10.125
StD (écart type) 3.490 3.170 3.583 2.719 1.691
StD = En l’absence de l’option vardef, SAS fournit les écarts-types non biaisé:
n
i i
X x x
s n
1
)² 1 (
1 .
Tableau n° 3 : Matrice de corrélation
Correlation Matrix
Maths Sciences Francais Latin Art
Maths 1.0000 0.9794 0.2283 0.5035 0.1549
Sciences 0.9794 1.0000 0.4175 0.6658 0.0729
Francais 0.2283 0.4175 1.0000 0.9472 -0.2978
Latin 0.5035 0.6658 0.9472 1.000 -0.3086
Art 0.1549 0.0729 -0.2978 -0.3086 1.0000
RQ
: si l’option COV est présente, SAS donne la matrice de variances-covariances au lieu de la matrice de corrélations.
Utilisation pratique : Ce tableau permet d’ores et déjà de repérer les variables les plus corrélées entre elles.
Si deux variables sont bien représentées sur un plan principal, ces variables seront d’autant plus rapprochées sur le graphique que leur coefficient de corrélation est grand.
Exemple : Ici, la matrice de corrélation nous indique que les variables Sciences et Maths sont très corrélées. Les variables Latin et Français sont également très corrélées. La variable Art (dessin et musique) semble particulière. Elle est légèrement anticorrélée avec le pôle littéraire (latin et francais).
Tableau n° 4 : Valeurs propres de la matrice de corrélations
Eigenvalues of the Correlation Matrix ( Eigenvalue = valeur propre )
Eigenvalue Difference Proportion Cumulative
Rang k de l’axe
principal
k
k
k1 k
k
proportion cumulée
PRIN1 2.90771 1.44549 0.5815 0.5815
PRIN2 1.46222 0.83556 0.2924 0.8740
PRIN3 0.62666 0.62365 0.1253 0.9993
PRIN4 0.00309 0.00264 0.0006 0.9999
PRIN5 0.00038 . 0.0001 1.00000
La colonne eigenvalue fournit l’inertie de chaque axe. Rappelons qu’en ACP normée,
p k
k I tr R p
1
)
( . Ici, p=5=
51 k
k .Utilisation pratique : Permet de choisir le nombre q d’axes à retenir. Rappelons les critères utilisés pour ce choix :
Les critères basés sur le taux d’inertie restitué (à l’aide des 2°, 4° et 5° colonnes)
Critère du coude (à l’aide de la 3° colonne) Scree-test
Critère de l’interprétabilité de l’axe
Dans le cas particulier de l’ACP normée, un critère basé sur le taux d’inertie restitué, appelé critère de Kaiser, conduit à ne retenir que les valeurs propres supérieures à 1, en se basant sur l’idée que chaque axe devrait restituer en moyenne une inertie de 1 (inertie moyenne). CECI N’EST VALABLE QUE DANS LE CAS DE l’ACP NORMEE.
Exemple : Ici, le critère de Kaiser nous conduit à sélectionner deux axes (2 valeurs propres supérieures à 1). On voit que l’axe 1 restitue à lui seul plus de la moitié (58%) de l’inertie; avec deux axes, on restitue 87 % de l’inertie totale, ce qui est excellent.
.Tableau n° 5 : Coordonnées des axes principaux du nuage de points-individus, dans le repère d’origine constitué par les variables Eigenvectors ( = vecteurs propres)
Eigenvectors
PRIN1 PRIN2 PRIN3 PRIN4 PRIN5
Variables
(u1) (u2) (u3) (u4) (u5)
Maths 0.458490 0.468425 0.161174 -.298694 0.614112
Sciences 0.522021 0.348218 0.098746 0.526606 -.523649
Francais 0.456383 -0.409539 -.231960 0.469273 0.441404
Latin 0.546348 -0.261715 -.113485 -.641950 -.392038
Art -.102466 0.650465 0.947411 0.033926 0.011217
La colonne PRINk représente les coordonnées du vecteur
u
k . L’intersection entre la ligne définie par la j° variable et cette colonne donne la valeur de ujk : coordonnée deu
ksur l’axe du repère d’origine correspondant à la variable X j. Rappelons que1
² 'k uk
ujk u (
u
k est normé) et que pour toutk l u
k'u
l 0
(les axes factoriels sont orthogonaux deux à deux).Utilisation pratique :
Permet d’analyser la contribution des variables à l’axe k. On comparera la valeur absolue de la valeur lue sur chaque ligne à 1/p . Les valeurs supérieures correspondent aux variables contribuant le plus à la formation de l’axe. Le signe permet de savoir si elles y contribuent positivement ou négativement.
En multipliant la ligne PRINk par k , on obtient aussi le vecteur de coordonnéesD
k , c'est-à-dire le vecteur constitué des coefficients de corrélations entre les variables et la composante principale de rang k.
En ACP normée, Le carré deD
k donne aussi la qualité de représentation des variables sur l’axe.Exemple : Ici, la racine carrée de la contribution moyenne vaut 0,45, ce qui nous pousse à considérer que toutes les variables, à l’exception de Art, contribuent à la définition de l’axe 1. Le sens de contribution s’établit grâce au signe de la coordonnée. Ici, toutes les variables ont une coordonnée positive. L’axe 1 peut donc s’interpréter comme l’axe des matières académiques (maths, sciences, francais, latin).
L’axe 2 est déterminé par les Arts et dans une moindre mesure les Maths. Etant donné la différence importante de contribution entre ces deux variables et la médiocre qualité de représentation de la variable maths , l’axe 2 peut être interprété comme l’axe artistique.
3) Extensions du programme de base :
SAS fournit donc :
- pour le nuage des individus : les axes factoriels.
- Pour le nuage des points variables : la racine carrée des contributions. On peut en déduire les coordonnées et qualités de représentations, mais cela nécessite des calculs.
SAS ne fournit pas :
- pour le nuage des individus : les composantes principales, contributions et qualités de représentations ; le dessin du nuage projeté.
- Pour le nuage des variables : les coordonnées et qualités de représentations ; le dessin du nuage projeté.
On va donc créer des programmes périphériques pour les obtenir :
Coordonnées et qualités de représentation des variables sur les axes factoriels
On sait que la coordonnée de la variable X jsur l’axe k est : djk r(Xj,Ck). Par ailleurs, la qualité de représentation de cette variable sur l’axe k est le carré de cette coordonnée. Il suffit donc d’éditer les coefficients de corrélations entre les composantes principales et les variables d’origine. Dans la mesure où, à ce stade de l’analyse, le nombre d’axes q à retenir a été choisi, il suffit d’éditer les q premiers vecteurs de coordonnées.
Programme :
PROC CORR DATA=B ...OUT = D NOPROB NOSIMPLE; (calcule les corrélations; stocke les résultats dans D, n’imprime ni les probabilités, ni les statistiques simples)
VAR prin1-prinq; (corrélations calculées entre les q premières composantes principales et les variables d’origine).
WITH variables quantitatives étudiées;
TITLE ‘Coordonnees des variables sur les axes ‘ ; RUN;
Tableau 6 : Résultats
Coordonnees des variables sur les axes The CORR Procedure
5 With Variables: maths sciences francais latin art 2 Variables: Prin1 Prin2
Pearson Correlation Coefficients, N = 8 (Pearson=coefficient de corrélation linéaire)
variable PRIN1 (C1) PRIN2 (C2)
Maths 0.78182 0.56643
Sciences 0.89015 0.42107
Francais 0.77822 -0.49522
Latin 0.93163 -0.31647
Art -0.17473 0.78656
Utilisation pratique :
Ce tableau fournit les coordonnées des variables sur les axes factoriels ; ainsi la coordonnée de la variable math sur le premier axe est 0,78182.
Par ailleurs, en élevant au carré ces quantités, on obtient les qualités de représentation des variables sur les axes. Les qualités de représentation des variables peuvent donc se lire directement sur le graphique (les variables bien représentées sur un axe ont une coordonnée sur cet axe proche de -1 ou 1
Exemple : Sur l’axe 1, toutes les variables sont bien représentées sauf Art. Sur l’axe 2, les qualités de représentations sont médiocres (<0,5) sauf Art qui est bien représentée (0,78656).
Coordonnées (composantes principales), contributions et qualités de représentation des individus sur les axes
Les composantes principales sont contenues dans le tableau B de sortie de du programme de base. Il suffit donc d’imprimer ce tableau en le remettant en forme (la première partie du programme, facultative, permet de classer les valeurs des coordonnées de la première composante principale PRIN1 dans l’ordre croissant ; on pourrait faire de même pour la deuxième, troisième…composante, ce qui permet de lire d’emblée les contributions les plus fortes).
Les contributions peuvent être déduites des composantes principales, donc du tableau B. Cependant, ce n’est pas le cas pour les qualités de représentation, qu’il faut calculer. Avant d’imprimer B, on va le modifier pour créer les qualités de représentation. Le nouveau tableau (celui qu’on imprime) s’appelle C. Si l’on a choisi le nombre d’axes q à retenir, on peut n’imprimer que les q premières composantes et qualités de représentations.
Le calcul de la qualité de représentation d’un individu sur un axe nécessite le calcul de sa norme :
² ) ²
(
i i ik
k
e
e c
qlt
. Pour simplifierla programmation, on admettra le résultat suivant :
p k
ik
i c
e
1
²
² .
Programme :
PROC SORT DATA=B; (trie B par valeurs croissantes....) BY PRIN1; (....de PRIN1)
RUN;
DATA C; (crée une table C contenant, en plus des variables de B, les qualités de représentation) SET B; (à partir du tableau B)
ARRAY k{*} PRIN1-PRINp;
disto=USS(OF k{*}); (crée la variable norme, appelée disto)
QLT1=PRIN1*PRIN1/disto; (crée les p variables qualités de représentation, appelées QLTk) QLT2=PRIN2*PRIN2/disto;
...
QLTq=PRINq*PRINq/disto;
KEEP PRIN1-PRINq QLT1-QLTq nom des individus; (garde seulement les variables listées) RUN;
PROC PRINT DATA=C; (imprime le tableau C)
ID nom de la variable individu ; (désigne la variable individu comme identifiant) VAR PRIN1-PRINq .QLT1-QLTq ; (désigne les variables à conserver dans B)
TITLE ‘Coordonnees et qualite de representation des individus sur les axes'; (met un titre aux sorties) RUN;
Tableau 7 : résultats
Coordonnees et qualite de representation des individus sur les axes
Prénom PRIN1 PRIN2 QLT1 QLT2
Jean -2.31590 -0.84159 0.69667 0.09200
Pierre -1.10089 -0.45606 0.66119 0.11347
André -0.94588 -0.56187 0.38714 0.13660
Jacques 3.18016 -0.85244 0.91158 0.06550
Didier 2.02849 0.50264 0.92749 0.05695
Serge -1.13919 2.08693 0.22591 0.75816
Alain -0.18708 -1.53940 0.00903 0.61111
Eric 0.48030 1.66178 0.07678 0.91919
Utilisation pratique:
La colonne PRINk donne les coordonnées du vecteurC
k (vecteur de coordonnées des individus sur les axes). En l’absence de l’option vardef, ce vecteur est calculé parC
k Xu
k, où X est le tableau réduit en utilisant l’écart-type non biaisé. Il faudra donc multiplier par 1 n
n
pour obtenir les valeurs calculées à la main, à moins de spécifier l’option vardef=n. Cela ne change pas grand-chose aux résultats.
On sait que :k
i
n
ikk c
CTR
2
)
(
. On peut donc calculer les contributions des individus à la formation des axes.Contribuent fortement à l’inertie de l’axe k les individus tels que la valeur absolue de la valeur lue est k . Le signe de la coordonnée donne le sens de contribution.
La colonne QLTk donne les qualités de représentation des n individus sur l’axe k. Au plus elle est proche de 1 au mieux l’individu est représenté sur l’axe.Exemple :
Mis à part Alain Serge Eric et André, les autres élèves sont bien représentés sur l’axe 1. Sur l’axe 2, les individus bien représentés sont Alain, Serge et Eric. En ce qui concerne les contributions, on compare à 1, 70 sur le premier axe et à 1,21 sur le second.
Ce sont Jean Jacques et Didier qui contribuent le plus à la formation de l’axe 1. L’axe 1 oppose Jean (du côté négatif) à Jacques et Didier (du coté positif). L’axe 2 oppose Alain à Serge et Eric.
Les individus étant ici anonymes (on ne les connaît pas, mis à par leur prénom), il ne sont pas très utiles pour donner un sens aux axes.
Graphiques des nuages de points projetés sur les axes factoriels :
Les graphiques permettent,plus facilement que la lecture des coordonnées sur les axes, d’étudier la proximité des points sur un axe. Ils permettent de plus d’étudier les proximités sur les plans factoriels. On se servira des qualités de représentations sur les axes pour calculer les qualités de représentations sur les plans factoriels.
Représentation des individus sur le premier plan factoriel
DATA indiv; (crée le tableau indiv) SET B; (prend le tableau de sortie B)
x=prin1; (crée une nouvelle variable x, égale à PRIN1) y=prin2; (crée une nouvelle variable y, égale à PRIN2) xsys='2';
ysys='2';
TEXT =nom des individus dans le tableau B; (crée une variable de légende pour les points du nuage) RUN;
PROC GPLOT DATA=indiv; (crée un graphique sur le tableau indiv)
TITLE " Representation des individus axe2 * axe1"; (titre du graphique ; il ne doit comprendre ni accent ni virgule) PLOT y*x /annotate=indiv frame href=0 vref=0 ; (options du graphique)
SYMBOL1 v=none;
RUN;
Représentation des variables sur le premier plan factoriel :
DATA varia;
SET D;
x=prin1;
y=prin2;
xsys='2';
ysys='2';
xmin=-1;
xmax=1;
ymax=1;
ymin=-1;
TEXT= _name_;
RUN;
PROC GPLOT DATA=varia;
TITLE " Representation des variables axe2 * axe1";
PLOT y*x /annotate=varia frame href=0 vref=0 haxis=-1 to 1 vaxis=-1 to 1 ; SYMBOL1 v=none;
RUN;
QUIT; (quitte la fenêtre graphique de SAS)
Conclusion sur l’exemple :
L’axe 1 est l’axe des matières académiques. Il oppose Jean, non académique, à Jacques et Didier ayant de bonnes performances dans ces matières. Pierre, bien représenté sur cet axe est bien expliqué par cet axe : il est plutôt non académique (du côté de Jean). (rque : André n’étant pas très bien représenté, il vaut mieux être réservé quant à la très grande proximité avec Pierre sur cet axe.)
L’axe 2 est l’axe artistique. Il oppose Alain à serge et Eric, ayant de bonnes performances artistiques (les autres individus et variables étant assez mal représentées sur cet axe, on n’en parlera pas).
Regardons les qualités de représentations sur le premier plan factoriel. Nous pouvons calculer les qualités de représentation des points sur ce plan par :
QLT ( i ) QLT
1( i ) QLT
2( i )
, pour un point i (individu ou variable) quelconque. Nous obtenons :Prénom QLT variables QLT
Jean 0,78867 maths 0,93208546
Pierre 0,77466 Sciences 0,96966697
André 0,52374 Francais 0,85086922
Jacques 0,97708 Latin 0,96808772
Didier 0,98444 Art 0,64920721
Serge 0,98407
Alain 0,62014
Eric 0,99597
La qualité de représentation est bonne pour tous les points sur le premier plan principal. On peut donc distinguer trois groupes de variables homogènes, les matières scientifiques (maths et sciences, très corrélées), les matières littéraires (latin et francais, très corrélées), les matières artistiques (art).
4) PROGRAMME DE L’EXEMPLE
/* CONSTRUCTION TABLE SAS : notes en 5 matieres de 8 eleves*/
data notes ;
input prenom $ maths sciences francais latin art;
cards;
Jean 6 6 5 6.5 8 Pierre 8 8 8 8 9 André 6 7 11 9.6 11 Jacques 14 14.5 15.5 15 8 Didier 14 14 12 12.5 10 Serge 11 10 5.5 7 13 Alain 5.5 7 14 11.5 10 Eric 13 12.5 8.5 9.5 12 ;
run;
/* PROGRAMME DE BASE */
proc princomp data = notes out=b vardef=n ; var maths sciences francais latin art ; run;
/* GRANDEURS RELATIVES AUX INDIVIDUS*/
data c; set b;
array k{*} prin1-prin5;
disto=uss(of k{*}) ; qlt1=prin1*prin1/disto;
qlt2=prin2*prin2/disto;
keep prin1-prin2 qlt1-qlt2 prenom;
run ;
proc print data=c;
id prenom;
var prin1-prin2 qlt1-qlt2;
title ‘Coordonnees et qualite de representation des individus sur les axes’ ; run ;
/* COORDONNEES DES VARIABLES*/
proc corr data=b out=d noprob nosimple;
var prin1-prin2;
with maths sciences francais latin art ; run ;
/*GRAPHIQUE DES INDIVIDUS */
data indiv;
set b;
x=prin1;
y=prin2;
xsys='2';
ysys='2';
text = prenom;
run;
proc gplot data=indiv;
title " Representation des individus axe2 * axe1";
plot y*x /annotate=indiv frame href=0 vref=0 ; symbol1 v=none;
run;
/* GRAPHIQUE DES VARIABLES */
data varia;
set d;
x=prin1;
y=prin2;
xsys='2';
ysys='2';
xmin=-1;
xmax=1;
ymax=1;
ymin=-1;
text = _name_;
run;
proc gplot data=varia;
title " Representation des variables axe2 * axe1";
plot y*x /annotate=varia frame href=0 vref=0 haxis=-1 to 1 vaxis=-1 to 1 ; symbol1 v=none;
run;
quit;