library(learnr) library(FactoMineR) library(factoextra) library(magrittr) library(explor) library(shiny) library(ggplot2) knitr::opts_chunk$set(echo = FALSE) data("tea")
Une analyse des correspondances multiples s'effectue sur un tableau de données X composé de I individus en ligne et J variables qualitatives en colonnes. A l'intersection $x~ij~$, on retrouve la modalité de la variable j pour l'individu i.
$$X =\begin{bmatrix} 1 & .. & j & .. & J\ .. & .. & .. & .. & ..\ i& .. & x~ij~& ..& iJ\ .. & .. & .. & .. & ..\ I & .. & Ij & .. & IJ\ \end{bmatrix}$$
Il est possible d'avoir des variables quantitatives dans notre jeu de données, nous devrons alors les exclures lors de la construction des axes en les mettants en tant que variable supplémentaires pour pouvoir réaliser notre ACM.
On va étudier les individus et les variables. L'A.C.M va étudier pour les individus: la variabilité de ceux-ci, en d'autres termes les différences et les ressemblances entre individus. Pour les variables, on va étudier les liaisons entre celles-ci, et notamment les associations des modalités (n'oublions pas que nous travaillons sur des données qualitatives).
L'ACM est très souvent utilisée pour analyser et synthétiser les résultats d'enquêtes car il y a très souvent des questions à choix multiples qui sont dans l'ACM, les variables (les questions) et leurs modalités (les choix de réponses).
Nous allons essayer de comprendre une Analyse des Correspondances Multiples (ACM) grâce au package FactoMineR
et sa fonction MCA
. A partir du dataset tea.csv
, nous verrons les différents graphiques et leurs options qu'il est possible de tirer d'une ACM grâce à FacotoMineR et factoextra.
Visualisons comment est construit ce jeu de données grâce à la fonction summary
:
summary(tea)
head(tea)
Une ou plusieurs réponses sont possibles :
quiz( question("A quelle catégorie appartient la variable sport?", answer("Qualitative illustrative",correct = TRUE), answer("Qualitative active"), answer("Quantitative illustrative"), random_answer_order = TRUE, allow_retry = TRUE ), question("Cocher les propositions qui sont correctes?", answer("âge est la seule variable quantitative",correct = TRUE), answer("la variable sexe est une variable active"), answer("âge_Q est une variable qualitative",correct = TRUE), allow_retry = TRUE ) )
Les paramètres essentiels
X --> Un dataframe possédant aux moins I variables qualitatives
ncp --> Le nombre de dimensions que l'on souhaite garder dans les résultats (par défaut: 5)
ind.sup --> Un vecteur indiquant les lignes des individus supplémentaires
quanti.sup --> Un vecteur indiquant les colonnes des variables quantitatives supplémentaires (TOUTES LES VARIABLES QUANTITATIVES OBLIGATOIREMENT)
quali.sup --> Un vecteur indiquant les colonnes des variables qualitatives supplémentaires
Les paramètres secondaires
graph --> Booléen qui indique si oui ou non les graphiques vont être affichés
level.ventil --> Une proportion indiquant à partir de laquelle les modalités peuvent être ventilées (par défaut: 0, aucune ventilation n'est faite)
axes --> Un vecteur à deux niveaux indiquants les dimensions des graphiques sortis en résultats
row.w --> Vecteur optionnel du poids des individus (par défaut: un vecteur de 1 pour chaque individu)
na.method --> "NA" or "Average", méthode pour traiter les données manquantes (par défaut: "NA")
tab.disj --> Un dataframe optionnel correspondant au tableau disjonctif complet obtenu suite à la méthode d'imputation du package missMDA
Le dataset comprend donc 300 individus et 36 variables. On remarque que nous avons 1 seule variable quantitative age
et 35 variables qualitatives.
On a donc un tableau des individus avec la quasi-totalité des variables en qualitatives.
Le choix logique est de faire une ACM.
De plus on va distinguer dans cette table, les variables qualitatives 1 à 18 comme des variables sur le comportement et les variables 20 à 36 qui portent sur l'image du produit. On mettra donc notre variable age
en variable quantitative supplémentaire et les variables portant sur l'image du produit en variables qualitatives supplémentaires.^[En étant en variable supplémentaire, les variables ne seront pas prises en comptes lors de la construction des axes.]
Mise en pratique de la fonction MCA
, la variable age est la variable 22, stockons le résultat dans 'res':
res=MCA(X = tea ,quanti.sup = , quali.sup = , graph=FALSE)
res=MCA(X = tea , quanti.sup = c(19) , quali.sup =c(20:36) , graph=FALSE)
res=MCA(X = tea , quanti.sup = c(19) , quali.sup =c(20:36) , graph=FALSE)
Lors du lancement de la fonction MCA
, nous obtenons notre objet res qui est composé de 7 objets :
res$eig res$call res$ind res$var res$svd$U res$quali.sup res$quanti.sup
$eig nous renvois un tableau contenant les valeurs propres par dimensions en valeurs brutes, en pourcentages et en pourcentages cumulés.
$call qui est lui même composé de 14 objets différents, tous ne sont pas d'une grande importance. Voici les éléments utiles:
$marge.col : Proportion prise par les modalités des J variables qualitatives dans le tableau disjonctif complet.
$marge.row : Proportion prise par les individus (1/I)
$ncp : le nombre d'axe conservé lors de l'ACM.
$Xtot : tableau disjonctif complet.
$N : I * J.
$row.w : Poids de chaque individu (vecteur de 1 par défaut)
$ind est lui aussi composé de plusieurs éléments:
$coord : coordonnées des individus sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$contrib : contributions des individus sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$cos2 : cosinus carré des individus sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$var est similaire à $ind mais pour les variables:
$coord : coordonnées des variables sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$contrib : coordonnées des variables sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$cos2 : cosinus carré des variables sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$v.test : résultat du test de Fisher des variables sur les dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$eta2 : les corrélations des variables en fonctions des dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$quali.sup : la corrélations des variables qualitatives illustratives en fonctions des dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
$quanti.sup : la corrélations des variables quantitatives illustratives en fonctions des dimensions que l'on a prise pour effectuer l'ACP (par défaut les 5 premières).
res<-MCA(X = tea , quanti.sup = c(19) , quali.sup=c(20:36) , graph=FALSE) fviz_eig(res,addlabels=TRUE,ylim=c(0,50))
fviz_eig(res,addlabels=TRUE,ylim=c(0,50))
On voit que les valeurs propres de nos dimensions ne sont pas très élevées, pour réaliser une bonne ACM nous devrions donc en théorie devoir interpréter un certain nombre d'axes. Ici on se contentera des deux premiers.
res<-MCA(X = tea , quanti.sup = c(19) , quali.sup =c(20:36) , graph=FALSE) colnames(tea)
Pour le graphique des variables:
# On peut utiliser invisible=c('quali.sup','quanti.sup') afin de n'avoir que les variables ayants contribuées à la création des axes. plot.MCA(res,choix='var',title="Graphe des variables" , col.var=c(1:18),cex=0.5)
Le graphique des variables indiques quelles variables sont corrélées avec quelles dimensions, les variables en vert sont les qualitatives illustratives, en bleu foncé la variables quantitatives. Pour les variables qualitatives, on utiliser le $\eta^2$ entre la variable qualitative et l'axe, pour les quantitative on utilise le $R^2$.
plot.MCA(res, invisible=c("var","quali.sup"), cex=0.1,select="contrib 50")
Avec le paramètre select="contrib 50"
, nous avons selectionné les 50 individus contribuants le plus à la construction des axes.
Sur la base de l'exemple précedent,affichez maintenant le graphique des 10 variables actives contribuant le plus à la construction des axes :
plot.MCA(res,title="Graphique des variables actives", cex=0.5)
selectMod="contrib 10" ou selectMod="cos2 10" pour ne mettre en valeur que certaines variables. invisible=c("ind","quali.sup") pour masquer les individus et les variables illustatives.
Affichez maintenant le graphiques des variables qualitatives supplémentaires :
plot.MCA(res, title="Graphique des variables illustratives",cex=0.5)
plot.MCA(res, choix='quanti.sup',title="Graphique des variables quantitatives")
Un autre package pour réaliser vos graphiques avec plus de possiblité d'interaction est le package explor
. Vous aurez besoin de d'abord relancer votre ACM.
res=MCA(X = tea , quanti.sup = c(19) , quali.sup =c(20:36) , graph=FALSE)
Puis de lui appliquer la fonctions prepare_results
L'option col_var permet de colorer les individus en fonction de
1 : Du nom
2 : Individu actif/supplémentaire
3 : Position sur l'axe 1
4 : Contribution sur l'axe 1
5 : $Cos^2$ sur l'axe 1
6 : Position sur l'axe 2
7 : Contribution sur l'axe 2
8 : $Cos^2$ sur l'axe 2
9 : Position sur l'axe 3
etc...
test<-prepare_results(res) MCA_ind_plot(test,col_var = 6)
On ne prend pas sur notre graphique d'interprétation de variables qualitatives supplémentaires car aucune ne se projette très bien sur le plan des axes 1 et 2.
res=MCA(X = tea , quanti.sup = c(19) , quali.sup =c(20:36)) plot.MCA(res,title="Graphique des variables actives",invisible=c("quali.sup"), cex=0.5,selectMod="contrib 10",select="contrib 50")
On peut observer que les axes 1 et 2 projettent très bien les lieux où le thé est acheté. Deux groupes d'individus peuvent être ainsi identifiés, les individus qui achètent du thé de qualité dans des magasins spécialisés et ceux qui achètent le thé un peu partout sans se préoccuper de la qualité.
Une réponse possible
question("A quelle catégorie d'individus appartient l'individu n°273?", answer("Ceux qui achètent du thé de qualité en magasins spécialisés"), answer("Ceux qui achètent le thé un peu partout sans se préoccuper de la qualité",correct = TRUE), random_answer_order = TRUE, allow_retry = TRUE )
Vous souhaitez recupérer tous les résultats de votre ACM ? Il suffit d'utiliser la fonction prepare_results()
du package explor
.
prepare_results(res)
fviz_mca_ind(geom.ind="point",res,palette=c("red","yellow","blue","green","brown"),select.ind = list(cos2=0.033),addEllipses=TRUE,col.ind = tea$age_Q)
L'âge ne semble pas avoir d'impact sur la consommation de thé. En effet en regardant ces ellipses de concentrations, à l'exception de la classe 15-24 ans qui ne semble pas très bien se projeter sur l'axe 2, les autres ellipses se confondent presque et leurs barycentres sont très proches les uns des autres.
Réaliser une ACM grâce à Factoshiny
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.