
Cette vidéo tutorielle montre, pas à pas, comment réaliser une classification ascendante hiérarchique (HCPC) avec le package R FactoMineR. Le présentateur explique d'abord que HCPC s'applique uniquement aux résultats d'une analyse factorielle (ACP pour variables quantitatives, ACM pour qualitatives, AFM pour équilibrer plusieurs groupes). Il charge un jeu de données de températures mensuelles de capitales européennes, décrit la structure du tableau (variables mensuelles, moyenne, amplitude, latitude, longitude, région) et réalise une ACP en précisant les individus actifs et les variables supplémentaires. Il discute du choix du nombre de composantes (ncp) à retenir, montre comment passer de 5 à 8 composantes pour capturer 95 % de l’inertie, puis lance HCPC sur les composantes sélectionnées. Le dendrogramme et le diagramme des gains d’inertie sont utilisés pour choisir le nombre de classes (3 dans l’exemple) et visualiser les individus colorés sur le plan factoriel. Le présentateur détaille les objets de sortie de HCPC : data.cluster, desc.var (tests chi² pour les variables qualitatives, corrélation et v‑tests pour les variables quantitatives), desc.ind (parangons, villes les plus caractéristiques) et la description par axes factoriels. Il explique la consolidation automatique des classes par k‑means, montre comment elle peut modifier l’appartenance d’individus, et indique comment désactiver cette consolidation avec l’argument console=FALSE. L’ensemble constitue un guide complet, du pré‑traitement factoriel à l’interprétation des classes obtenues.
Chapters
L'objectif de cette vidéo est de montrer comment faire une classification ascendante hiérarchique avec FactoMineR. Dans FactoMineR, la classification ascendante hiérarchique est réalisée sur des objets résultats d'une analyse factorielle, donc sur les résultats d'une ACP, les résultats d'une ACM ou les résultats d'une AFM. Donc si vous voulez classer, construire une classification, un arbre hiérarchique à partir d'individus qui sont décrits par des variables quantitatives, il faudra faire une ACP. Avant de réaliser la classification. Si vous avez des objets qui sont décrits par des variables qualitatives, il faudra réaliser une ACM avant de faire la classification. Et puis si vous voulez équilibrer l'influence de différents groupes de variables, vous pouvez faire une AFM. Donc à chaque fois, pour faire la classification dans FactoMineR, il faut dans un premier temps réaliser une analyse factorielle. Je vais vous montrer l'exemple d'utilisation de la classification à partir d'un exemple d'ACP. Alors pour ce faire, je vais aller récupérer des lignes de code d'un jeu de données sur les températures. Les données et les lignes de code du script sont sur le site de FactoMineR dans le répertoire livres et je vais m'intéresser aux données de température. Donc je vais cliquer ici sur température.txt. J'ai des lignes de code qui vont correspondre à un jeu de données sur des températures dans des capitales européennes. Température sur les différents mois de l'année. Donc là je vais récupérer les 3 premières lignes, Ctrl+C, et les coller dans R, Ctrl+V. Donc dans un premier temps j'ai chargé la librairie FactoMineR, ensuite j'ai chargé le jeu de données que j'appelle température. Donc je vais lire le jeu de données directement sur le site de FactoMineR. Header= TRUE, je dis que le nom des variables est présent, le séparateur de colonnes est le point-virgule, le séparateur de décimales est un point et je précise que le nom des individus est présent dans la première colonne. On peut voir le jeu de données température si je fais summary et on a les variables de janvier jusqu'à décembre, donc ce sont les températures moyennes mensuelles Et ensuite on a quelques variables comme la moyenne, l'amplitude, la latitude, la longitude qui sont utilisées comme des variables quantitatives supplémentaires et puis une variable qualitative qui est une variable sur la région: est-ce que les villes sont situées à l'est, au nord, à l'ouest ou au sud? Ensuite, j'ai réalisé une ACP. Les résultats de l'ACP sont mis dans un objet res. Donc l'ACP sur le jeu de données température Je précise que les individus de 24 à 35 sont des individus supplémentaires. Donc en fait, les individus de 1 à 23 sont les capitales européennes et les individus de 24 à 35 sont des grandes villes européennes mais pas des capitales. Donc on a pris comme individus actifs uniquement les capitales européennes. Je précise que les variables de 13 à 16, donc moyenne, amplitude, latitude et longitude, sont des variables quantitatives supplémentaires. Et je précise que la variable 17 est une variable qualitative supplémentaire, donc la région est une variable qualitative supplémentaire. Donc l'ACP est réalisée ici avec les graphes: le graphe des variables et le graphe des individus. Je ferme ces graphes, je ne m'intéresse pas aux résultats de l'ACP ici. Donc ce que je vais faire maintenant c'est une classification ascendante hiérarchique. Je vais mettre res.HCPC pour conserver les résultats et faire une classification ascendante hiérarchique sur les résultats de res. Alors en fait dans la fonction PCA, il y a un argument par défaut qui est l'argument ncp, c'est-à-dire le nombre de composantes. Donc le nombre de composantes par défaut est égal à 5, c'est-à-dire qu'on conserve 5 composantes quand on fait l'ACP. Et donc quand je vais faire la classification ici, je vais faire la classification en utilisant uniquement les 5 premières composantes de l'ACP. Donc je ne vais pas utiliser l'ensemble des données mais uniquement les 5 premières composantes. Alors si je veux utiliser l'ensemble des composantes de l'ACP, dans la fonction PCA, il faut que je précise l'argument ncp= inf. Alors ça peut être intéressant de ne pas utiliser toutes les composantes de l'ACP parce que justement les dernières composantes, on peut considérer bien souvent que c'est du bruit et donc d'enlever ces dernières composantes va permettre de stabiliser les résultats. Alors on n'est pas obligé par contre de conserver uniquement les 5 premières composantes. Moi dans mon cas, je vais préciser que ncp= 8. Donc je refais l'ACP en conservant 8 composantes. J'ai des résultats qui sont assez stables. Alors pourquoi 8? Parce qu'en regardant la décroissance des valeurs propres, je m'aperçois que les dernières composantes sont très faibles et donc avec les 8 premières je vais conserver 95% de l'information. Maintenant je peux faire ma classification hiérarchique. Je mets les résultats dans un objet res.HCPC et je fais HCPC. Alors on ressent ça bien. J'ai un arbre hiérarchique qui m'est proposé avec bien en haut à droite les gains d'inertie quand on passe de, alors ici cette barre, quand on passe d'une classe à 2 classes, ici quand on passe de 2 classes à 3 classes, etc. Donc ce petit diagramme va permettre de voir combien de classes est-ce qu'on peut conserver pour faire un découpage en classes. Alors il y a un niveau de coupure qui est proposé sur l'arbre hiérarchique. Donc il y a un niveau de coupure ici en 3 classes qui m'est proposé et donc on peut cliquer avec la croix, je place la croix sur un niveau de coupure. Donc je peux cliquer sur le niveau de coupure qui m'est proposé par défaut En cliquant, je coupe l'arbre hiérarchique et donc je fabrique 3 classes: une première classe ici en noir, une classe en vert et une classe en rouge. Donc ici c'est la carte de l'ACP, le graphe de l'ACP avec les individus qui sont coloriés en fonction de l'appartenance à leur classe. J'ai également un arbre hiérarchique qui est dessiné en 3 dimensions sur le plan de l'ACP. On voit le plan de l'ACP avec les 2 premières dimensions ici et puis un arbre hiérarchique. Donc en fait on a ici 3 informations à la fois: le plan de l'ACP, l'arbre hiérarchique et puis avec les couleurs des individus on a l'appartenance aux classes. Donc des informations différentes puisque le plan de l'ACP va résumer l'information principale sur uniquement 2 dimensions, l'arbre hiérarchique, lui, prend l'information sur 8 dimensions donc on a plus que les 2 premières dimensions. Et puis le regroupement en classes permet d'avoir une information très synthétique en fabriquant uniquement 3 classes. Donc on peut maintenant regarder les résultats de la classification: res.HCPS. Donc on a 4 objets qui sont intéressants puis un objet call qui récapitule toutes les options qu'on a pu utiliser. Dans un premier temps, res.HCPs$data.cluster, c'est juste un objet avec le jeu de données initial, donc le jeu de données initial plus une dernière variable qui correspond à la classe lors du découpage en classes. Donc pour chaque individu on a le numéro de classe. Donc ça c'est la première sortie. Deuxième objet de sortie, c'est une description des classes par les variables: desc.var, description des classes par les variables. Alors ici on a la description des classes d'une part par les variables qualitatives et par les variables quantitatives. Donc si on n'a que des variables quantitatives, bien évidemment il n'y aura pas de résultats pour les variables qualitatives. De même, si les variables qualitatives ne permettent pas de décrire les classes, on n'aura pas de résultats. Alors pour les variables qualitatives, on a tout d'abord un test du chi² pour voir si la variable de classe est liée à la variable qualitative ou aux variables qualitatives. Dans mon cas, il y a une seule variable qualitative, la variable région. Et on voit que le test du chi² est significatif, il y a une probabilité critique inférieure à 5%, donc la variable région est liée au découpage en classes qui a été construit. Donc ça c'est d'un point de vue global et puis ensuite on peut regarder modalité par modalité, classe par classe: est-ce que la classe 1 est liée à certaines modalités de la variable région? Donc là on voit que la classe 1 est liée à la modalité région= Sud. Alors si on rentre dans le détail, on voit ici que 80% des villes du sud sont dans la classe 1. Donc parmi les villes du sud, il y en a 80% qui sont dans la classe 1. Et puis le 100 ici signifie que 100% des individus de la classe 1 sont des villes du sud. Donc ces 2 informations un petit peu différentes montrent que la région du sud est surreprésentée dans cette classe. Et donc il y a un test de loi hypergéométrique qui est construit ici. Donc ça c'est la description pour les variables qualitatives. On a ensuite une description pour les variables quantitatives. Tout d'abord, description entre une variable quantitative et l'ensemble de la variable de classe. Donc là on va calculer le rapport de corrélation, le rapport de corrélation qui est la mesure qui est utilisée en analyse de variance pour voir la liaison entre une variable quanti et une variable quali. Donc on voit par exemple que la moyenne est très liée à la variable de classe: il y a un rapport de corrélation qui est de 0.91 et donc c'est significatif. Donc il y a des liaisons entre la moyenne et les classes globalement et après, plus dans le détail, on peut caractériser la classe 1 par exemple. Donc la classe 1 a des températures moyennes qui sont plus élevées la moyenne. Plus élevée que la moyenne, je le sais parce que la v-test ici, la valeur-test, est positive. Alors plus élevée que la moyenne, eh bien en fait la moyenne des températures de la classe 1 est de 15.75 tandis que dans l'ensemble des villes c'est 9.37 et donc cette différence de moyenne ici est significative. Donc même chose pour les variables de septembre, variable octobre, les températures de la classe 1 sont plus élevées que la moyenne. Donc c'était des villes du sud et donc les températures sont plus élevées. Par contre, la latitude est significativement plus faible, la v-test est négative. Voilà comment caractériser la classe 1 et même chose pour les autres classes. Donc on a les descriptions de chacune des classes. La classe 2 et la classe 3, on voit qu'elle n'est pas caractérisée par des variables. Les variables ne prennent pas de valeurs significativement supérieure ou significativement inférieure pour les individus de cette classe. On a également une description par les axes factoriels. Même chose: description par la première dimension de l'ACP, donc il y a une liaison forte, et par la troisième dimension il y a une liaison assez forte aussi. Et donc plus dans le détail, la dimension 1 prend des valeurs plus fortes que la moyenne pour les individus de la classe 1, c'est-à-dire que les individus de la classe 1 ont des coordonnées significativement plus élevées que les autres. Les individus de la classe 2, eux, ont des coordonnées significativement plus faibles que les autres. Donc en fait ici la dimension 1 est une variable quantitative et donc c'est exactement le même test que le test qui est fait précédemment pour les variables. Et le dernier objet intéressant c'est desc.ind qui va donner une description par les individus. Dans un premier temps, on a les parangons de la classe. Le parangon de la classe c'est l'individu qui est le plus proche du centre de gravité de la classe. Le centre de gravité d'une classe c'est un individu fictif et on peut donner le parangon, c'est-à-dire l'individu le plus proche de ce centre de gravité, permet d'illustrer le propos sur ce qu'est la moyenne de la classe. Donc la moyenne de la classe 1 ressemble beaucoup à Rome. Donc si on veut caractériser la classe 1, on peut dire qu'en moyenne c'est ce qui se passe à Rome. Pour la classe 2, c'est en moyenne ce qui se passe à Oslo. Et donc on a ici pour chaque classe les villes qui sont ordonnées de la ville la plus proche du centre de gravité et puis on a ici la distance au centre de gravité. C'est trié et on a les 5 premières villes à chaque fois au maximum. Dans la première classe, il n'y a que 4 villes. Et puis ici on a une autre information sur la ville qui est la plus caractéristique d'une classe. Donc la ville la plus caractéristique de la classe 1 ici c'est Athènes. Alors la plus caractéristique dans le sens où c'est la ville qui est la plus éloignée de toutes les autres classes. Athènes est très éloignée de la classe 2 et très éloignée de la classe 3. De ce point de vue-là, elle est caractéristique de la classe 1. De même, Reykjavik est la ville qui est la plus éloignée des autres classes. Alors quand je dis des autres classes, c'est en fait du centre de gravité des autres classes. Donc voilà pour les résultats de la classification. Alors juste une remarque quand même sur la classification hiérarchique: si je reviens sur le graphe ici, à l'issue de la classification hiérarchique, par défaut, il y a une consolidation des classes qui est effectuée. C'est-à-dire qu'on coupe l'arbre hiérarchique, ce qui génère 3 classes, mais après on utilise la méthode des K-means pour consolider les classes, pour que les classes soient les plus homogènes possible. Et donc il se peut que certains individus changent de classe par rapport à ce qui était proposé. On voit ici par exemple qu'il y a 2 individus qui sont assez proches: il y en a un qui est en rouge, un autre qui est en vert. La consolidation a fait que l'individu qui est ici s'est rapproché des individus qui sont en rouge ici alors qu'avec le découpage en 3 classes il était dans la classe verte dans un premier temps. Mais sur les autres dimensions, cet individu est proche des autres individus en rouge et la consolidation l'a ramené dans la classe rouge. Alors il y a donc entre l'arbre hiérarchique et puis la consolidation une différence de couleur. Si vous voulez qu'il y ait correspondance entre la classification hiérarchique et la construction des classes, il faut utiliser l'argument console= FALSE. Je vais faire console= FALSE, ça signifie que je ne veux pas faire de consolidation des classes à l'issue de la classification hiérarchique du découpage. Et donc là, l'individu reste en vert.
More from Yamossoun

Algorithme de calcule de la racine carrée par dichotomie #dichotomy #squareroot #algorithm









