Faire apparaître les individus d'une ACP en couleurs (en s'aidant d'une macro acm en couleur)
Bonjour,
J’espère trouver de l’aide sur ce forum pour un problème, sachant que je ne maîtrise absolument pas l’écriture des macros, j’ai l’habitude de les utiliser sans les comprendre :oops: .
Mon ACP représente les individus sur le premier plan factoriel, ils sont représentés par leurs identifiants (la variable « nom ») qui est écrite + ou – gros selon leur qualité de représentation, ce qui est pratique.
Par contre j’aimerai que les noms soient écrits d’une couleur correspondante à la classe à laquelle ils appartiennent (j’ai une variable « classe »), et je n’arrive pas à faire ça.
C’est la macro %acp qui me calcule l’acp, et la macro %gacpix qui dessine le plan des individus :
Citation:
(programme sas: )
%acp(Biblio.Donnees, code_graphique, var1 var2 var3 var4 var5 var6 var7 var8 var9 var10,q=4,poids=Varpond);
%gacpix(x=1,y=2,nc=19,coeff=1);
run;
(les variables analysées sont var1, …, var11, er varpond est une variable de pondération).
La macro %gapcix marche très bien (mais ne fait pas de couleur), voici son code :
Citation:
%macro gacpix(x=1,y=2,nc=4,coeff=1);
%* Graphique des individus;
%* x : numero axe horizontal;
%* y : numero axe vertical;
%* nc : nombre max de caracteres;
data anno;
set coorindq nobs=nind;
retain xsys ysys '2';
style='swiss';
y= prin&y;
x= prin&x;
text=substr(left(ident),1,&nc);
size=&coeff*(cosca&x+cosca&y)+0.2;
label y = "Axe &y"
x = "Axe &x";
run;
proc gplot data=anno;
title;
symbol1 v='none';
plot y*x=1 / annotate=anno frame href=0 vref=0;
run;
goptions reset=all;
quit;
%mend;
Je dispose d’une macro d’ACM (et non ACP) qui arrive à faire la couleur selon l’initiale des variables (et non individus), mais je n’ai pas réussi à adapter, lorsque j’ai adapté le journal m’indiquait que l’attribut coul (pour couleur) n’était pas reconnu, et en plus la représentation graphique faisait apparaître un cercle (de corrélation ? alors que c’était des individus et non variables) tout en laissant apparaître les axes, bref ça n’a pas fonctionné, mais je ne connais vraiment pas le langage macro. Peut-être que quelqu’un saurait comment adapter cette macro (dont le programme suit) à la précédente, pour garder la représentation des individus de l’acp (quote précédent), mais avec les couleurs de cette macro d’acm (quote suivant)?
Merci d’avance à qui aurait le courage de se pencher sur ce problème !
Citation:
/*UTILISATION MACRO gafcix0 POUR FAIRE LA REPRESENTATION SIMULTANEE*/
%macro gafcix0(ident=_name_,x=1,y=2,nc=4,tp=0.8);
%* Graphique simultanee variables--individus;
%* Representation des individus par des points;
%* x : numero axe horizontal;
%* y : numero axe vertical;
%* nc : nombre max de caracteres;
data anno;
set resul;
retain xsys ysys '2';
%* style='swissb';
y= dim&y;
x= dim&x;
coul=substr(&ident,1,1);
text=substr(&ident,1,&nc);
size=1;
select;
when(coul in('A')) color='magenta';
when(coul in('B')) color='brown';
when(coul in('C')) color='red';
when(coul in('D')) color='DERO';
when(coul in('E')) color='cream';
when(coul in('F')) color='cyan';
when(coul in('G')) color='gold';
when(coul in('H')) color='gray';
when(coul in('I')) color='green';
when(coul in('J')) color='lilac';
when(coul in('K')) color='lime';
when(coul in('L')) color='maroon';
when(coul in('M')) color='olive';
when(coul in('N')) color='orange';
when(coul in('O')) color='pink';
when(coul in('P')) color='purple';
when(coul in('Q')) color='rose';
when(coul in('R')) color='salmon';
when(coul in('S')) color='blue';
when(coul in('T')) color='steel';
when(coul in('U')) color='tan';
when(coul in('V')) color='violet';
when(coul in('W')) color='vigb';
when(coul in('X')) color='black';
when(coul in('Y')) color='yellow';
when(coul in('Z')) color='STV';
when(coul in('0')) do; color='red';text='.';size=&tp;end;
otherwise do; color='black';text='.'; size=&tp;end;
end;
label y = "Axe &y"
x = "Axe &x";
keep x y text xsys ysys size color;
proc gplot data=anno;
TITLE "Premier plan factoriel de l'ACM sur les pratiques";
FOOTNOTE "Donnees provenant du questionnaire Frioul";
axis1 length=14cm; /* attention taille */
axis2 length=9cm;
symbol v=none;
plot y*x / annotate=anno frame href=0 vref=0
haxis=axis1 vaxis=axis2 ;
run;
goptions reset=all;
quit;
%mend;
/*FIN MACRO*/
Merci d'avance :)