--- title: "Analyse Factorielle Multiple avec R" author: "Maelle AMAND" date: "05/04/2021" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ## Objectif général de cette présentation Analyser le jeu de données "interest" du package {profileR} à l'aide de l'analyse factorielle multiple (AFM, anglais : MFA) grâce aux packages {FactoMineR} et {factoextra}. Ce jeu de données a été conçu à des fins pédagogiques et peut être téléchargé ici : http://psych.colorado.edu/~carey/Courses/PSYC7291/ClassDataSets.htm - différences entres l'AFM et d'autres approches similaire (ACP et ACM) - applications - démo "éclair" de l'ACP et l'ACM => visualisation - AFM étape par étape *En partant d'une analyse générale vers une analyse détaillée des diagnostiques, nous alternerons analyse avec RStudio, interprétation des graphiques et des diagnostiques en passant par un retour aux données brutes.* \newpage ## Connaissances préalables (kit de survie) Niveau 1 : - Connaître les pourcentages - Les angles obtus, droits, aigüs - Savoir retrouver les coordonnées d'un point dans un graphique avec des abscisses et des ordonnées Niveau 2 : - Savoir lire une p-valeur - Les tests de corrélation - Les tests de Chi2 ## Définition brève des ACP, ACM et de l'AFM "Couteau suisse" pour analyser les jeux de données complexes => résumer la complexité en grandes oppositions entre individus => *réduction de dimension*. Analyses exploratoires et descriptives. Simplifie des corrélations complexes entre variables sous la forme d'axes qui résument les oppositions entre individus. Ces axes sont appelés dimensions ou composantes principales ou facteurs. Ces oppositions peuvent émerger sous la forme d'une variable : **QUALI** : caractéristiques d'un lieu de vacances choisi par des géographes et des historiens. Relief intéressant <=> Temps agréablement chaud <=> historiquement intéressant. **QUANTI** : la quantité d'aide accordée par l'Etat pour isoler sa résidence principale. 0 euros <=> 37 .....<=> 600 euros. Un axe peut résumer un groupe de variables. Cette variation est ensuite écartée pour laisser la place aux différences plus subtiles entre individus exprimées dans l'axe 2 etc jusqu'à ce que toutes les différences soient exprimées. Par défaut, FactoMineR s'arrête à 5 axes. Visualisations multiples accompagnées de tableaux de diagnostiques détaillés. #La méthode choisie dépend de la nature des données : - **AFM** : analyse factorielle multiple (**num. et/ou quali.** + familles de variables => "groupes") - ACP : analyse en composante principale (num. au moins 3 variables distinctes) - ACM : analyse des correspondances multiples (quali. au moins 3 variables distinctes) - AFDM : analyse factorielle de données mixtes (quali et quanti, pas de familles de variables). *Attention au rapport entre le nombre d'observations et nombre de variables.* ex : 32 indiv. vs. 566 variables => bloque ex : 44 indiv. vs. 566 variables => OK ex : si on a 1 variable voire 2 => bloque *NB : demander à François Husson pour plus de précisions via le groupe google (?)* FactoMineR users google group : https://groups.google.com/g/factominer-users?pli=1 ## Avec ces méthodes on peut : - Caractériser la variation d'un jeu de données. - Vérifier la présence ou non de corrélations entre les variables. - Détecter les variables qui caractérisent au mieux la variation. - Evaluer les ressemblances et écarts entre les individus. - Classer ces individus en groupes (ajout d'une classification). ## Application de l'AFM et de ses dérivés *Sensorimétrie* - Evaluations de jus d'orange ou de vins par des testeurs et la composition chimique du brevage, l'image de la marque, packaging... *Evaluation* - Evaluation de francophones en anglais sur l'intonation, les consonnes, voyelles. - Evaluation d'individus en fonction de leur résultat au bac, du lycée, du revenu des parents, du recours à des cours particuliers etc... - Performance de sportifs, conditions d'entraînement, environement pendant une compétition, matériel utilisé, moral... *Profilage de clients* - Tests de personalité selon des critères muliples et habitudes d'achat *Textométrie* - Analyses d'articles de presse selon divers critères, catégories sémantiques, type de lectorat, réception de l'article, richesse du vocabulaire, tournures grammaticales... *Linguistique anglaise* - Typologie syntaxique et sémantique de deux intensifieurs *quite* et *rather* dans le British National Corpus. https://journals.openedition.org/anglophonia/558#tocto1n4 *Sociologie* - Evaluation du type de lectorat d'un journal (Enquête *Ouest France*, Escofier & Pagès 2008, p.130 ff.) https://univ-scholarvox-com.ezproxy.u-paris.fr/catalog/book/docid/45001767 *Histoire sociale* - Parcours de vie de soixantuitards activistes. https://www-cairn-info.ezproxy.u-paris.fr/revue-francaise-de-science-politique-2019-4-page-631.htm ## Avantages de ces méthodes statistiques - Contrairement aux régressions, l'ACP, l'ACM et l'AFM ne requièrent pas de relation entre une variable dépendante et des variables indépendantes. - Ces méthodes acceptent plus de 500 variables sans occulter la variation individuelle. Elles redonnent aux individus toute leur importance. "Benzecri a rendu les individus à la statistique (...) sous la forme de points dans un nuage". https://issuu.com/sfleury/docs/st-1994-lebart_salem - Ces méthodes minorent l'effet du bruit dans la variation (*réduction de dimensionalité*). Bruit : schémas de variation jugés mineurs. - Elles sont compatibles avec diverses formes de classification. La réduction de bruit des ACP/ACM/AFM donne souvent des classifications plus robustes. - Aident à sélectionner des individus globalement médians (représentatifs d'un échantillon), des individus globalement très atypiques. ## Quelques inconvénients surmontables - Les grandes tendances qui se dégagent donnent l'impression d'enfoncer des portes ouvertes pour quelqu'un qui connaît bien son domaine mais cela peut rassurer et indiquer que l'on est sur la bonne voie. - Les diagnostiques détaillés font peur au début mais c'est là que l'on peut vraiment interroger ses données sous toutes ses coutures. - Le nuage d'individus peut paraître touffu à analyser or les filtres visuels et l'utilisation de la classification orientent le chercheur dans son analyse. *Quelque soit l'approche statistique, plus les données sont complexes, plus il faut du temps pour en saisir la complexité. Ces approches fournissent une très bonne aide avec plusieurs outils en un (individus => clusters => grandes tendances).* \newpage # Premier apperçu visuel de ces méthodes : pour gens pressés **Exemple de données pour l'ACP** ```{r message=F} library(knitr) # pour générer la table ci-dessous library(profileR) # pour extraire les données IPMMc library(dplyr) # to use recode_factor function # Renommer les noms des variables pour plus de clarté names(IPMMc) <- c("Anxiete","Hypochondrie","Schizophrenie", "Bipolaire", "Pole_nevrose") # Renommer les modalités de la variable Pole_nevrose IPMMc$Pole_nevrose <- recode_factor(IPMMc$Pole_nevrose, "1"= "Nevrose","0"= "Psychose") # Imprimer le tableau modifié kable(IPMMc, caption ="Jeu de données Personalité et Humeur QUANTI", row.names = T) ``` \newpage ## Analyse "éclair" en ACP et classification ```{r message=F} library(FactoMineR) # graphe 1 : nom => carte factorielle / graphe des individus, # graphe 2 : nom => cercle des corrélations / graphe des variables res.pca <- PCA(IPMMc, quali.sup = 5) ``` \newpage ```{r message=F} plot(res.pca, choix="var") ``` \newpage ```{r message=F} # graph 3 : nom => biplot (TOUT EN UN) => individus, var. quali (rose) et var. quanti (bleu) + coloration des individus selon une caractéristique donnée (ici : type de patient atteint de névrose vs. pyschose) library(factoextra) fviz_pca_biplot(res.pca, repel = TRUE, col.var = "#2E9FDF", # Variables color col.ind = "#696969", # Individuals color habillage = "Pole_nevrose") ``` \newpage *Classification post ACP* ```{r} # classification hc.pca <- HCPC(res.pca, nb.clust=3) #Si nb.clust = -1 : laisser le programme décider du nombre optimal de clusters. ``` \newpage ```{r} # Dendrogramme plot(hc.pca, choice="tree") ``` \newpage ```{r} # Dendrogramme + carte factorielle # Aide ? Taper "plot.MFA" # help(plot.MFA) plot(hc.pca, choice="map", draw.tree = F) plot(hc.pca, choice="map", draw.tree = F, legend = list(bty = "y", x = "top")) ``` \newpage ## Analyse "éclair" en ACM et classification Cours Husson : https://www.youtube.com/watch?v=bihScz3OXbw Tuto Husson : https://www.youtube.com/watch?v=mUKz4L2ZsuY *Préparation des données* ```{r message=F} IPMMc2 <- IPMMc IPMMc2$Anxiete <- if_else(IPMMc2$Anxiete > 55,"A1","A0") IPMMc2$Hypochondrie <- if_else(IPMMc2$Hypochondrie > 55,"H1","H0") IPMMc2$Schizophrenie <- if_else(IPMMc2$Schizophrenie > 55,"S1","S0") IPMMc2$Bipolaire <- if_else(IPMMc2$Bipolaire > 55,"B1","B0") IPMMc2$Film <- c("F_Med","F_Psy","F_Med", "F_Hor","F_Med","F_Vio") kable(IPMMc2, caption ="Jeu de données Personalité et Humeur QUALI", row.names = T) ``` \newpage *ACM* ```{r message=F} res.mca <- MCA(IPMMc2, quali.sup=5, graph=F) plot(res.mca,habillage="quali", cex=1, xlim=c(-2,2), repel=T, invisible="quali.sup") # couleur (= habillage) par variable quali #plot(res.mca, choix="ind", invisible=c("var", "quali.sup")) # ind. uniquement #plot(res.mca,invisible=c("quali.sup","ind"),hab="quali") # var. uniquement ``` \newpage *Classification post ACM* ```{r message=F} hc.mca <- HCPC(res.mca, nb.clust=-1) #Si nb.clust = -1 : laisser le programme décider du nombre optimal de clusters. ``` \newpage # AFM étape par étape ## 1 Préparation de ses données Préparer un tableau au format large. Un individu (point de mesure) par ligne et tous les critères d'évaluation en colonne. Pour l'AFM, agencer ses colonnes par groupe de variable. **Info sur les données interest** Jeu de données créé à des fins pédagogiques. 250 individus ont passé des tests de langage, de calcul et d'analyse logique etc. (scores centrés réduits ?). Les individus ont aussi indiqué leurs traits de caractère : gestion du stress, anxiété, impulsivité ou sociabilité...(scores centrés réduits ?). L'âge, le sexe et le nombre d'années de scolarisation depuis le primaire est renseigné. 15 variables retenues et 7 groupes de variables. 128 Femmes, 122 Hommes. ```{r message=F} library(knitr) library(profileR) kable(interest[1:5,1:7], caption ="Jeu de données interest") kable(interest[1:5,8:15], caption ="Jeu de données interest") ``` Groupe de variable 1 : métadonnées (sexe, QUALI) Groupe de variable 2 : métadonnées (années d'étude, l'âge, QUANTI) Groupe de variable 3 : tests linguistiques (vocab, lecture, compléter des phrases, QUANTI) Groupe de variable 4 : tests math_log (math, géométie, logique, QUANTI) Groupe de variable 5 : sociabilité (dominance sociale, sociabilité, QUANTI) Groupe de variable 6 : stress (réaction au stress, taux d'anxiété, QUANTI) Groupe de variable 7 : impulsivité (impulsivité, goût du risque, QUANTI) https://cran.r-project.org/web/packages/profileR/profileR.pdf **Info sur la variable educ**: nombre d'années de scolarisation (système américain) Min : 8 => brevet. Moyenne : => 12 jusqu'à la première/bac. Max : 18 => master. ## 2 Préparation dans R Installer les packages FactoMineR, factoextra & profileR ```{r message=F} #install.packages(c("FactoMineR", "factoextra","profileR")) library(profileR) data("interest") interest$gender<- as.factor(interest$gender) # Renommer le genre pour plus de clarté levels(interest$gender) <- c("F","H") ``` ```{r} summary(interest[1:15]) # ne garder que les 15 variables du début (plus pertinentes ici) ``` ## 3 Executer une AFM ```{r} library(FactoMineR) res <- MFA(interest[1:15], group=c(1,2,3,3,2,2,2), # *group* : indiquer le nombre de colonnes à inclure dans le groupe. # Partir de la gauche. Group 1 : 1 var, group 2 : 2 var, group 4 : 3 var. type=c("n","s","s","s","s","s","s"), #n: les variables du groupe sont nominatives, #s: les variables sont centrées réduites, #c: les variables sont centrées. #Valeure par défaut: s. name.group=c("sexe","educ_age","ling", "math_log","soc","stress","impuls"), # donner un nom à chaque groupe. num.group.sup=c(1,2), graph = F) # Indiquer les groupes qui ne font pas partie de l'analyse et qui sont supplémentaires : groupe 1 et 2 concernent les métadonnées. On veut classifier les individus uniquement par le biais des résultats aux tests scolaires et de personalité. ``` Cours Husson sur les variables supplémentaires : https://youtu.be/8qw0bNfK4H0?t=2039 ## 4 Diagnostiques de base de l'AFM NB : utiliser la fonction summary() pour obtenir les diagnostiques les plus importants. Tuto Husson : https://youtu.be/miCPrUe7Yq8?t=252 ```{r} # Sortir les diagnostiques les plus importants : summary(res) ``` **Faut-il plutôt faire une AFM qu'une ACP ?** *Inspecter les coéfficients de corrélation canoniques de l'AFM (Pagès 2013, p. 123-124).* Chercher la valeur max dans les premières dimensions et la seconde valeure max dans des dimension supérieures. Si les coefficients d'au moins deux groupes en dim 1 de préférence sont compris dans cette tranche, alors il est recommandé d'utiliser l'AFM. Sinon, revérifier son groupement de variables ou ne pas grouper les variables et faire une ACP. ```{r} round(res$group$correlation, 2) ``` *Comparaison avec les données "cas d'école" Wine* ```{r} data(wine) res.W <- MFA(wine, group=c(2,5,3,10,9,2), type=c("n",rep("s",5)), ncp=5, name.group=c("orig","olf","vis","olfag","gust","ens"), num.group.sup=c(1,6), graph = F) round(res.W$group$correlation, 2) ``` **Les valeurs propres : indicateur de la fiabilité des résultats de l'AFM : variation structurée ou aléatoire ?** Cours Husson: https://youtu.be/8qw0bNfK4H0?t=1887 Réponse : 46.9% de la variation est expliquée par les dim 1 & 2. Une dimension => 1 grande tendance / jeu d'opposition entre les individus. Les premières dimensions => les premières dimensions sont les plus pertinentes. Souvent 5 dimensions suffisent pour analyser les données dans le détail. Ici avec les 5 dimensions on explique 81.7% de la variation. Elbow test (test du coude) : si après une dimension la valeur propre chute brutalement puis se stabilise, la dernière dimension recommandée sera celle placée juste avant le coude. Selon les données, on peut aussi inclure les dimensions dont la valeur propre est égale ou supérieure à 1 (cf. Abdi & Williams 2010 p. 441, section "How many components?") Conclusion : la variation ne semble pas aléatoire, cela vaut la peine d'appliquer l'AFM. ```{r message=F} library(factoextra) library(ggrepel) # Visualize eigenvalues (valeurs propres) fviz_screeplot(res, addlabels = TRUE, ylim = c(0, 50)) ``` **Quelles sont les distances entre les individus en fonction des résultats au test de personnalité ?** *graphique : carte factorielle / graphique des individus* Les individus au croisement des axes sont les individus au profil le plus courant. Plus un individu s'écarte des axes, plus il est atypique. Sa position va être conditionnée par les variables (jusqu'ici invisibles mais sous-jacentes) Un individu peut être le meilleur aux tests de logique, être le plus stressé ou le moins sociable. Cela va conditionner sa position sur le graphique. ```{r message=F} plot(res, choix = "ind", axes = c(1,2), repel=F) # avec coloration en fonction du genre ou tout autre variable qualitative. # Seuls les individus caractérisant les extrémités d'une dimension sont indiqués plot(res, choix = "ind", , axes = c(1,2), habillage = "gender", lab.ind =T, select=c("10","11","111","243","56","164","202"), repel=F) plot(res, choix = "ind", , axes = c(1,2), col.ind = "lightgrey", lab.ind =T, cex =1, invisible="quali.sup", autoLab = "yes",select=c("10","11","111","243","56","164","202"), repel=T) ``` ```{r} # 2 individus aux valeurs proches des moyennes : individus 10 et 11 # res$ind$coord ## chercher les individus aux coordonnées proches de zéro pour la dim 1 et 2. # convertir les résultats en data.frame (peut être extrait en txt par la suite) coorddf<- as.data.frame(res$ind$coord) # les noms des colonnes ont un point Dim.1 => renommer au cas où. names(coorddf) <- c("Dim1","Dim2","Dim3","Dim4","Dim5") # ordonner les coordonnées des individus et chercher les valeurs absolues proches de 0.01 pour la dim 1 et 2. On obtien les individus dont les valeurs sont les plus proches de la moyenne. round(coorddf[order( coorddf[,1], coorddf[,2] ),], 2) round(res$ind$coord[c(10,11),c(1:2)], 2) # Vérifier les moyennes round(colMeans(interest[,c(4:15)]), 2) # véfifier les moyennes de ces individus round(head(interest[c(10,11),4:15]), 2) # scores proches de la moyenne partout # Autre façon de vérifier les moyennes (avec ecart.type et minimum/maximum) res$summary.quanti # Les atypiques (souvent aux extrêmes des axes): # Dimension 1 # 111 vs. 243 head(interest[c(111,243,202),(1:9)]) # mauvais aux tests vs. bons aux tests # Dimension 1 => résulats aux tests scolaires. # Dimension 2 # 56 vs. 164 head(interest[c(56,164),(1:15)]) # goût du risque vs. anxiété # Dimension 2 => traits de caractère # Et la famille sociabilité ? # Dimension 3 ? # Vérification de la contribution de chaque variable à chaque dimension. # En pourcentage. round(res$quanti.var$contrib) # Sociabilité est à observer en dimension 3 car elle explique 70% de la variation mise en valeur en dim 3 (38% et 32% soit 70%). #VERIF : la somme des contributions par dimension est bien de 100 par dimension. sum(as.data.frame(res$quanti.var$contrib)[,1]) # Dim 1 sum(as.data.frame(res$quanti.var$contrib)[,2]) # Dim 2 # Attention : il est souvent recommandé d'utiliser le cosinus carré pour vérifier pour vérifier la qualité de représentation des variables et des individus. Bonne qualité = interprétabilité. # Cos2 : qualité de représentation. round(res$quanti.var$cos2, 2) ``` Cours Husson : https://youtu.be/8qw0bNfK4H0?t=2184 Pistes sur les cas où la contribution est élevée mais la qualité de représentation est faible. DIAPO 23 (Cours d'Angelina Roche) https://www.ceremade.dauphine.fr/~roche/Enseignement/ADD/ADD_Cours2.pdf **Rôle des groupes dans la distinction des individus** ```{r} round(res$group$contrib, 4) round(res$group$cos2, 4) plot(res, choix = "group", axes=c(1,2)) plot(res, choix = "group", axes=c(3,4)) plot(res, choix = "group", axes=c(1,4)) ``` **Corrélations entre toutes les variables** Cours Husson : https://youtu.be/8qw0bNfK4H0?t=1242 *Graphique : cercle des corrélations* Flèches proches : corrélées positivement (ling & math_log & educ) Flèches opposées : corrélées négativement (soc vs. stress) Flèches à angle droit : pas de corrélation (stress vs. ling & math_log & educ) ```{r message=F} #FactoMineR #plot(res, axes = c(1,2), choix = "var", habillage = "group", repel=T) # graphique des individus (pour une mise en regard) plot(res, choix = "ind", axes = c(1,2), repel=F) #factoextra fviz_mfa_var(res, axes = c(1,2), choice= "quanti.var",col.var.sup = "lightgrey", repel = T) # Quand les gens sont bons, ils sont généralement bons partout aux tests. # Si je veux 2 indicateurs uniquement : round(res$quanti.var$cor,2) # corrélation positive maximale => 1, pas de corrélation => 0, corrélation négative => -1 # si valeur absolue est proche de 1 : contribution forte à la création des axes (clairement discriminante) # invitation à regarder d'autres axes (impulsivité et sociabilité) # graphique des individus (mise en regard) plot(res, choix = "ind", axes = c(2,3), repel=F) plot(res, choix = "var", axes = c(2,3), repel=F) head(interest[c(51,175),(10:15)]) ``` ## 5 Classification hiérarchique. Dendrogramme et carte factorielle ```{r interest} hc <- HCPC(res,nb.clust=-1) # -1 => laisser le programme décider du nombre de cluster. # help: plot.HCPC plot(hc, choice="bar") ``` ```{r message=F} # vérifier sur quelles dimensions la projection des clusters est la plus pertiente. hc$desc.axes # Ici dim 1 et 2 pour la plupart des clusters sauf cluster 3. Vérifier la variation au sein des individus pour cluster après les premières analyses. ``` ## Meilleure visualisation avec factoextra https://rpkgs.datanovia.com/factoextra/reference/fviz_cluster.html https://agroninfotech.blogspot.com/2020/06/visualizing-clusters-in-r-hierarchical.html ```{r} # Projeter les clusters sur la carte factorielles (dim 1 et 2) library(factoextra) fviz_cluster(hc, data = interest[1:15], main = "Clustering Plot", axes=c(1,2), # ellipse.type = "norm", repel=F, pointsize = 0.5,labelsize = 0) fviz_dend(hc, cex = 0.8, k=3, #attention aux codes couleur qui ne correspondent pas au graphique avec la fonction fviz_cluster() show_labels = F, k_colors = c("#F8766D", "#00BCD8", "#00BA38"), rect = TRUE, rect_border = "gray", rect_fill = F, horiz = F) ``` ## 5 Inspecter les diagnostiques : les points communs entre les individus d'un même cluster. **Les variables ayant contribué le mieux à la caractérisation des clusters (dans l'ensemble)** *NB:* *Présence d'une variable = caractérise significativement les clusters (au moins un)* *Absence d'une variable = n'aide pas suffisemment à caractériser les clusters (souvent : valeur partagée par tous les groupes, trop peu représentée, trop de variation etc.)* Bilan du diagnostique ci-dessous : les résultats aux tests linguistiques disciminent bien les groupes, viennent ensuite les tests scientifiques. Moins discriminant : âge. Pas assez discriminant : sexe (absent) ```{r} hc$desc.var$quanti.var ``` **Rôle des variables dans la caractérisation de chaque cluster : profilage** **Cluster 1** Anxieux, plus âgés que la moyenne, résultats aux tests inférieurs à la moyenne. Taux d'éducation légèrement plus bas que la moyenne. ```{r} library(factoextra) hc$desc.var$quanti$`1` #Synthèse: fviz_cluster(hc, data = interest[1:15], main = "Clustering Plot", axes=c(1,2), # ellipse.type = "norm", repel=F, pointsize = 0.5,labelsize = 0)+ annotate("label", x = -3, y = 0, label = "Anxieux, 40 ans, pas sociable", size=2.5) + annotate("label", x = -3, y = -1, label = "moins bon aux test, moins d'études", size=2.5) ``` **Cluster 2** Goût marqué pour le risque, très sociables, résultats supérieurs aux tests, plus jeunes que la moyenne. Taux d'éducation non significatif. ```{r} hc$desc.var$quanti$`2` #Synthèse: fviz_cluster(hc, data = interest[1:15], main = "Clustering Plot", axes=c(1,2), # ellipse.type = "norm", repel=F, pointsize = 0.5,labelsize = 0)+ annotate("label", x = 0.5, y = 2.5, label = "Aime le risque, 36 ans, sociable", size=2.5) + annotate("label", x = 0.5, y = 2, label = "bon aux test, études NS", size=2.5) ``` **Cluster 3** Excellents résultats aux tests, n'aiment pas le risque, sujets à l'anxiété et au stress. Sociabilité : non significatif => trop de variation au sein du groupe OU valeurs trop proches de la moyenne générale de l'échantillon pour que ces variables soient discriminantes. ```{r} hc$desc.var$quanti$`3` #Synthèse: fviz_cluster(hc, data = interest[1:15], main = "Clustering Plot", axes=c(1,2), # ellipse.type = "norm", repel=F, pointsize = 0.5,labelsize = 0)+ annotate("label", x = 1, y = -0.5, label = "Fort aux tests, n'aime pas le risque", size=2.5) + annotate("label", x = 1, y = -1, label = "anxieux, plus d'études, sociable NS", size=2.5) ``` **Des individus dans des clusters distincts peuvent-ils avoir des points communs ?** *Graphique des individus partiels* Tuto Husson : https://youtu.be/wCTaFaVKGAM?t=1653 Tuto Husson : https://youtu.be/miCPrUe7Yq8?t=664 Tuto Husson : https://youtu.be/g0lM2qQ4lvs?t=483 - On peut identifier des individus classés dans des groupes différents et comparer leurs scores respectifs sur un graphique. - Chaque individu est situé au barycentre de ses scores par famille de variables. - Les scores par famille de variables sont situés au bout des droites qui partent de ce barycentre. Prenons deux individus situés au même endroit en dimension 1 mais de part et d'autre de la dimension 2 (202 et 243). Le graphique des individus partiels va mettre en regard leur point commun (bons résultats aux tests ling. et math) : les droites de chaque individus convergent vers les valeurs hautes de la dimension 1. Ils sont cependant très différents du point de vue du caractère : 202 est très sociable alors que 243 est moins sociable et très anxieux. ```{r} fviz_mfa_ind(res, partial = c(202, 243, 111), alpha=0.1,pointsize=0.5, labelsize=3, repel=T) ``` Vérification des scores pour chaque individu : ```{r} interest[c(111,202,243),c(1:15)] ``` # Encore plus de diagnostiques ! **Liste des diagnostiques disponibles dans l'AFM** ```{r} res # taper le nom du vecteur dans lequel sont stockés les résultats de l'analyse. ``` **Quels groupes sont les plus discriminants au sein des dim 1 et 2** ```{r} plot(res, choix = "axes") ``` **Pour les 3 premières dimensions, quels groupes de variables permettent de distinguer les individus ? / Que représentent les axes** *Dim 1: si on a été bon (+) au test ou non (-).* ```{r message=F} library(factoextra) fviz_contrib(res, choice = "group", axes = 1, top = 10) ``` *Dim 2: si on est impulsif (+) anxieux (-).* ```{r} fviz_contrib(res, choice = "group", axes = 2, top = 10) ``` *Dim 3: si l'on est sociable (+) si l'on est anxieux (-)* ```{r} fviz_contrib(res, choice = "group", axes = 3, top = 10) ``` **Quels autres diagnostiques puis-je avoir sur l'analyse en cluster** ```{r} hc # taper le nom du vecteur dans lequel sont stockés les résultats de l'analyse. ``` **Quelles dimensions sont significativement liées à au moins un cluster?** *Les dimensions 1 à 3 sont liées à la création d'au moins un cluster* *cluster 1 et 2 : dim 1 et 2* *cluster 3 : dim 1, 2, 3 => variation plus complexe ?* Tuto F. Husson : https://youtu.be/6AqPc_kZQ0g?t=739 ```{r} hc$desc.axes ``` **Si je devais résumer mes groupes grâce à 3 variables, lesquelles choisir ?** Tuto F. Husson : https://youtu.be/6AqPc_kZQ0g?t=599 ```{r} hc$desc.var$quanti.var ``` **Quels sont les 5 individus les plus atypiques ? (dont la variation est la plus distante du barycentre des autres groupes** *Etude des parangons* Tuto Husson : https://youtu.be/6AqPc_kZQ0g?t=823 ```{r} hc$desc.ind$para ``` **Quels sont les 5 individus les plus représentatifs de chaque groupe ? (dont la variation est la plus distante de celle des autres groupes)** *Etude de la spécificité* Tuto Husson : https://youtu.be/6AqPc_kZQ0g?t=860 ```{r} hc$desc.ind$dist ``` ## Liens utiles: ** Jeux de données François Husson ** https://husson.github.io/data.html ** Tuto @ mate par François Husson ** https://youtu.be/OGG2Aeg0IN0 ** Tuto @ mate par François Husson, section: AFM ** https://youtu.be/OGG2Aeg0IN0?t=2428 ** Tuto @ mate par François Husson, section : analyse de données textuelles (typologie d'auteurs français sur la base de fréquences lexicales) ** https://youtu.be/OGG2Aeg0IN0?t=5417 ** Références bibliographiques (par ordre de pertinence) ** *Manuels* Pagès 2013, analyse factorielle multiple avec R http://math.agrocampus-ouest.fr/infoglueDeliverLive/enseignement/support2cours/livres/AFM Escofier & Pagès 2008, analyses factorielles simples et mutiples https://univ-scholarvox-com.ezproxy.u-paris.fr/catalog/book/docid/45001767 Lebart & Salem 1994, la statistique textes et les analyses factorielles. https://issuu.com/sfleury/docs/st-1994-lebart_salem *Publications de recherche* Ecole française de l'analyse multivariée : https://arxiv.org/pdf/0805.2879.pdf https://www.jstatsoft.org/article/view/v073i06/v73i06.pdf Application à l'écologie : https://www.kmae-journal.org/articles/kmae/pdf/1990/03/kmae199031806.pdf Plus de publications par l'Agro Campus : http://math.agrocampus-ouest.fr/infoglueDeliverLive/recherche/publications/articles Application à la sociolinguistique : Amand 2019 http://www.theses.fr/2019UNIP7040 Analyses factorielles en sociologie : https://www.cairn.info/analyse-factorielle-simple-en-sociologie--9782804102180-page-1.htm **Tutoriels R** AFM avec FactoMineR http://www.sthda.com/french/articles/38-methodes-des-composantes-principales-dans-r-guide-pratique/77-afm-analyse-factorielle-multiple-avec-r-l-essentiel/ https://cran.r-project.org/web/packages/FactoMineR/FactoMineR.pdf factoextra (visualisation) http://www.sthda.com/english/wiki/factoextra-r-package-easy-multivariate-data-analyses-and-elegant-visualization https://cran.r-project.org/web/packages/factoextra/factoextra.pdf