Par Maelle AMAND , le 05/04/2021
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.
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).
Premier apperçu visuel de ces méthodes : pour gens pressés
Exemple de données pour l’ACP
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)
Anxiete | Hypochondrie | Schizophrenie | Bipolaire | Pole_nevrose | |
---|---|---|---|---|---|
1 | 75 | 60 | 50 | 50 | Nevrose |
2 | 60 | 75 | 45 | 55 | Nevrose |
3 | 60 | 60 | 55 | 45 | Nevrose |
4 | 50 | 50 | 75 | 60 | Psychose |
5 | 45 | 55 | 60 | 75 | Psychose |
6 | 55 | 45 | 60 | 60 | Psychose |
Analyse “éclair” en ACP et classification
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)
plot(res.pca, choix="var")
# 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")
Classification post ACP
# classification
hc.pca <- HCPC(res.pca, nb.clust=3) #Si nb.clust = -1 : laisser le programme décider du nombre optimal de clusters.
# Dendrogramme
plot(hc.pca, choice="tree")
# 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"))
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
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)
Anxiete | Hypochondrie | Schizophrenie | Bipolaire | Pole_nevrose | Film | |
---|---|---|---|---|---|---|
1 | A1 | H1 | S0 | B0 | Nevrose | F_Med |
2 | A1 | H1 | S0 | B0 | Nevrose | F_Psy |
3 | A1 | H1 | S0 | B0 | Nevrose | F_Med |
4 | A0 | H0 | S1 | B1 | Psychose | F_Hor |
5 | A0 | H0 | S1 | B1 | Psychose | F_Med |
6 | A0 | H0 | S1 | B1 | Psychose | F_Vio |
ACM
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
Classification post ACM
hc.mca <- HCPC(res.mca, nb.clust=-1) #Si nb.clust = -1 : laisser le programme décider du nombre optimal de clusters.
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.
library(knitr)
library(profileR)
kable(interest[1:5,1:7], caption ="Jeu de données interest")
gender | educ | age | vocab | reading | sentcomp | mathmtcs |
---|---|---|---|---|---|---|
2 | 18 | 47 | 1.67 | 1.67 | 1.46 | 0.90 |
1 | 12 | 39 | -1.19 | -1.43 | -1.19 | -0.17 |
2 | 12 | 50 | 1.56 | 1.11 | 2.25 | 1.40 |
2 | 12 | 41 | -0.59 | -0.03 | 0.12 | 0.05 |
1 | 14 | 33 | 0.15 | 0.98 | -0.05 | 0.20 |
kable(interest[1:5,8:15], caption ="Jeu de données interest")
geometry | analyrea | socdom | sociabty | stress | worry | impulsve | thrillsk |
---|---|---|---|---|---|---|---|
0.49 | 1.65 | 0.48 | 1.11 | 0.23 | -1.82 | -0.78 | -1.87 |
0.28 | 0.23 | -1.62 | -1.15 | 0.37 | -0.23 | 0.29 | 0.77 |
1.85 | 2.04 | 1.00 | 0.90 | 0.73 | 1.64 | -0.82 | 0.65 |
-0.48 | -0.17 | 0.71 | 0.87 | -0.43 | -0.88 | -0.06 | -0.30 |
-0.68 | 0.58 | -1.17 | -0.79 | -0.94 | -0.38 | 0.12 | -0.36 |
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
#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")
summary(interest[1:15]) # ne garder que les 15 variables du début (plus pertinentes ici)
## gender educ age vocab reading
## F:128 Min. : 8.0 Min. :11.00 Min. :-2.62000 Min. :-2.4700
## H:122 1st Qu.:12.0 1st Qu.:33.00 1st Qu.:-0.60500 1st Qu.:-0.5175
## Median :12.0 Median :40.00 Median : 0.04000 Median : 0.1850
## Mean :12.3 Mean :39.55 Mean : 0.09016 Mean : 0.1350
## 3rd Qu.:12.0 3rd Qu.:46.00 3rd Qu.: 0.86000 3rd Qu.: 0.7975
## Max. :18.0 Max. :65.00 Max. : 2.63000 Max. : 2.7000
## sentcomp mathmtcs geometry analyrea
## Min. :-2.47000 Min. :-3.7100 Min. :-3.3200 Min. :-2.8300
## 1st Qu.:-0.55000 1st Qu.:-0.4925 1st Qu.:-0.5600 1st Qu.:-0.4825
## Median : 0.10500 Median : 0.1000 Median : 0.0900 Median : 0.2000
## Mean : 0.07356 Mean : 0.1055 Mean : 0.1125 Mean : 0.1750
## 3rd Qu.: 0.77500 3rd Qu.: 0.9200 3rd Qu.: 0.7675 3rd Qu.: 0.8375
## Max. : 2.73000 Max. : 3.0600 Max. : 3.8600 Max. : 3.5000
## socdom sociabty stress worry
## Min. :-2.7200 Min. :-3.09000 Min. :-2.56000 Min. :-3.07000
## 1st Qu.:-0.5550 1st Qu.:-0.70750 1st Qu.:-0.61250 1st Qu.:-0.72750
## Median : 0.0700 Median : 0.03500 Median : 0.00500 Median :-0.03000
## Mean : 0.1012 Mean : 0.05968 Mean :-0.01696 Mean : 0.00224
## 3rd Qu.: 0.7400 3rd Qu.: 0.69750 3rd Qu.: 0.61000 3rd Qu.: 0.74000
## Max. : 2.9000 Max. : 2.76000 Max. : 2.78000 Max. : 2.42000
## impulsve thrillsk
## Min. :-3.04000 Min. :-2.9600
## 1st Qu.:-0.65750 1st Qu.:-0.5575
## Median : 0.12500 Median : 0.1500
## Mean : 0.05248 Mean : 0.1410
## 3rd Qu.: 0.71000 3rd Qu.: 0.7950
## Max. : 2.62000 Max. : 3.0000
3 Executer une AFM
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
# Sortir les diagnostiques les plus importants :
summary(res)
##
## Call:
## MFA(base = interest[1:15], group = c(1, 2, 3, 3, 2, 2, 2), type = c("n",
## "s", "s", "s", "s", "s", "s"), name.group = c("sexe", "educ_age",
## "ling", "math_log", "soc", "stress", "impuls"), num.group.sup = c(1,
## 2), graph = F)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 1.814 1.139 0.951 0.868 0.373 0.322 0.261
## % of var. 28.769 18.069 15.075 13.761 5.911 5.104 4.141
## Cumulative % of var. 28.769 46.838 61.913 75.674 81.585 86.689 90.830
## Dim.8 Dim.9 Dim.10 Dim.11 Dim.12
## Variance 0.241 0.124 0.093 0.065 0.056
## % of var. 3.829 1.960 1.467 1.027 0.888
## Cumulative % of var. 94.658 96.618 98.085 99.112 100.000
##
## Groups
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr cos2
## ling | 0.852 46.986 0.715 | 0.001 0.124 0.000 | 0.013 1.360 0.000 |
## math_log | 0.825 45.472 0.669 | 0.002 0.218 0.000 | 0.011 1.182 0.000 |
## soc | 0.055 3.045 0.003 | 0.219 19.231 0.045 | 0.666 70.047 0.415 |
## stress | 0.002 0.101 0.000 | 0.481 42.227 0.205 | 0.252 26.504 0.056 |
## impuls | 0.080 4.396 0.006 | 0.435 38.200 0.171 | 0.009 0.906 0.000 |
##
## Supplementary groups
## Dim.1 cos2 Dim.2 cos2 Dim.3 cos2
## sexe | 0.000 0.000 | 0.000 0.000 | 0.025 0.001 |
## educ_age | 0.263 0.045 | 0.045 0.001 | 0.018 0.000 |
##
## Individuals (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr cos2
## 1 | 2.156 1.025 0.476 | 0.036 0.000 0.000 | 0.012 0.000 0.000 |
## 2 | -1.410 0.438 0.362 | -0.468 0.077 0.040 | -1.176 0.582 0.252 |
## 3 | 2.532 1.413 0.646 | -0.563 0.111 0.032 | 1.183 0.589 0.141 |
## 4 | -0.232 0.012 0.030 | 0.640 0.144 0.230 | 0.324 0.044 0.059 |
## 5 | -0.022 0.000 0.000 | -0.144 0.007 0.007 | -1.422 0.851 0.683 |
## 6 | 0.651 0.093 0.063 | 1.899 1.265 0.537 | -0.289 0.035 0.012 |
## 7 | 0.161 0.006 0.007 | 0.771 0.208 0.168 | 0.191 0.015 0.010 |
## 8 | 0.452 0.045 0.082 | 0.589 0.122 0.140 | -0.505 0.107 0.102 |
## 9 | -1.922 0.814 0.814 | 0.524 0.096 0.060 | 0.063 0.002 0.001 |
## 10 | -0.072 0.001 0.003 | -0.168 0.010 0.017 | 0.035 0.001 0.001 |
##
## Continuous variables (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr cos2
## vocab | 0.888 16.963 0.788 | 0.047 0.074 0.002 | -0.083 0.286 0.007 |
## reading | 0.838 15.115 0.702 | -0.035 0.042 0.001 | -0.134 0.734 0.018 |
## sentcomp | 0.832 14.909 0.693 | 0.016 0.009 0.000 | -0.091 0.340 0.008 |
## mathmtcs | 0.862 16.153 0.744 | 0.011 0.004 0.000 | -0.156 1.003 0.024 |
## geometry | 0.804 14.022 0.646 | 0.005 0.001 0.000 | 0.001 0.000 0.000 |
## analyrea | 0.839 15.296 0.704 | 0.079 0.213 0.006 | -0.066 0.179 0.004 |
## socdom | 0.196 1.332 0.038 | 0.378 7.914 0.143 | 0.757 38.039 0.573 |
## sociabty | 0.222 1.714 0.049 | 0.452 11.317 0.204 | 0.694 32.008 0.482 |
## stress | -0.051 0.098 0.003 | -0.577 19.878 0.333 | 0.415 12.337 0.172 |
## worry | -0.009 0.003 0.000 | -0.612 22.349 0.374 | 0.445 14.167 0.198 |
##
## Supplementary continuous variables
## Dim.1 cos2 Dim.2 cos2 Dim.3 cos2
## educ | 0.548 0.300 | -0.002 0.000 | -0.061 0.004 |
## age | -0.035 0.001 | -0.228 0.052 | -0.131 0.017 |
##
## Supplementary categories
## Dim.1 cos2 v.test Dim.2 cos2 v.test Dim.3 cos2 v.test
## F | 0.021 0.009 0.254 | -0.001 0.000 -0.016 | -0.151 0.442 -2.500 |
## H | -0.022 0.009 -0.254 | 0.001 0.000 0.016 | 0.158 0.442 2.500 |
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.
round(res$group$correlation, 2)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## ling 0.92 0.10 0.12 0.10 0.13
## math_log 0.91 0.07 0.13 0.20 0.13
## soc 0.24 0.47 0.82 0.25 0.19
## stress 0.05 0.69 0.50 0.52 0.94
## impuls 0.29 0.66 0.14 0.70 0.18
Comparaison avec les données “cas d’école” Wine
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)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## olf 0.89 0.96 0.89 0.48 0.42
## vis 0.93 0.22 0.16 0.22 0.17
## olfag 0.97 0.89 0.90 0.57 0.66
## gust 0.95 0.87 0.30 0.25 0.52
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.
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.
plot(res, choix = "ind", axes = c(1,2), repel=F)
## Warning: ggrepel: 144 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
# 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)
# 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)
## Dim1 Dim2 Dim3 Dim4 Dim5
## 111 -4.68 0.88 -0.41 1.00 0.23
## 90 -3.57 0.90 -0.10 -1.17 -0.59
## 196 -3.37 0.41 -0.36 0.36 -0.65
## 227 -3.14 -1.86 0.44 -0.40 -1.21
## 69 -2.91 -2.09 -0.08 0.99 0.34
## 177 -2.82 0.46 -0.28 0.89 0.25
## 169 -2.68 -0.80 1.17 -0.82 -0.70
## 231 -2.57 2.38 0.28 0.38 -1.32
## 12 -2.39 -0.12 -0.35 0.75 0.84
## 52 -2.34 -2.32 0.17 2.04 0.69
## 247 -2.28 0.60 0.96 -1.20 0.08
## 250 -2.25 0.81 -2.05 -0.73 1.11
## 117 -2.24 0.40 0.79 -0.13 -0.05
## 187 -2.23 -0.22 0.27 -1.96 -0.35
## 155 -2.15 -0.56 0.02 -0.67 -0.67
## 83 -2.10 0.04 -0.41 -1.03 0.84
## 40 -2.05 1.21 -0.30 0.28 0.11
## 220 -2.05 -0.63 0.29 -0.59 -1.03
## 72 -2.03 -0.72 -0.82 1.66 -1.21
## 232 -2.02 0.24 -0.04 1.13 -0.28
## 9 -1.92 0.52 0.06 0.13 0.67
## 76 -1.90 -0.63 2.70 -0.85 -1.14
## 241 -1.88 -1.08 -0.47 -1.12 -0.50
## 176 -1.87 0.08 0.71 1.41 -0.45
## 31 -1.83 -1.27 -0.65 -1.12 -0.43
## 25 -1.77 1.02 0.67 -0.63 -0.10
## 174 -1.75 1.36 -1.54 -0.36 0.21
## 74 -1.69 -0.29 0.71 -1.39 0.01
## 158 -1.65 0.63 -0.44 -0.59 0.50
## 163 -1.61 0.21 -0.17 0.62 1.35
## 240 -1.61 -1.15 0.53 -0.43 -0.25
## 234 -1.54 0.57 2.32 0.75 1.19
## 71 -1.54 0.25 1.91 -0.12 -0.05
## 218 -1.51 -0.43 1.01 0.38 0.89
## 216 -1.50 0.39 0.33 -1.60 0.38
## 82 -1.45 -0.55 -2.01 0.90 -0.51
## 2 -1.41 -0.47 -1.18 0.75 0.03
## 119 -1.40 0.06 -0.14 1.15 0.78
## 192 -1.40 0.65 -1.08 1.06 0.31
## 116 -1.36 -1.62 -0.57 1.14 0.01
## 122 -1.36 -1.18 -0.22 -0.30 0.42
## 235 -1.35 0.25 -0.60 -0.55 0.10
## 133 -1.28 -0.24 1.04 -1.01 0.52
## 199 -1.27 0.42 1.32 -0.66 0.67
## 103 -1.25 -0.33 -0.52 -0.22 1.35
## 106 -1.16 0.40 -0.91 2.21 0.33
## 178 -1.15 0.34 0.38 0.33 -0.21
## 246 -1.12 -1.61 -0.10 0.38 -0.54
## 208 -1.12 1.84 0.62 -1.50 -0.21
## 214 -1.12 1.57 0.84 0.28 -0.71
## 80 -1.11 0.27 0.04 -0.38 0.91
## 88 -1.07 -0.10 -1.34 0.10 1.64
## 207 -1.02 0.24 2.04 -0.63 -0.73
## 224 -0.98 -0.31 -0.80 -0.23 -0.36
## 156 -0.95 1.81 1.48 -0.61 -0.19
## 86 -0.93 -0.16 -0.35 1.46 -0.32
## 201 -0.92 -0.81 -1.07 -0.39 0.80
## 160 -0.89 -0.33 0.01 -0.94 1.32
## 70 -0.88 1.19 -1.05 0.45 0.14
## 186 -0.85 -0.91 1.25 0.32 0.02
## 152 -0.85 -1.45 0.67 0.33 0.37
## 162 -0.82 -0.73 -0.38 0.02 0.06
## 87 -0.80 -0.37 -0.71 -0.79 -0.38
## 215 -0.79 0.05 -0.19 -0.13 0.21
## 19 -0.78 -1.41 0.83 -0.48 -0.94
## 36 -0.78 0.49 0.66 0.30 -0.36
## 153 -0.74 -1.48 0.33 -0.10 0.25
## 249 -0.72 -0.19 -1.26 -1.84 -0.58
## 123 -0.71 0.25 -0.96 0.74 0.51
## 66 -0.69 0.07 -0.85 1.16 -1.36
## 50 -0.67 -0.75 -0.62 0.06 0.16
## 99 -0.67 2.14 0.50 -0.65 -0.09
## 195 -0.67 -0.31 0.34 -0.16 -0.48
## 118 -0.66 -1.04 -1.54 1.26 -0.17
## 211 -0.66 -0.93 0.89 -0.65 1.61
## 213 -0.65 1.92 0.25 -0.27 0.17
## 194 -0.62 1.08 -0.06 0.17 0.60
## 205 -0.58 0.13 -0.13 -0.37 0.51
## 49 -0.57 -1.17 1.97 -0.45 -0.12
## 145 -0.56 1.77 -0.08 0.22 0.01
## 242 -0.56 -0.75 1.88 1.47 0.22
## 228 -0.53 0.05 1.46 -0.44 0.60
## 43 -0.53 -1.33 0.81 -0.73 0.57
## 62 -0.52 -0.32 -1.39 0.38 0.28
## 41 -0.50 -0.11 0.00 1.09 0.45
## 175 -0.48 -0.68 -3.15 -0.33 0.26
## 127 -0.48 -0.45 0.36 -0.35 0.58
## 248 -0.47 -0.74 -0.17 -1.20 -1.17
## 166 -0.45 0.28 -0.54 0.63 -0.10
## 165 -0.45 -0.05 0.14 -0.37 -0.80
## 24 -0.45 1.17 0.87 -0.89 0.88
## 102 -0.44 0.16 0.52 -0.40 -0.08
## 222 -0.42 0.72 0.19 1.10 -0.38
## 237 -0.40 0.66 -0.87 2.57 -0.03
## 33 -0.39 -0.95 -0.48 -0.12 -0.11
## 55 -0.38 -1.20 -0.72 -0.63 -0.49
## 61 -0.37 0.19 0.68 0.46 0.15
## 142 -0.35 0.26 0.24 -1.93 0.88
## 27 -0.34 -1.56 -1.01 -0.98 -0.82
## 238 -0.31 0.31 -0.12 -0.40 -1.16
## 59 -0.31 -1.02 -2.07 -0.51 0.17
## 170 -0.30 -0.22 -1.11 0.23 -0.49
## 183 -0.30 0.13 0.19 0.15 0.21
## 143 -0.30 1.45 -0.47 0.02 0.18
## 141 -0.28 -0.02 0.30 0.36 -0.32
## 20 -0.26 -1.10 -0.02 -1.10 -0.72
## 124 -0.24 0.52 -0.87 -0.42 0.79
## 4 -0.23 0.64 0.32 -0.97 -0.23
## 77 -0.23 -1.30 -1.45 1.45 -0.12
## 151 -0.21 0.72 0.36 -0.43 -0.91
## 206 -0.20 1.74 1.29 0.54 -1.45
## 130 -0.19 1.20 0.36 0.08 1.31
## 91 -0.19 -0.94 0.38 0.49 0.69
## 225 -0.13 1.10 1.08 -1.20 1.23
## 11 -0.11 0.01 0.78 0.72 0.85
## 229 -0.09 -0.84 -0.38 1.52 0.09
## 10 -0.07 -0.17 0.04 0.48 -0.51
## 67 -0.06 1.36 -0.53 1.22 -0.47
## 203 -0.05 -2.10 1.94 -0.48 0.46
## 135 -0.04 -1.22 -0.14 -0.07 1.03
## 95 -0.04 1.47 -0.38 0.38 -0.16
## 212 -0.04 1.15 0.99 -0.23 0.18
## 5 -0.02 -0.14 -1.42 -0.35 0.38
## 73 0.00 0.88 0.04 0.68 0.74
## 125 0.00 2.56 -1.08 0.60 0.07
## 129 0.02 -0.78 0.63 -0.60 -0.71
## 134 0.03 -1.46 -0.72 -1.41 -0.97
## 35 0.03 -0.23 -0.89 1.11 -0.25
## 29 0.03 0.48 1.11 -0.92 0.60
## 56 0.03 2.93 -2.17 -0.82 -0.29
## 16 0.05 -0.41 -0.56 0.06 -0.49
## 105 0.07 -0.25 -0.33 -0.37 0.26
## 181 0.08 -1.72 0.02 0.50 0.83
## 79 0.09 0.51 -0.07 -1.02 -0.20
## 159 0.09 0.67 -0.23 -0.09 -0.66
## 226 0.12 -0.57 -2.45 0.22 0.15
## 7 0.16 0.77 0.19 -0.02 -1.11
## 51 0.17 1.67 2.12 1.03 0.19
## 108 0.18 -0.62 1.30 -0.12 0.09
## 154 0.19 -0.56 -0.24 -0.01 -1.51
## 42 0.21 1.88 -0.26 0.62 -0.38
## 81 0.22 1.17 -1.38 1.63 0.41
## 146 0.22 -0.44 2.37 -0.48 -0.05
## 97 0.24 0.00 1.99 0.60 -0.04
## 131 0.25 -0.35 0.33 0.75 -0.42
## 54 0.27 0.86 -1.12 1.41 -0.39
## 37 0.27 0.15 -0.06 -0.22 -0.16
## 180 0.28 -0.02 0.98 0.21 0.50
## 120 0.32 0.40 0.01 0.10 -0.11
## 144 0.32 1.02 0.65 1.07 -0.22
## 148 0.32 -1.52 1.04 2.51 -0.19
## 164 0.32 -2.22 -0.39 -0.35 -0.02
## 239 0.33 0.74 -0.74 -0.12 -0.16
## 115 0.34 -0.09 -0.78 -1.45 0.36
## 17 0.39 -1.08 1.08 -0.35 -0.19
## 26 0.40 -1.64 0.35 0.21 0.13
## 8 0.45 0.59 -0.50 -0.50 0.08
## 22 0.46 1.21 -1.12 1.72 0.65
## 93 0.47 -0.06 -1.43 -0.47 0.19
## 198 0.51 0.55 1.82 0.66 0.23
## 48 0.52 0.12 1.28 -0.99 -0.56
## 114 0.52 0.53 0.17 0.81 -1.13
## 128 0.54 0.81 0.54 0.32 0.55
## 68 0.60 0.34 1.28 0.94 -0.35
## 92 0.62 2.38 -0.44 -1.88 -0.37
## 6 0.65 1.90 -0.29 -0.88 0.41
## 45 0.66 0.08 -0.09 -0.80 0.12
## 139 0.66 1.19 -0.69 1.75 -0.08
## 13 0.69 0.14 1.52 -0.17 -1.09
## 190 0.69 2.06 -0.40 -1.92 -0.40
## 63 0.71 -0.83 -1.06 0.18 0.15
## 53 0.72 0.48 -0.47 0.40 0.27
## 101 0.73 -0.06 -0.08 0.37 -0.88
## 204 0.76 2.06 -0.64 0.18 0.08
## 185 0.76 -2.34 -0.45 -0.68 -0.14
## 121 0.77 0.12 0.53 -0.30 0.37
## 98 0.78 0.36 -0.53 -1.67 -1.19
## 100 0.79 1.96 0.12 -1.59 0.45
## 107 0.79 -0.14 0.60 0.75 -0.21
## 18 0.80 -0.76 -0.82 0.48 -1.10
## 189 0.83 -0.67 1.57 -0.12 0.96
## 96 0.85 2.42 -1.56 -0.17 0.12
## 94 0.86 -1.51 0.40 0.05 0.92
## 191 0.86 1.30 -0.56 0.06 0.34
## 57 0.87 -0.49 2.11 -0.25 -0.75
## 150 0.89 -1.00 -0.32 0.30 -0.94
## 15 0.92 -1.64 -0.70 -2.52 -0.06
## 132 0.94 -0.39 1.34 0.63 0.08
## 157 0.95 1.62 0.13 -0.38 0.27
## 28 0.97 -0.52 -0.63 -0.08 1.04
## 65 0.97 -0.82 0.05 -1.04 0.37
## 230 0.98 0.38 1.03 0.92 -0.05
## 109 1.00 1.70 -0.07 1.93 -0.27
## 44 1.01 0.50 -1.13 0.05 -0.75
## 78 1.02 -1.65 -0.95 -1.84 -0.47
## 113 1.06 -1.76 -1.55 2.47 -0.10
## 219 1.07 -0.79 -0.43 0.18 -0.59
## 161 1.08 -0.77 1.28 2.22 -0.94
## 167 1.09 0.22 1.52 2.15 0.17
## 21 1.09 -0.74 0.89 1.29 0.48
## 39 1.12 -1.95 -0.85 -0.45 -0.51
## 110 1.13 0.29 0.70 -0.10 0.09
## 75 1.16 0.59 -0.87 -0.61 0.30
## 209 1.18 -0.64 0.67 0.59 -0.46
## 245 1.19 0.36 -0.60 -1.03 -0.41
## 149 1.20 -0.21 -0.70 -0.21 -0.37
## 179 1.20 0.49 0.23 -0.87 0.55
## 137 1.21 -1.12 -0.65 -0.77 0.24
## 23 1.23 -1.56 -0.25 1.27 0.43
## 188 1.29 -1.75 -1.04 0.71 0.49
## 140 1.29 -0.85 -0.45 -0.72 -0.24
## 104 1.37 0.58 -1.64 0.07 0.21
## 147 1.38 1.97 -1.80 -0.09 0.18
## 84 1.39 -2.06 -0.19 0.01 -0.28
## 171 1.39 0.58 0.35 0.74 0.61
## 38 1.39 0.45 -1.50 -2.55 -0.11
## 34 1.42 0.68 -0.21 -0.34 -0.19
## 47 1.45 0.40 -0.38 0.45 0.34
## 112 1.48 1.09 -1.34 0.36 -0.21
## 64 1.50 -0.83 -0.48 0.79 -0.14
## 193 1.62 1.29 2.14 -0.84 1.57
## 60 1.68 -0.31 0.07 0.57 1.01
## 182 1.73 -0.14 1.66 0.37 -0.16
## 236 1.74 0.17 0.94 0.09 0.15
## 46 1.75 -0.66 -1.11 -1.08 0.03
## 184 1.75 -1.32 0.53 -0.22 -0.10
## 126 1.77 1.71 2.06 -0.36 -0.52
## 172 1.79 0.41 0.46 0.47 0.16
## 173 1.89 -0.14 -0.23 0.48 0.18
## 136 1.94 1.15 -1.45 0.59 -0.76
## 200 1.96 -1.32 0.91 0.44 0.31
## 168 1.98 -0.64 -0.28 -0.27 -0.79
## 89 1.99 -1.17 -0.16 -1.22 0.93
## 32 2.01 -1.76 -0.64 -2.38 0.21
## 30 2.01 1.24 0.25 0.95 -1.02
## 217 2.08 -1.56 1.17 0.89 -1.06
## 1 2.16 0.04 0.01 -1.54 -1.16
## 223 2.16 -0.51 -1.68 0.69 0.34
## 221 2.17 0.54 -0.66 0.02 0.33
## 14 2.18 0.92 -0.16 0.65 -0.51
## 58 2.27 0.60 1.05 -0.68 0.10
## 233 2.30 -1.27 -0.52 0.46 0.22
## 3 2.53 -0.56 1.18 0.90 0.28
## 210 2.56 -1.74 -0.40 -1.07 0.56
## 244 2.56 -0.71 0.86 -0.28 0.70
## 138 2.57 0.23 0.79 -1.03 0.04
## 85 2.72 0.22 -0.79 -1.43 0.25
## 197 2.84 0.01 -0.25 -0.35 0.51
## 243 3.33 -0.94 0.70 1.58 0.21
## 202 3.93 3.10 1.02 0.73 -0.43
round(res$ind$coord[c(10,11),c(1:2)], 2)
## Dim.1 Dim.2
## 10 -0.07 -0.17
## 11 -0.11 0.01
# Vérifier les moyennes
round(colMeans(interest[,c(4:15)]), 2)
## vocab reading sentcomp mathmtcs geometry analyrea socdom sociabty
## 0.09 0.13 0.07 0.11 0.11 0.17 0.10 0.06
## stress worry impulsve thrillsk
## -0.02 0.00 0.05 0.14
# véfifier les moyennes de ces individus
round(head(interest[c(10,11),4:15]), 2) # scores proches de la moyenne partout
## vocab reading sentcomp mathmtcs geometry analyrea socdom sociabty stress
## 10 0.47 0.38 0.80 -0.03 -0.79 0.14 0.36 -0.58 0.61
## 11 -0.96 0.54 -0.04 -0.25 0.97 0.30 0.89 0.02 -0.14
## worry impulsve thrillsk
## 10 0.01 0.82 -0.12
## 11 1.43 0.49 0.75
# Autre façon de vérifier les moyennes (avec ecart.type et minimum/maximum)
res$summary.quanti
## group variable moyenne ecart.type minimum maximum
## 1 2 educ 12.30 1.61 8.00 18.00
## 2 2 age 39.55 10.02 11.00 65.00
## 3 3 vocab 0.09 1.00 -2.62 2.63
## 4 3 reading 0.13 0.99 -2.47 2.70
## 5 3 sentcomp 0.07 0.99 -2.47 2.73
## 6 4 mathmtcs 0.11 1.05 -3.71 3.06
## 7 4 geometry 0.11 1.03 -3.32 3.86
## 8 4 analyrea 0.18 1.05 -2.83 3.50
## 9 5 socdom 0.10 1.00 -2.72 2.90
## 10 5 sociabty 0.06 1.02 -3.09 2.76
## 11 6 stress -0.02 0.94 -2.56 2.78
## 12 6 worry 0.00 1.00 -3.07 2.42
## 13 7 impulsve 0.05 0.99 -3.04 2.62
## 14 7 thrillsk 0.14 1.03 -2.96 3.00
# 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
## gender educ age vocab reading sentcomp mathmtcs geometry analyrea
## 111 H 8 45 -2.01 -2.47 -2.47 -3.71 -2.59 -2.67
## 243 F 12 32 2.10 2.64 1.52 3.06 2.60 2.35
## 202 H 16 29 2.63 2.23 2.55 1.38 3.86 3.50
# 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é
## gender educ age vocab reading sentcomp mathmtcs geometry analyrea socdom
## 56 H 12 34 0.82 0.25 0.97 -0.22 -0.13 -0.46 -1.34
## 164 F 12 47 0.06 0.25 0.91 0.20 0.21 -0.55 -0.64
## sociabty stress worry impulsve thrillsk
## 56 1.08 -2.56 -3.07 0.26 2.24
## 164 -1.10 0.51 1.28 -2.58 -0.09
# 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)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## vocab 17 0 0 0 2
## reading 15 0 1 0 1
## sentcomp 15 0 0 0 1
## mathmtcs 16 0 1 1 2
## geometry 14 0 0 1 2
## analyrea 15 0 0 2 1
## socdom 1 8 38 3 2
## sociabty 2 11 32 4 1
## stress 0 20 12 18 43
## worry 0 22 14 13 42
## impulsve 4 19 0 25 2
## thrillsk 1 19 1 31 1
# 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
## [1] 100
sum(as.data.frame(res$quanti.var$contrib)[,2]) # Dim 2
## [1] 100
# 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)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## vocab 0.79 0.00 0.01 0.01 0.01
## reading 0.70 0.00 0.02 0.00 0.01
## sentcomp 0.69 0.00 0.01 0.01 0.01
## mathmtcs 0.74 0.00 0.02 0.03 0.02
## geometry 0.65 0.00 0.00 0.03 0.01
## analyrea 0.70 0.01 0.00 0.04 0.01
## socdom 0.04 0.14 0.57 0.04 0.01
## sociabty 0.05 0.20 0.48 0.05 0.01
## stress 0.00 0.33 0.17 0.23 0.24
## worry 0.00 0.37 0.20 0.16 0.23
## impulsve 0.10 0.33 0.00 0.33 0.01
## thrillsk 0.02 0.33 0.01 0.41 0.01
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
round(res$group$contrib, 4)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## ling 46.9864 0.1245 1.3603 0.9529 4.2052
## math_log 45.4715 0.2181 1.1823 4.5949 4.6748
## soc 3.0452 19.2306 70.0473 7.0468 2.9020
## stress 0.1012 42.2269 26.5042 30.7308 85.2174
## impuls 4.3956 38.2000 0.9059 56.6746 3.0006
round(res$group$cos2, 4)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## ling 0.7154 0.0000 0.0002 0.0001 0.0002
## math_log 0.6687 0.0000 0.0001 0.0016 0.0003
## soc 0.0029 0.0449 0.4146 0.0035 0.0001
## stress 0.0000 0.2049 0.0562 0.0629 0.0893
## impuls 0.0057 0.1709 0.0001 0.2182 0.0001
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)
#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)
## Warning: ggrepel: 144 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
#factoextra
fviz_mfa_var(res, axes = c(1,2), choice= "quanti.var",col.var.sup = "lightgrey", repel = T)
## Warning: ggrepel: 1 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
# 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
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## vocab 0.89 0.05 -0.08 0.10 -0.12
## reading 0.84 -0.03 -0.13 0.04 -0.11
## sentcomp 0.83 0.02 -0.09 0.10 -0.12
## mathmtcs 0.86 0.01 -0.16 0.17 0.13
## geometry 0.80 0.00 0.00 0.17 0.12
## analyrea 0.84 0.08 -0.07 0.21 0.11
## socdom 0.20 0.38 0.76 -0.21 -0.11
## sociabty 0.22 0.45 0.69 -0.23 0.07
## stress -0.05 -0.58 0.42 0.48 -0.49
## worry -0.01 -0.61 0.44 0.40 0.48
## impulsve -0.31 0.57 0.04 0.57 0.11
## thrillsk -0.15 0.57 -0.11 0.64 -0.07
# 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)
## Warning: ggrepel: 188 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
plot(res, choix = "var", axes = c(2,3), repel=F)
## Warning: ggrepel: 5 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
head(interest[c(51,175),(10:15)])
## socdom sociabty stress worry impulsve thrillsk
## 51 1.67 2.63 0.31 0.72 1.08 2.09
## 175 -2.32 -2.82 -1.30 -1.02 -0.80 0.17
5 Classification hiérarchique.
Dendrogramme et carte factorielle
hc <- HCPC(res,nb.clust=-1) # -1 => laisser le programme décider du nombre de cluster.