4­METHODES PARAMETRIQUES : ESTIMATION D’UN MELANGE DE LOIS Méthode La loi de distribution d’ un ensemble d’ observations est le plus souvent définie comme une combinaison convexe de plusieurs lois de probabilités. Afin d’ estimer les paramètres de ce mélange de lois, la méthode de Monte Carlo par chaîne de Markov (MCMC) est de plus en plus utilisée. La méthode MCMC est un algorithme qui génère une chaîne de Markov (Yn, n=>0), stationnaire sous certaines conditions. Rappels : ( Yn, n=>0) est une chaîne de Markov si la loi de probabilité de l‘état Yn+1, ne dépend que de l’état de Yn : P (Yn+1 / Yn, Yn­1, .., Xo) = P (Yn+1 / Yn). Un état Yn représente la valeur des paramètres à estimer à la nième itération de l’algorithme. Le passage de l’état Yn à l’ état Yn+1 se fait grâce à une estimation Bayésienne. Cette méthode nécessite de connaître au préalable le nombre k de lois qui constituent le mélange. Nous allons appliquer cet algorithme à l’é chantillon 2. Les observations seront constituées des projections sur l’a xe 1 de l’ analyse en composantes principales. On suppose que ces observations sont une réalisation d’un e variable aléatoire X de loi Px. On suppose aussi que la distribution des points selon l’ axe 1 est un mélange de 2 lois normales (k=2). X ~ Px = p*Normale (mu_1, var_1) + (1­p)*Normale (mu_2, var_2). Soit f la densité de la loi normale du groupe 1 (gr1). Soit g la densité de la loi normale du groupe 1 (gr2). On pose théta = [p, (1­p), mu_1, mu_2, sigma_1, sigma_2], les paramètres à estimer. (théta est la chaîne de Markov) Le but est d’ estimer théta au vu des observations x1, ..., xN. Algorithme Etape 0. : Initialisation des paramètres : thêta (0) = thêta_0 (loi initiale de la chaîne de Markov) La chaîne de Markov est stationnaire si la loi initiale est la loi recherchée (i.e les valeurs de départ sont les vraies valeurs) [p, (1­p)] = [0.5, 0.5] Les probabilités a priori de chaque classe sont uniformes, égales à 1/ k, où k est le nombre de classes. [mu_1, mu_2] = [1, 2] [var_1, var_2] = [1, 1] 1 Etape 1. : Mise à jour des paramètres. Il existe plusieurs méthodes : 1) estimation par maximum de vraisemblance. 2) estimation bayesienne. Nous utiliserons ici une estimation bayesienne. La première partie de l’algorithme consiste à calculer les probabilités a posteriori de chaque classe, en tous les points, c'est­à­dire les probabilités d’être dans la classe j sachant l’observation xi : P (gr_j / xi) Pour estimer P (gr_j / xi), on utilise la formule de Bayes : P (gr_j)*P (xi / gr_j) P ( gr_j / xi) = ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ∑ P (gr_j)*P (xi / gr_j) j=1,2 Calculs intermédiaires : Probabilité a priori de la classe j : P (gr_j) avec j dans {1, 2}. Densité de probabilité pour la classe j, au point i : P (xi / gr_j) = f( xi )* dx. En prenant dx = 1, on a : P (xi / gr_j) = f (xi) Les probabilités P (gr_j / xi) forment une matrice h : P (gr_j)*P (xi / gr_j) ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ∑ P (gr_j)*P (xi / gr_j) j=1,2 h (i, j) = i = 1..n j= 1, 2 h (i, j) est la formule da Bayes : c’est la probabilité d’appartenir au groupe j lorsque l’on est au point xi. On peut donc réécrire la matrice h : 2 P (gr_1 / x1) P(gr_2 / x1) ... P (gr_k / x1) P (gr_1 / x2) P(gr_2 / x2) ... P (gr_k / x2) P (gr_1 / x3) P(gr_2 / x3) ... P (gr_k / x3) h = … P (gr_1 / xN) P(gr_2 / xN) ... P (gr_k / xN) Cette matrice h va nous permettre d’estimer tous les paramètres de la loi : [p, (1­p), mu_1, mu_2, var_1, var_2] Estimation des probabilités a priori de chaque groupe : Afin d’estimer la probabilité P (gr_j), on utilise l’approximation de Monte­Carlo : P (gr_j) = nombre de points dans le groupe / nombre de points au total (N). Le nombre de points dans le groupe j est approximé par : P (gr_j / x1) + P (gr_j / x2) + … + P (g r_j / xN­1) + P (gr_j / xN). En effet, si P (gr_j / x1) est proche de 1, cela signifie que la probabilité d’être dans la groupe j sachant qu’on est au point x1 est grande : le point x1 a de grandes chances d’être dans le groupe j. Cette probabilité exprime « la présence » du point dans le groupe j. On obtient donc une bonne approximation du nombre de points dans le groupe j. Estimation des espérances dans chaque groupe : Rappel : Un estimateur de l’espérance d’une variable aléatoire X, est la moyenne empirique (1/n ∑ xi) i=1..N. Avec 1/n, la probabilité uniforme sur chaque point. On a donc la formule suivante pour mu_j : P (gr_j / x1) P (gr_j / x2) P (gr_j / xN) mu_j = x1 * ­­­­­­­­­­­­­­­­­­­­ + x2* ­­­­­­­­­­­­­­­­­­­­­ + … + xN * ­ ­­­­­­­­­­­­­­­­­ ∑ P (gr_j / xi) ∑ P (gr_j / xi) ∑ P (gr_j / xi) i=1…N i=1...N i=1...N Les coefficients devant les xi, représentent le poids de chaque point dans le groupe j (Probabilité que le point soit dans le groupe j / somme des probabilités de tous les points dans le groupe j). Le coefficient remplace la valeur 1/n, dans le rappel ci­dessus. On note A1, A2, .., An, ces coefficients. 3 Estimation des variances dans chaque groupe : Rappel : un estimateur de la variance d’une variable aléatoire X est : (1/n)* ∑ (xi – xe) ^2 i=1..n ­ xe est la moyenne empirique. La variance dans le groupe j est : var_j = ∑ Ai (xi – mu_j) ^2 i=1..N On obtient ainsi des nouvelles valeurs pour pj, mu_j, var_j, à chaque itération de l’algorithme, qui ne dépendent que des valeurs précédentes. Cet algorithme converge vers les valeurs réelles. Application de l'algorithme MCMC à l'échantillon 2 Les données, sont sous forme d'un vecteur ligne : a. Ils représentent les coordonnées des galaxies sur l’axe 1 de l’ACPN. L’algorithme utilisé prend en paramètres un fichier contenant les données et le nombre d’itérations. Lignes de commandes sur Scilab: ­­> A = read (‘data2.txt’, ­1, 1); ­­> A = A'; // les données A doivent être sous forme d'un vecteur ligne // On exécute la fonction algo_em qui contient l’algorithme mcmc. ­­>em (A, 1500) Afin d’analyser la convergence de l’algorithme, on construit les graphes représentant la valeur du paramètre à estimer en fonction du nombre d’itération. 4 Graphes de convergence des paramètres à estimer Paramètre P p C O N V E R G E N C E D E p 0 .7 0 .6 0 .5 0 .4 0 .3 i t e ra t i o n 0 .2 0 200 400 600 800 1000 1200 1400 1600 Paramètre mu_1 m u_1 C O N V E R G E N C E D E m u _ 1 ­1 . 2 ­1 . 4 ­1 . 6 ­1 . 8 ­2 . 0 ­2 . 2 ­2 . 4 i te ra ti o n ­2 . 6 0 200 400 600 800 1000 5 1200 1400 1600 Paramètre mu_2 m u_2 C O N V E R G E N C E D E m u _ 2 2 .9 2 .7 2 .5 2 .3 2 .1 1 .9 1 .7 1 .5 1 .3 1 .1 i t e ra ti o n 0 .9 0 200 400 600 800 1000 1200 1400 1600 Paramètre var_1 v a r_ 1 C O N V E R G E N C E D E v a r_ 1 4 .9 4 .5 4 .1 3 .7 3 .3 2 .9 i t e ra t i o n 2 .5 0 200 400 600 800 6 1000 1200 1400 1600 Paramètre var_2 v a r_ 2 C O N V E R G E N C E D E v a r_ 2 7 .1 6 .7 6 .3 5 .9 5 .5 5 .1 4 .7 i t e ra t i o n 4 .3 0 2 00 400 600 80 0 10 00 1200 1 40 0 16 00 D'après les graphiques, on voit que l'algorithme converge. Les paramètres se stabilisent à partir de 700 itérations. Les valeurs obtenues pour les paramètres sont : Résultats (affichage Scilab) : Probas des classes estimées ! 0.2781014 0.7218986 ! // Probabilités a priori des classes P et (1 ­ P) mu estimé ! ­ 2.5833821 0.9952119 ! // Espérances des 2 lois normales Variances estimées ! 2.5686383 7.0765769 ! // Variances des 2 lois normales 7 Graphe des distributions des points sur l'axe 1: 0 .2 8 l o i 1 l o i 2 0 .2 4 0 .2 0 0 .1 6 0 .1 2 0 .0 8 0 .0 4 0 .0 0 ­9 ­7 ­5 ­3 ­1 1 3 5 7 9 Ce graphique représente la loi de distribution des projections sur l'axe 1 de l'ACPN. Elle est définie par un mélange de 2 lois gaussiennes. La loi est donnée par la formule suivante : Px : 0.28 * Normale (­ 2.58, 2.57) + 0.72 *Normale (1, 7.08) (valeurs arrondies à 10^­2 près) Les projections sur l'axe 1 se répartissent donc en 2 classes imbriquées. La distribution dans chacune des classes est normale. La courbe rouge représente la distribution des points de la classe 1, et la courbe bleue la distribution des points de la classe 2. On peut voir que la classe 2 est plus étalée (la variance de la classe 2 (7.0765769) est supérieure à la variance de la classe1 (2.5686383). La classe 2 (en bleue) est aussi la plus peuplée (une projection a72% de chance d’appartenir à la classe 2). On peut comparer ce graphique avec la projection des individus de l'échantillon 2 sur les axes 1­2 de l'ACPN puis avec le graphe de la distribution des types morphologiques sur l'axe 1. y 6 5 4 3 2 1 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 1 0 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 0 1 2 x 8 3 4 5 6 7 8 9 1 0 1 1 1 2 Distribution des elliptiques/lenticulaires sur l’axe 1 P E RCE NT 3 0 2 0 1 0 0 7 . 8 6 . 6 5 . 4 4 . 2 3 . 0 1 . 8 0 . 6 0 . 6 x 1 . 8 3 . 0 4 . 2 5 . 4 6 . 6 7 . 8 9 . 0 1 0 . 2 MI D P O I N T Distribution des spirales sur l’axe 1 P E R C E N T 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1 0 6 . 4 5 . 6 4 . 8 4 . 0 3 . 2 2 . 4 1 . 6 0 . 8 0 . 0 0 . 8 1 . 6 x 2 . 4 MI D P O I 3 . 2 4 . 0 4 . 8 5 . 6 6 . 4 7 . 2 8 . 0 8 . 8 9 . 6 1 0 . 4 1 1 . 2 N T En comparant la distribution des types sur l'axe 1 et les classes, on remarque que la classe 1 correspond majoritairement aux elliptiques/lenticulaires; alors que la classe 2 est constituée en grande partie par les spirales. Les 2 classes formées par l'algorithme reproduisent la séparation morphologique : les spirales d'une part et les elliptiques/ lenticulaires d'autre part. Pour préciser ce résultat, il est nécessaire d’appliquer l’algorithme sur un espace à 2 dimensions. Remarques : ­­>Les résultats sont (dans cet exemple) indépendants des conditions initiales. ­­>Nous avons fait l'hypothèse pour l'échantillon 2 d'un mélange de 2 classes (donc 2 lois normales). On peut cependant supposer un nombre de classes plus important (3 ou 4 par exemple). On remarque que si l'on désire un nombre de classes strictement supérieur à 2, une classe disparaît à chaque fois. Ainsi pour obtenir 3 classes, on doit déclarer k=4. Etc. C'est pourquoi on préfèrera conserver une répartition en 2 classes. 9 exemple k=3 0 .2 8 lo i 1 lo i 2 0 .2 4 lo i 3 0 .2 0 0 .1 6 0 .1 2 0 .0 8 0 .0 4 0 .0 0 ­9 ­7 ­5 ­3 ­1 1 3 5 7 9 p1 = 0.3135843 ; p2 = 0.6848360 ; p3 = 0.0015798 La probabilité qu'un point soit issu de la classe 3 est quasiment nulle. Sur le graphique, on voit que la courbe représentative de la loi 3 se situe complètement à droite, et par conséquent, n'apporte pas d'information sur le nuage de points (cf. ci­dessus). Exemple k=4 ( graphe de convergence des paramètres p1 p2 p3 p4 ) c o n v e rg e n c e d e s p ro b a b i l i t s d e s c l a sse s 0 .7 0 .6 0 .5 0 .4 0 .3 0 .2 0 .1 0 .0 0 1000 2000 3000 4000 5000 6000 7000 8000 Ce graphique nous montre que la probabilité d'appartenir à la classe 4 est nulle. Il ne reste plus que 3 classes dans lesquelles sont reparties les points. 10 Densités des lois de distribution des 4 classes: 0 .5 lo i 1 lo i 2 lo i 3 0 .4 lo i 4 0 .3 0 .2 0 .1 0 .0 ­9 ­7 ­5 ­3 ­1 1 3 5 7 9 Valeurs obtenue pour les paramètres: Probabilités des classes estimées ! 0.4419241 0.0778097 0.4785419 0.0017243 ! // P1 P2 P3 P4 mu estimé ! ­ 2.3428863 0.4191264 2.057881 10.429797 ! // Espérances Variances estimées ! 2.8394181 0.730294 5.0743885 0.2406050 ! // Variances L’interprétation des 3 classes est assez délicate, il faudrait tester toutes les possibilités de classement selon l’axe 1. C’est pourquoi, on préfèrera garder le mélange de 2 lois seulement. 11 12 CONCLUSION Durant ce stage, j’a i réalisé une analyse de données détaillée des échantillons à l’ aide du logiciel SAS. Ainsi, une analyse en composantes principales, plusieurs méthodes de classification et une analyse discriminante ont été appliquées aux données. Pour chaque technique, j’ ai écrit un programme réalisant le calcul d’ indicateurs (contributions aux axes, qualités de représentation), facilitant l’int erprétation des résultats. De plus, l’e xpérimentation de l’a lgorithme de Monte Carlo (MCMC) a été l’o ccasion d’ approfondir mes bases en probabilités/statistiques, et surtout de découvrir les applications actuelles des outils statistiques. L’ ouverture à une nouvelle discipline : l’ astronomie, vient compléter mes enseignements. Afin de rechercher des outils de classifications de galaxies, j’ ai donc effectué une analyse mathématique des échantillons tout en intégrant des aspects importants de l’ astronomie. L’a nalyse de données a été une étape importante pour l’é tude des échantillons. En effet, les plans de projections issus de l’ ACPN ont joué un rôle essentiel ; ils ont servi de bases pour les méthodes de classification. Il a été intéressant de constater que les principaux facteurs caractérisants les morphologies, apparaissent dans les résultats des classifications automatiques comme des paramètres discriminants. La séparation très subjective des morphologies peut être donc modélisée par des fonctions mathématiques des paramètres physiques. Des outils ont été créés, permettant d’ extraire l’in formation morphologique à partir d’un ensemble de données physiques. Ces méthodes automatiques seront utilisées sur la base de données Hyperleda extragalactique (http//www­obs­Lyon1.fr/hypercat) d’où ont été extraits les échantillons. On suppose ici que l' échantillon 2, à partir duquel les fonctions ont été calculées, est représentatif de l' ensemble des galaxies de la base. L’a pplication de l’ algorithme de Monte Carlo par Chaîne de Markov sur l’ axe 1, a montré une stabilité pour 2 lois mélangées. Cette méthode paramétrique s’int erprète difficilement en dimension 1. Cependant, en confrontant la distribution théorique avec la distribution empirique des morphologies on a pu expliciter les deux classes obtenues. Pour aller au­delà, il serait intéressant d’ expérimenter un peu plus la méthode paramétrique sur un espace non plus à 1 dimension mais à 2 dimensions. Ceci permettrait une visualisation optimale des classes obtenues sur un plan. Des variantes de l’a lgorithme peuvent être testées, en modifiant par exemple, les hypothèses initiales sur les lois de distributions, et en remplaçant la méthode Bayésienne par une estimation par maximum de vraisemblance. 13 14 Bibliographie : Combes F., Boissé P., Mazure A., Blanchard A, Astrophysique, Galaxies et cosmologie, 1997. Robert C.P., Soubiran C., Estimation of a normal mixture model through Gibbs sampling and Prior Feedback, URA CNRS 1378, Université de Rouen, Vol. 2, No. 1­2, p.125­126, 1993. Cornebise J, Maumy M, Girard P., A Practical Implementation of the Gibbs sampler for Mixture of Distributions: Application to the Determination of Specifications in Food Industry, p.828­836. Elie L. Lapeyre B., Introduction aux Méthodes de Monte­Carlo, Septembre 2001. Mazet V., Introduction aux Méthodes de Monte Carlo par Chaînes de Markov, CRAN CNRS UMR 7039, Université Henri Poincaré, mai 2003. Pinçon B., Une introduction à Scilab, Institut Elie Cartan Nancy E.S.I.A.L, Université Henry Poincaré. Sites web : (guides d’utilisa tion de SAS) http://www.ecn.ulaval.ca/pages/ressources/aide/sas/ http://www.lsp.ups­tlse.fr/Besse/enseignement.html http://www.cmi.univ­mrs.fr/~mcroubau/MaitMASSAD.html Photo de couverture : Mosaïque de Galaxies extraites du relevé photographique du Mont Palomar. 15 16 Annexes : Quelques détails de programmation sur SAS : utilisation des procédures Princomp et IML. Création d’une table SAS Il existe plusieurs manières de créer une table SAS. Lorsque les données sont stockées dans un fichier texte (c’ est d’a illeurs souvent le cas), la syntaxe est : Data sample1; //création d’une table pour l’échantillon 1// Infile 'C:\mes documents\sample_1.txt'; input bi bj jk spi sbb sbj sbh sbk c31j c31h c31k ; run ; Cette étape crée une table SAS temporaire qui sera détruite à la fin de la session. Il est cependant possible d’e nregistrer une table SAS pour pouvoir l’ut iliser ultérieurement (voir programme en annexe). Utilisation de la procédure Princomp de SAS La procédure Princomp effectue une ACPN ; les principales sorties affichées sont les statistiques descriptives, les valeurs propres et les coordonnées des variables sur les axes crées. Pour obtenir les graphiques de projections des galaxies et des variables, indispensables à l’i nterprétation, il faudra programmer ; La syntaxe générale de la procédure Princomp est : PROC PRINCOMP <options>. BY variables FREQ variables PARTIAL variables VAR variables WEIGHT variable L’ instruction PROC PRINCOMP est obligatoire, les autres instructions sont optionnelles. Pour une ACPN classique sur l’ échantillon 1, la syntaxe est la suivante : PROC PRINCOMP data = sample1 outstat = sortie1 out = sortie1; VAR bi bj jk spi sbb sbj sbh sbk c31j c31h c31k ; La table sortie1 contient moyennes, écarts­types pour chaque variable ; matrice des corrélations, valeurs propres et vecteurs propres de la matrice des corrélations. La table sortie2 est une table contenant les données de départ et les coordonnées des individus sur les axes. Transformer une table SAS en fichier texte On peut vouloir conserver une base de données dans un autre format que celui de SAS; dans ce cas, la syntaxe est : Data _null_ ; // _null_ indique qu’ au cune base sas ne sera créée// Set toto ; // toto est la table à transformer// File ‘C:\ Mes Documents\ résultats.txt’ ; // résultats est le fichier texte crée à partir de // // la base sas toto// 17 Put x +4 y ; // les colonnes gardées sont x et y // Run ; Sur SAS, les données les données sont considérées uniquement comme des tableaux ; pour pouvoir faire des calculs matriciels sur les bases de données, il faut utiliser la procédure IML. Comme pour SAS, je ne vais décrire que les principales lignes de programmation dont j’ ai eu besoin. Utilisation de la procédure IML Proc IML ; // appelle la procédure (après avoir exécuter cette ligne un message « IML ready » s’af fiche sur la fenêtre blog. Reset print ; // pour afficher toutes les sorties Use toto ; // toto est une base SAS. On va transformer cette base en un matrice pour pouvoir travailler dessus sous IML. Read all var {var1, var2, …v arN} into mat // mat est une matrice contenant les donnée de la matrice toto. Si on ne précise pas var {}, toutes les variables sont prises en compte. (Opérations sur la matrice mat) // Pour sauvegarder une matrice en table SAS cname = {"pgc" "project"}; // nom des colonnes à créees create out from g [ colname=cname ]; // creation d’un e table sas “ out” à partir de la matrice g append from g; quit ; La syntaxe de programmation est classique et proche de scilab ; toutes les opérations sur les matrices sont les mêmes : ­ ‘* ‘ produit scalaire ­ ‘*. ‘ produit terme à terme ­ ‘ ||’ c oncaténation de 2 matrices …e tc. 18 Programme SAS pour l’analyse de données sur l’échantillon 2 data sample2; **lit les donnees; infile 'C:\Docum ents and Settings\theureau\Bureau\samples\sample2.txt' LRECL=600; input pgc bm im jm hm km ag ai logd logr bi bj jk spi sbb sbj sbh sbk c31j c31h c31k typ mb mi mj mh mk logda dens dk; run; data sample2; **ne garde que les donnees intrinseques; set sample2; keep pgc bi bj jk spi sbb sbj sbh sbk c31j c31h c31k typ mb mi mj mh mk logda dens dk; run; data sample2; /** les valeurs manquantes sont notées par des points**/ set sample2; if bi=­99.99 or bi=­99 then bi=.; if bj=­99.99 or bj=­99 then bj=.; if jk=­99.99 or jk=­99 then jk=.; if spi=­99.99 or spi=­99 then spi=.; if sbb=­99.99 or sbb=­99 then sbb=.; if sbj=­99.99 or sbj=­99 then sbj=.; if sbh=­99.99 or sbh=­99 then sbh=.; if sbk=­99.99 or sbk=­99 then sbk=.; if c31j=­99.99 or c31j=­99 then c31j=.; if c31h=­99.99 or c31h=­99 then c31h=.; if c31k=­99.99 or c31k=­99 then c31k=.; if mb=­99.99 or mb=­99 then mb=.; if mi=­99.99 or mi=­99 then mi=.; if mj=­99.99 or mj=­99 then mj=.; if mh=­99.99 or mh=­99 then mh=.; if mk=­99.99 or mk=­99 then mk=.; if logda=­99.99 or logda=­99 then logda=.; if dens=­99.99 or dens=­99 then dens=.; run; data sample2; set sample2; if bi=. or bj=. or jk=. or spi=. or sbb=. or sbj=. or sbh=. or sbk=. or c31j=. or c31h=. or c31k=. or typ=. or mb=. or mi=. or mj=. or mh=. or mk=. or logda=. or dens=. then delete;run; /**** pour l’ acpn, on enlève les variables typ, dk, pgc ***/ proc princomp data = sample2 outstat = outstat out = sortie; var bi bj jk spi sbb sbj sbh sbk c31j c31h c31k mb mi mj mh mk logda dens ; run; 19 data outstat; set outstat; if _type_=' EIGENVAL' then _name_='VP'; run; proc transpose data = outstat out = transtat; run; /**recuperation des valeurs propres ds des macro­variables**/ data _null_; set transtat; if vp and _name_='bi' t hen do; V1=vp; call symput('VP1',le ft(V1)); end; if vp and _name_='bj' t hen do; V2=vp; call symput('VP2',le ft(V2)); end; if vp and _name_='jk' t hen do; V3=vp; call symput('VP3',le ft(V3)); end; if vp and _name_='s pi' th en do; V4=vp; call symput('VP4',le ft(V4)); end; if vp and _name_='s bb' then do; V5=vp; call symput('VP5',le ft(V5)); end; if vp and _name_='s bj' th en do; V6=vp; call symput('VP6',le ft(V6)); end; if vp and _name_='s bh' then do; V7=vp; call symput('VP7',le ft(V7)); end; if vp and _name_='s bk' then do; V8=vp; call symput('VP8',le ft(V8)); end; if vp and _name_=' c31j' th en do; V9=vp; call symput('VP9',le ft(V9)); end; if vp and _name_=' c31h' then do; V10=vp; call symput('VP10',le ft(V10)); end; 20 if vp and _name_=' c31k' then do; V11=vp; call symput('VP11',le ft(V11)); end; if vp and _name_='mb' t hen do; V12=vp; call symput('VP12',le ft(V12)); end; if vp and _name_='mi' then do; V13=vp; call symput('VP13',le ft(V13)); end; if vp and _name_='mj' then do; V14=vp; call symput('VP14',le ft(V14)); end; if vp and _name_='mh' t hen do; V15=vp; call symput('VP15',le ft(V15)); end; if vp and _name_='mk' t hen do; V16=vp; call symput('VP16',le ft(V16)); end; if vp and _name_='logd a' th en do; V17=vp; call symput('VP17',le ft(V17)); end; if vp and _name_='d ens' then do; V18=vp; call symput('VP18',le ft(V18)); end; run; /**on etudie les 3 premiers axes , contenant le maximum de l’ information**/ /**on calcule les coordonnées des variables sur les axes (1, 2, 3), la contribution , la qualité ce représentation des var**/ data transtat; set transtat; /**coordonnées**/ projv1=prin1*sqrt(&vp1); projv2=prin2*sqrt(&vp2); projv3=prin3*sqrt(&vp3); /**contributions**/ contrv1=prin1*prin1; contrv2=prin2*prin2; contrv3=prin3*prin3; /**cosinus**/ cosv1=projv1*projv1; 21 cosv2=projv2*projv2; cosv3=projv3*projv3; /**qualité de représentation sur les axes 1­2, 1­3****/ qual_12=cosv1+cosv2; qual_13=cosv1+cosv3; run; proc print data=transtat;run; /**on centre et on reduit les donnees**/ proc standard data = sample2 out = stand mean = 0 std =1; var bi bj jk spi sbb sbj sbh sbk c31j c31h c31k mb mi mj mh mk logda dens ; run; /**calcul de la norme 2 au carré**/ data norme; set stand; norme=(bi*bi)+(bj*bj)+(jk*jk)+(spi*spi) +(sbb*sbb)+(sbj*sbj)+(sbh*sbh)+(sbk*sbk)+(c31j*c31j)+(c31h*c31h)+(c31k*c31k)+(mb+ mb)+(mi+mi)+(mj+mj)+(mh+mh)+(mk+mk)+(logda+logda)+(dens+dens); run; proc sort data=sortie ; by pgc;run; proc sort data=norme; by pgc;run; /**on calcule les contribution des individus sur les axes 1, 2, 3 **/ /**les coordonnées des individus sont : prin1, prin2, prin3**/ /*** la qualité de représentation des individus : **/ data sortie; merge sortie norme; by pgc; contri1=(prin1*prin1)/(&vp1); /**contributions = (vecteur propre1)^2 / (valeur propre )**/ contri2=(prin2*prin2)/(&vp2); contri3=(prin3*prin3)/(&vp3); contri1=contri1/4014; /**on divise par le poids**/ contri2=contri2/4014; contri3=contri3/4014; /**cosinus carrés = vect*vect / par norme 2 au carré**/ coscai1=(prin1*prin1)/norme; coscai2=(prin2*prin2)/norme; /**qualité des info sur axe 1 et 2**/ quali=coscai1+coscai2; keep contri1 contri2 pgc typ sbb sbj mj spi bj c31j logda prin1 prin2 coscai1 coscai2 quali; run; 22 /** on construit les graphiques d’ aide a l'i nterpretation ***/ data ano; set transtat; x=projv1; y=projv2; xsys=' 2'; ysys=' 2'; text=_name_; size=1.5; run; symbol1 v=square c=pink; symbol2 i=spline c=blue v=none; data cercle; do i=1 to 100; x=cos(arcos(­1)*i/10); z=sin(arcos(­1)*i/10); output; end; run; data correl; set ano cercle; run; title"representation des variables"; proc gplot data=correl; plot y*x=1 z*x=2 / overlay annotate=ano frame href=0 vref=0; run; data ano; set sortie; x=prin1; y=prin2; xsys=' 2'; ysys=' 2'; text=pgc; size=1; keep pgc x y xsys ysys text size; run; proc sort data=ano; by pgc;run; proc sort data=sample2; by pgc;run; data ano ; merge ano sample2; by pgc;run; 23 data ano; set ano; keep pgc typ sbb sbj mj spi bj c31j logda x y xsys ysys text size;run; symbol1 v=dot c=green; title"representation des individus"; proc gplot data=ano; plot y*x=1 / annotate=ano frame href=0 vref=0; run; /**************************************************************************/ /***** on veut representer les 3 morphologies de differentes couleurs******/ data plan_12; set sortie; drop prin3­prin18; run; data plan_12; set plan_12; keep pgc typ prin1 prin2; run; data elliptique; set plan_12; if ­5<=typ<­2;run; data lenticulaire; set plan_12; if ­2<=typ<1;run; data spirale; set plan_12; if 1<=typ<=10;run; data elliptique; set elliptique; x=prin1; y=prin2; xsys=' 2'; ysys=' 2'; text=pgc; size=1; keep pgc typ x y xsys ysys text size; run; 24 data lenticulaire; set lenticulaire; x=prin1; z=prin2; xsys=' 2'; zsys='2'; text=pgc; size=1; keep pgc typ x z xsys zsys text size; run; data spirale; set spirale; x=prin1; h =prin2; xsys=' 2'; hsys=' 2'; text=pgc; size=1; keep pgc typ x h xsys hsys text size; run; data graph; set elliptique lenticulaire spirale; run; goptions reset=all; symbol1 c=red v=star; symbol2 c=blue v=star; symbol3 c=green v=star; proc gplot data=graph; plot y*x=1 z*x=2 h*x=3 / overlay annotate=graph frame vref=0 href=0 ; run; 25 Simulation de l’algorithme de monte Carlo par chaîne de Markov sur Scilab : // Valeurs de la densité de probabilité d'un e loi normale, aux points du vecteur X function f = gauss(m, sq, x) f=exp((­(x­ones(x)*m)^2)./(2*sq))/ sqrt (2*%pi*sq) endfunction; //Algorithme em : Prend en paramètres un échantillon d'obse rvations : echant //et le nombre d'it ération de l' algorithme : iter function em ( echant , iter ) k=2 //nombre de classes constituant le mélange X=echant n=length(X) P=ones(1,k)/k //initialisation des probas a priori des classes mu=[1:k] //initialisation des espérances de chaque loi sq=ones(1,k) //initialisation des variances de chaque loi h=zeros(n,k) for i=1:iter //etape 0.Estimation des probabilités conditionnelles // P("classe j sachant xi")(par la formule de Bayes) for l=1:k 26 h(:,l)=(P(l)*gauss(mu(l),sq(l),X))' end sumc=sum(h,'c ') for l=1:k h(:,l)=h(:,l)./sumc end //etape 1. Mise a jour des paramètres s=sum(h,'r' ) P=s/n for l=1:k mu(l)=(X*h(:,l))/s(l) sq(l)=(((X­mu(l)*ones(1,n)).^2)*h(:,l))/s(l) end end //On affiche les paramètres estimés disp('p robas des classes estimées' ) disp(P) disp(' mu estimé' ) disp(mu) disp('v ariances estimées' ) disp(sq) // Tracé des deux densités xbasc() x=[­9:.01:9] Y=zeros(x) Z=zeros(x) Y=gauss(mu(1),sq(1),x) z=gauss(mu(2),sq(2),x) plot2d(x,Y,5) plot2d(x,z,2) legends(['loi 1','loi 2' ],[5,2],1) endfunction; 27 Utilisation des Matrices : La projection des galaxies de l' échantillon 2 sur les axes 1 et 2 est donnée par la table projection_individus_s2, qui est de la forme : pgc X Y classe X est l' abscisse, Y est l'o rdonnée. La classe vaut ­ e pour elliptique (en rouge) ­ l pour lenticulaires (en bleu) ­ s pour spirales (en vert) La projection des variables de l' échantillon 2 sur les axes 1 et 2 est donnée par la table projection_var_s2, qui est de la forme : X Y nom de la variable (bi, bj, spi, ..) La répartition de l' échantillon dans les 11 groupes représenté dans le plan 1­2 de l' acpn est donnée par la table 11_groupes_s2 : pgc no du groupe X Y Le no du groupe donne la couleur : 1 (gris), 2 (bleu), 3 (vert), 4 (jaune), 5 (or), 6 (violet), 7 (orange), 8 (marron), 9(vert kaki), 10 (rose), 11 (noir). La représentation de ces groupes sur le plan de Tully­Fisher est donnée par la table TFisher_s3s : pgc X Y no du groupe La corrélation entre le paramètre typ (type morphologique) et le paramètre To est donnée par la table corr_typ_To qui est de la forme : pgc To typ La corrélation entre le résidus de Tully­Fisher et le paramètre bj pour les spirales à forte brillance de surface, est donnée par la table corr_resbj_ forte qui est de la forme : pgc bj res La corrélation entre le résidus de T­F et le paramètre bj pour les spirales à faible brillance de surface, est donnée par la table corr_resbj_ faible qui est de la forme : pgc bj res Pour centrer et réduire un ensemble de galaxies par rapport au barycentre de l' échantillon 2 , on doit utiliser le fichier "centrer et réduire par rapport à s2". La table vecteur_prop donne les 18 vecteurs propres (en colonne) nécessaires pour le calcul des coordonnées d'une galaxie quelconque sur les 18 axes créées par l'AC PN sur l' échantillon 2. Ils sont utilisés si on veut projeter une galaxie sur le plan 1­2 de l' ACPN de l' échantillon2. La base orthonormale de la droite des types est donnée par le vecteur : type_base. Il sert à obtenir les projections (notées To) des galaxies sur cet axe. 28