######################################################################
# TP 2 : Analyse des Correspondances Multiples (ACM) avec le logiciel R 
#       (code R avec commentaires)
######################################################################


#===================================
# Jeu de donnees : chiens
#===================================
# Chargement du jeu de donnees
load("../data/chiens.rda")
chiens
##           taille poids velocite intellig affect agress
## beauceron    T++    P+      V++       I+    Af+    Ag+
## basset        T-    P-       V-       I-    Af-    Ag+
## ber_allem    T++    P+      V++      I++    Af+    Ag+
## boxer         T+    P+       V+       I+    Af+    Ag+
## bull-dog      T-    P-       V-       I+    Af+    Ag-
## bull-mass    T++   P++       V-      I++    Af-    Ag+
## caniche       T-    P-       V+      I++    Af+    Ag-
## chihuahua     T-    P-       V-       I-    Af+    Ag-
## cocker        T+    P-       V-       I+    Af+    Ag+
## colley       T++    P+      V++       I+    Af+    Ag-
## dalmatien     T+    P+       V+       I+    Af+    Ag-
## dobermann    T++    P+      V++      I++    Af-    Ag+
## dogue_all    T++   P++      V++       I-    Af-    Ag+
## epagn_bre     T+    P+       V+      I++    Af+    Ag-
## epagn_fra    T++    P+       V+       I+    Af-    Ag-
## fox_hound    T++    P+      V++       I-    Af-    Ag+
## fox_terri     T-    P-       V+       I+    Af+    Ag+
## grand_ble    T++    P+       V+       I-    Af-    Ag+
## labrador      T+    P+       V+       I+    Af+    Ag-
## levrier      T++    P+      V++       I-    Af-    Ag-
## mastiff      T++   P++       V-       I-    Af-    Ag+
## pekinois      T-    P-       V-       I-    Af+    Ag-
## pointer      T++    P+      V++      I++    Af-    Ag-
## saint_ber    T++   P++       V-       I+    Af-    Ag+
## setter       T++    P+      V++       I+    Af-    Ag-
## teckel        T-    P-       V-       I+    Af+    Ag-
## terre_neu    T++   P++       V-       I+    Af-    Ag-
n <- nrow(chiens)
p <- ncol(chiens)
# Chargement du package PCAmixdata
library(FactoMineR) # permet de charger le package "FactoMineR" 
                    # afin de pouvoir l'utiliser par la suite
help(MCA)

summary(chiens)
##  taille   poids    velocite intellig affect   agress  
##  T- : 7   P- : 8   V- :10   I- : 8   Af-:13   Ag-:14  
##  T+ : 5   P+ :14   V+ : 8   I+ :13   Af+:14   Ag+:13  
##  T++:15   P++: 5   V++: 9   I++: 6
# Mise en oeuvre de l'ACM
res <-MCA(chiens)    # tous les calculs de l'ACM sont stockes dans l'objet "res"

                  # NB : par défaut les graphiques des plans factoriels 1-2 
                  # sont affichés a l'écran : 
                  #   - projection des individus sur le plan 1-2
                  #   - projection des modalités du plan 1-2
                  #   - représentation des variables pour le plan 1-2
                  
res <- MCA(chiens, graph=FALSE) # idem sans les graphiques 
      
res # permet de voir la liste de l'ensemble des sorties numeriques disponibles
## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 27 individuals, described by 6 variables
## *The results are available in the following objects:
## 
##    name              description                       
## 1  "$eig"            "eigenvalues"                     
## 2  "$var"            "results for the variables"       
## 3  "$var$coord"      "coord. of the categories"        
## 4  "$var$cos2"       "cos2 for the categories"         
## 5  "$var$contrib"    "contributions of the categories" 
## 6  "$var$v.test"     "v-test for the categories"       
## 7  "$ind"            "results for the individuals"     
## 8  "$ind$coord"      "coord. for the individuals"      
## 9  "$ind$cos2"       "cos2 for the individuals"        
## 10 "$ind$contrib"    "contributions of the individuals"
## 11 "$call"           "intermediate results"            
## 12 "$call$marge.col" "weights of columns"              
## 13 "$call$marge.li"  "weights of rows"
# COMMENTAIRES : une ACM est une ACP centrée "réduite" du tableau disjonctif complet
# qui est faite avec le même poids (1/n) pour tous les individus de l'étude (ici les chiens).
# L'espace des individus est R^16 car  les p=6 variables qualitatives mesurées sur chaque individu
# possèdent un total de 16 modalités.
# L'espace des variables est R^27 car chaque variable a été mesurée sur n=27 individus.
#
# NB : il s'agit d'un tout petit jeu de données (n=27, p=6).
# Cependant, on va voir que l'ACM permet de faire ressortir rapidement et visuellement les grandes 
# informations contenues dans ce jeu de données.
# Choix du nombre d'axes à retenir
round(res$eig,digit=2) # permet d'afficher les valeurs propres et les pourcentages 
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1        0.48                  28.90                             28.90
## dim 2        0.38                  23.08                             51.98
## dim 3        0.21                  12.66                             64.64
## dim 4        0.16                   9.45                             74.09
## dim 5        0.15                   9.01                             83.10
## dim 6        0.12                   7.40                             90.50
## dim 7        0.08                   4.89                             95.38
## dim 8        0.05                   2.74                             98.12
## dim 9        0.02                   1.41                             99.54
## dim 10       0.01                   0.46                            100.00
                       # de variances expliquees par chaque axe


sum(res$eig[,1])     # la somme des valeurs propres en ACM vaut (K-p)/p
## [1] 1.666667
length(res$eig[,1])  # le nombre de valeurs propres non nulles est K-p
## [1] 10
1/p                  # l'inertie moyenne par axe vaut donc 1/p
## [1] 0.1666667
# Graphique de l'ebouli des valeurs propres
barplot(res$eig[,1], main="Eigenvalues", names.arg=1:nrow(res$eig)) 
abline(h=1/p,col=2,lwd=2)

# COMMENTAIRES : comme une ACM et une ACP particulière, on peut utiliser le critère de Kaiser qui
# nous dit que seuls les axes factoriels associés à une valeur propre (eigenvalue) plus grande que 1/p
# sont des axes intéressants à retenir. En effet, en ACM, les variables synthétiques (composantes
# principales) construites ne seront intéressantes que si elles ont une dispersion plus importante
# que la dispersion moyenne par axe. Or par construction, la variance d'une composante principale
# est égale à la valeur propre de l'axe correspondant. D'où le critère de Kaiser qui nous préconise de ne retenir que
# les axes ayant une valeur propre supérieure à 1/p.
#
# NB 1 : si on a une valeur propre inférieure à 1/p, mais proche de 1, je recommande de regarder tout de même quelle est
# l'information apportée par l'axe correspondant.
#
# NB 2 : si on une valeur propre plus grande que 1/p (et proche de 1/p) qui correspond à un axe factoriel 
# pour lequel on n'arrive pas à faire des commentaires intéressants, je recommende de ne pas retenir 
# cet axe factoriel pour la suite des interprétations.
#
# NB 3 : il y a au maximum K-p valeurs propres (si n-1 > K-p) car on peut fabriquer au  maximum K-p 
# composantes principale (= nouvelles variables synthétiques, deux à deux non corrélées, combinaisons 
# linéaires des indicatrices des modalités initiales) à partir de K indicatrices initiales. En effet,
# pour chacune des p variables, les indicatrices des modalités de cette variable somment à 1.
#
# Ici on obtient les sorties numériques suivantes :
#       Eigenvalue Proportion Cumulative
#dim 1        0.48      28.90      28.90
#dim 2        0.38      23.08      51.98
#dim 3        0.21      12.66      64.64
#dim 4        0.16       9.45      74.09
#dim 5        0.15       9.01      83.10
#dim 6        0.12       7.40      90.50
#dim 7        0.08       4.89      95.38
#dim 8        0.05       2.74      98.12
#dim 9        0.02       1.41      99.54
#dim 10       0.01       0.46     100.00
#
# On a donc les trois premières valeurs propres (les valeurs propres sont toujours rangées par ordre décroissant)
# supérieures à 1/p. Selon le critère de Kaiser, il convient donc de retenir 3 axes factoriels et l'ébouli des valeurs
# propres montre bien une "cassure" après 3 axes.
# Le premier axe factoriel permet d'expliquer 28,9% de l'inertie (ou de la variance), le second axe factoriel permet
# d'expliquer 23,08% d'inertie supplémentaire et le troisième 12,66% d'inertie en plus. 
# Ainsi, en considérant le plan 1-2, on récupère 51,98% de l'information (c'est à dire en quoi 
# les individus diffèrent = inertie avec un regard d'algèbre linéaire = variance avec un regard de statisticien).
# Si on conserve 3 composantes principales, on récupère 64,64% de l'information.
#
# NB 4 : En ACM les pourcentages d'inertie expliquée par les axes sont par construction souvent plus petits
# qu'en ACP du fait du nombre important d'axes (K-p). Il ne faut donc pas trop regarder ce critère dans le chois
# des axes à retenir.
# Graphiques des individus, des modalités et des variables sur le plan factoriel 1-2
?plot.MCA # permet d'afficher la fenetre d'aide de la commande "plot.MCA"
plot(res, axes=c(1,2), choix="var") # on retrouve ici la représentation des variables (plan 1-2)

                                  # en fonction de leurs rapports de corrélations avec les composantes principales
                                  # (contributions à l'inertie des axes)
                                  
                                   
# Commentaires de la représentation des variables du plan 1-2 :
# Chaque variable qualitative est représentée en fonction de son rapport de corrélation avec
# la première composante principale (Dim1) et son rapport de corrélation avec la seconde composante principale (Dim2). 
# Un rapport de corrélation proche de 1 (resp. proche de 0) indique que les individus sont bien (resp. mal) 
# discriminés sur la dimension correspondante. Ce rapport de corrélation est également égal à la contribution
# de la variable à l'inertie de l'axe. Un variable qui contribue beaucoup "explique" l'axe.
#
# 1) Les 3 variables "poids", "vélocité" et "taille" vont permettre d'expliquer la position des chiens sur le plan 1-2.
# 2) Sur l'axe 1 (horizontal), la variable taille a un rapport de corrélation avec la première composante proche de 1. 
# Cela signigie que les chiens sont bien discriminés sur cette axe en fonction de leurs tailles. On n'a pas en revanche 
# l'information sur la position des chiens  (droite ou à gauche) en fonction de leur taille. Il faut regarder le graphique
# des modalités pour cela ou encore habiller les chiens avec différentes couleurs en fonction de leur taille.
# 3) L'axe 2 (vertical) est essentiellement caractérisé par la variable "poids" (et dans une moindre mesure "velocité"
# et "taille")
# 4) On peut penser qu'il existe un lien entre les variables "poids", "vélocité" et "taille" sachant qu'elles sont liées
# de manière assez similaires aux composantes principales. Un chien petit et léger serait-il rapide...?
#
# Il convient maintenant de projeter les modalités sur le plan factoriel 1-2 associé : 
# sous-espace de dimension 2 de R^3 (espace des individus) qui apportent le plus d'information (maximisation de l'inertie
# du nuage projeté). Ceci nous permettra alors de caractériser les individus en fonction des variables.

plot(res,axes=c(1,2),choix="ind", invisible = "ind") 

# Commentaires du plan factoriel 1-2 des modalités :
# sous-espace de dimension 2 de R^27 (espace des modalités) qui apportent le plus d'information (maximisation de l'inertie
# du nuage projeté). Ceci nous permettra alors de caractériser les axes et de visualiser certaines liaisons entre modalités.

# 1) Deux modalités qui sont bien projetées et qui sont proches sont possédées par les mêmes individus.
# On en déduit qu'il existe une liaison entre les modalités V-, P- et T- (en haut à droite du plan factoriel) indiquant 
# que les chiens de petites tailles ont tendance à être légers et véloces.
# 2) Sur l'axe 1, on voit une opposition entre les modalités V++, P++ à gauche et les modalités T-, P- à droite. Cela 
# permettra de caractériser les chiens à gauche et à droite du plan factoriel 1-2. 
# 3) Sur l'axe 2, on voit une opposition entre les modalités V-, T-, P- à en haut et les modalitésV+, T+ et P+ à bas. Cela 
# permettra de caractériser les chiens en haut et en bas du plan factoriel 1-2. 

# Il convient maintenant de projeter les individus (chiens) sur le plan factoriel 1-2 associé : 
# sous-espace de dimension 2 de R^16 (espace des individus) qui apportent le plus d'information (maximisation de l'inertie
# du nuage projeté). Ceci nous permettra alors de caractériser les individus en fonction des modalités.

plot(res,axes=c(1,2),choix="ind", invisible = "var") # on retrouve ici le graphique des individus (plan 1-2)

# On a vu que 4 variables sont importantes pour interpréter le plan factoriel 1-2.
# On peut habiller les chiens avec des couleurs en foncton des modalités de ces variables.
plot(res,axes=c(1,2),choix="ind", invisible = "var", habillage=1)

plot(res,axes=c(1,2),choix="ind", invisible = "var", habillage=2)

plot(res,axes=c(1,2),choix="ind", invisible = "var", habillage=3)

plot(res,axes=c(1,2),choix="ind", invisible = "var", habillage=5)

plot(res,axes=c(3,4),choix="ind", invisible = "var", habillage=4)

# Commentaires du plan factoriel 1-2 des individus :
# 1) Sur l'axe 1 (horizontal), on voit par exemple une opposition très claire entre les chiens de grande
# taille à gauche et les chiens de taille petite ou moyenne à droite.
# 2) Sur l'axe 2 (vertical), on voit par exemple une opposition très claire entre les chiens de poids moyen en
# bas et les chiens de léger ou fort en haut.

# On retrouve cette interprétation avec la représentation simultanée des chiens et des modalités
# (possible grace à la relation quasi-barycentrique)

plot(res,axes=c(1,2),choix="ind") 

# Commentaires de la représentation simultanée des individus et des modalités sur  le plan factoriel 1-2:
# On distinge 3 groupes de chiens :
#     - en haut à droite, les petits chiens rapides et affectueux (pekinois, teckel....)
#     - en bas à droite, les chiens de taille, poids et vélocité moyenne et plutôt affectueux
#     - en haut à gauche, les gros chiens aggressifs et pas très affectueux.

# Au delà des sorties graphiques, des sorties numériques sont disponibles et peuvent être utiles pour quantifier certaines
# observations graphiques.
# Sorties numeriques pour les individus et pour les variables
res$ind # permet d'afficher l'ensemble des sorties numériques associées aux individus : 
## $coord
##                Dim 1       Dim 2       Dim 3       Dim 4         Dim 5
## beauceron -0.3172001 -0.41770130 -0.10146771 -0.21143628 -0.1185095442
## basset     0.2541098  1.10122699 -0.19070097  0.29263727 -0.5240085192
## ber_allem -0.4863955 -0.46444958 -0.49813388  0.57742525  0.2759020523
## boxer      0.4473649 -0.88177794  0.69201580  0.26000184 -0.4555898365
## bull-dog   1.0133522  0.54987949 -0.16342320 -0.34991927  0.3307864847
## bull-mass -0.7525745  0.54691183  0.49757307  0.65515266  0.7219463555
## caniche    0.9123015 -0.01618767 -0.57656972  0.62813340  0.4340165309
## chihuahua  0.8407994  0.84385216 -0.46994714 -0.08634287 -0.1773464546
## cocker     0.7332953  0.07907317  0.66223042  0.18974319 -0.1046272364
## colley    -0.1173252 -0.52610765 -0.33489373 -0.65775454  0.1921301958
## dalmatien  0.6472398 -0.99018429  0.45858978 -0.18631642 -0.1449500965
## dobermann -0.8732102 -0.31548110 -0.45231373  0.51008713  0.2398797276
## dogue_all -1.0470168  0.50695768  0.16503476  0.06288820 -0.3165215706
## epagn_bre  0.4780443 -1.03693257  0.06192362  0.60254511  0.2494614999
## epagn_fra -0.1449101 -0.51578295  0.11712661 -0.46892219  0.0008497112
## fox_hound -0.8765675  0.02523985 -0.36217150 -0.01519800 -0.6626648082
## fox_terri  0.8816221  0.13896696  0.05352247  0.28559012 -0.2710348055
## grand_ble -0.5173377 -0.11340393  0.04402869  0.24097247 -0.8179229680
## labrador   0.6472398 -0.99018429  0.45858978 -0.18631642 -0.1449500965
## levrier   -0.6766927 -0.08316651 -0.59559752 -0.46151625 -0.3520250682
## mastiff   -0.7559318  0.88763278  0.58771530  0.12986753 -0.1805981803
## pekinois   0.8407994  0.84385216 -0.46994714 -0.08634287 -0.1773464546
## pointer   -0.6733354 -0.42388745 -0.68573975  0.06376888  0.5505194676
## saint_ber -0.5833790  0.59366011  0.89423924 -0.13370887  0.3275347590
## setter    -0.5041399 -0.37713917 -0.28907358 -0.72509266  0.1561078711
## teckel     1.0133522  0.54987949 -0.16342320 -0.34991927  0.3307864847
## terre_neu -0.3835042  0.48525376  0.66081322 -0.58002713  0.6381744990
## 
## $contrib
##               Dim 1        Dim 2       Dim 3        Dim 4        Dim 5
## beauceron 0.7737679  1.679591265  0.18076074  1.050910561 3.464716e-01
## basset    0.4965777 11.674160199  0.63849009  2.013103024 6.773884e+00
## ber_allem 1.8193797  2.076582082  4.35652825  7.837873991 1.877893e+00
## boxer     1.5391043  7.484976084  8.40776174  1.589130486 5.120461e+00
## bull-dog  7.8970523  2.910764017  0.46889522  2.878342428 2.699333e+00
## bull-mass 4.3555519  2.879430481  4.34672445 10.090013598 1.285792e+01
## caniche   6.4006040  0.002522556  5.83649387  9.274927018 4.647010e+00
## chihuahua 5.4366197  6.854956241  3.87745169  0.175250667 7.759005e-01
## cocker    4.1352521  0.060190825  7.69957277  0.846328783 2.700540e-01
## colley    0.1058588  2.664533548  1.96907570 10.170315797 9.106516e-01
## dalmatien 3.2216221  9.438522677  3.69230120  0.816035401 5.183201e-01
## dobermann 5.8638360  0.958117236  3.59193035  6.116394210 1.419542e+00
## dogue_all 8.4304649  2.474089271  0.47818860  0.092970491 2.471540e+00
## epagn_bre 1.7574399 10.350777943  0.06732262  8.534652985 1.535211e+00
## epagn_fra 0.1614884  2.560978462  0.24085714  5.169021122 1.781163e-05
## fox_hound 5.9090133  0.006132611  2.30290971  0.005429745 1.083300e+01
## fox_terri 5.9773564  0.185906708  0.05029451  1.917313317 1.812221e+00
## grand_ble 2.0582234  0.123802149  0.03403454  1.365028075 1.650387e+01
## labrador  3.2216221  9.438522677  3.69230120  0.816035401 5.183201e-01
## levrier   3.5214957  0.066583845  6.22807925  5.007036206 3.057090e+00
## mastiff   4.3944998  7.584703763  6.06432357  0.396467792 8.046143e-01
## pekinois  5.4366197  6.854956241  3.87745169  0.175250667 7.759005e-01
## pointer   3.4866395  1.729709149  8.25594928  0.095592596 7.476639e+00
## saint_ber 2.6172536  3.392717496 14.03963501  0.420268830 2.646524e+00
## setter    1.9545479  1.369226351  1.46711842 12.359296374 6.011885e-01
## teckel    7.8970523  2.910764017  0.46889522  2.878342428 2.699333e+00
## terre_neu 1.1310567  2.266782110  7.66665317  7.908668005 1.004708e+01
## 
## $cos2
##                Dim 1        Dim 2       Dim 3        Dim 4        Dim 5
## beauceron 0.08863547 0.1536995944 0.009069781 0.0393822110 1.237222e-02
## basset    0.03380431 0.6348671357 0.019038597 0.0448320320 1.437493e-01
## ber_allem 0.15372250 0.1401636585 0.161231704 0.2166455755 4.946160e-02
## boxer     0.11133075 0.4325235284 0.266393303 0.0376048711 1.154621e-01
## bull-dog  0.62448464 0.1838806326 0.016241584 0.0744623393 6.654209e-02
## bull-mass 0.27069077 0.1429582059 0.118328181 0.2051443062 2.491061e-01
## caniche   0.38519392 0.0001212751 0.153853124 0.1826023765 8.717967e-02
## chihuahua 0.37993129 0.3826952203 0.118691149 0.0040065748 1.690306e-02
## cocker    0.27915682 0.0032460020 0.227671518 0.0186905820 5.683030e-03
## colley    0.01239617 0.2492609870 0.100999475 0.3896124090 3.324270e-02
## dalmatien 0.23628517 0.5530165596 0.118619154 0.0195798039 1.185067e-02
## dobermann 0.48761169 0.0636477694 0.130832617 0.1663892363 3.679795e-02
## dogue_all 0.56079391 0.1314738467 0.013933070 0.0020231792 5.125103e-02
## epagn_bre 0.10498339 0.4939526916 0.001761558 0.1667874837 2.858850e-02
## epagn_fra 0.01753323 0.2221256292 0.011454493 0.1835972941 6.028475e-07
## fox_hound 0.55831304 0.0004628928 0.095309358 0.0001678339 3.190765e-01
## fox_terri 0.43627101 0.0108396312 0.001607917 0.0457802078 4.123268e-02
## grand_ble 0.18602321 0.0089387139 0.001347381 0.0403602327 4.649900e-01
## labrador  0.23628517 0.5530165596 0.118619154 0.0195798039 1.185067e-02
## levrier   0.33881559 0.0051177295 0.262473933 0.1575993487 9.169119e-02
## mastiff   0.29999507 0.4136333336 0.181335511 0.0088542146 1.712283e-02
## pekinois  0.37993129 0.3826952203 0.118691149 0.0040065748 1.690306e-02
## pointer   0.29459212 0.1167506763 0.305546227 0.0026422615 1.969263e-01
## saint_ber 0.20156282 0.2087298540 0.473604996 0.0105883741 6.353655e-02
## setter    0.22389437 0.1252980645 0.073613569 0.4631568432 2.146795e-02
## teckel    0.62448464 0.1838806326 0.016241584 0.0744623393 6.654209e-02
## terre_neu 0.08840069 0.1415315741 0.262465947 0.2022144235 2.447904e-01
        # coordonnées, contributions, cosinus carrés.
        # NB : les coordonnées peuvent être utiles dans le cas où deux individus sont projetés au même endroit sur
        # le plan factoriel et qu'il est difficile de lire leurs noms graphiquement...
            
                      
round(res$ind$cos2,digits=3) # uniquement les cosinus carres (arrondis à 3 chiffres après la virgule)
##           Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## beauceron 0.089 0.154 0.009 0.039 0.012
## basset    0.034 0.635 0.019 0.045 0.144
## ber_allem 0.154 0.140 0.161 0.217 0.049
## boxer     0.111 0.433 0.266 0.038 0.115
## bull-dog  0.624 0.184 0.016 0.074 0.067
## bull-mass 0.271 0.143 0.118 0.205 0.249
## caniche   0.385 0.000 0.154 0.183 0.087
## chihuahua 0.380 0.383 0.119 0.004 0.017
## cocker    0.279 0.003 0.228 0.019 0.006
## colley    0.012 0.249 0.101 0.390 0.033
## dalmatien 0.236 0.553 0.119 0.020 0.012
## dobermann 0.488 0.064 0.131 0.166 0.037
## dogue_all 0.561 0.131 0.014 0.002 0.051
## epagn_bre 0.105 0.494 0.002 0.167 0.029
## epagn_fra 0.018 0.222 0.011 0.184 0.000
## fox_hound 0.558 0.000 0.095 0.000 0.319
## fox_terri 0.436 0.011 0.002 0.046 0.041
## grand_ble 0.186 0.009 0.001 0.040 0.465
## labrador  0.236 0.553 0.119 0.020 0.012
## levrier   0.339 0.005 0.262 0.158 0.092
## mastiff   0.300 0.414 0.181 0.009 0.017
## pekinois  0.380 0.383 0.119 0.004 0.017
## pointer   0.295 0.117 0.306 0.003 0.197
## saint_ber 0.202 0.209 0.474 0.011 0.064
## setter    0.224 0.125 0.074 0.463 0.021
## teckel    0.624 0.184 0.016 0.074 0.067
## terre_neu 0.088 0.142 0.262 0.202 0.245
apply(res$ind$cos2[,1:2], 1, sum)
## beauceron    basset ber_allem     boxer  bull-dog bull-mass   caniche chihuahua 
## 0.2423351 0.6686714 0.2938862 0.5438543 0.8083653 0.4136490 0.3853152 0.7626265 
##    cocker    colley dalmatien dobermann dogue_all epagn_bre epagn_fra fox_hound 
## 0.2824028 0.2616572 0.7893017 0.5512595 0.6922678 0.5989361 0.2396589 0.5587759 
## fox_terri grand_ble  labrador   levrier   mastiff  pekinois   pointer saint_ber 
## 0.4471106 0.1949619 0.7893017 0.3439333 0.7136284 0.7626265 0.4113428 0.4102927 
##    setter    teckel terre_neu 
## 0.3491924 0.8083653 0.2299323
sort(apply(res$ind$cos2[,1:2], 1,sum), decreasing = TRUE)     
##  bull-dog    teckel dalmatien  labrador chihuahua  pekinois   mastiff dogue_all 
## 0.8083653 0.8083653 0.7893017 0.7893017 0.7626265 0.7626265 0.7136284 0.6922678 
##    basset epagn_bre fox_hound dobermann     boxer fox_terri bull-mass   pointer 
## 0.6686714 0.5989361 0.5587759 0.5512595 0.5438543 0.4471106 0.4136490 0.4113428 
## saint_ber   caniche    setter   levrier ber_allem    cocker    colley beauceron 
## 0.4102927 0.3853152 0.3491924 0.3439333 0.2938862 0.2824028 0.2616572 0.2423351 
## epagn_fra terre_neu grand_ble 
## 0.2396589 0.2299323 0.1949619
round(sort(apply(res$ind$cos2[,1:2], 1,sum), decreasing = TRUE) , digit=3) # cos2 avec le plan et trié par ordre décroissant
##  bull-dog    teckel dalmatien  labrador chihuahua  pekinois   mastiff dogue_all 
##     0.808     0.808     0.789     0.789     0.763     0.763     0.714     0.692 
##    basset epagn_bre fox_hound dobermann     boxer fox_terri bull-mass   pointer 
##     0.669     0.599     0.559     0.551     0.544     0.447     0.414     0.411 
## saint_ber   caniche    setter   levrier ber_allem    cocker    colley beauceron 
##     0.410     0.385     0.349     0.344     0.294     0.282     0.262     0.242 
## epagn_fra terre_neu grand_ble 
##     0.240     0.230     0.195
plot(res,axes=c(1,2), choix="ind", invisible="var", select = "cos2 9") 

# Commentaires : les cosinus carrés nous donnent la qualité de représentation (en %) des individus 
# sur les axes factoriels.
# Par exemple : 62.4 % de l'information de "teckel" est recupérée sur l'axe 1, 18,4% sur l'axe 2.
# Vu que les axes sont orhtogonaux, on a 62,4+18,4=80.8% de l'information de "teckel" qui est fournie par le plan 1-2.
# "teckel" est bien représenté sur le plan factoriel 1-2.
# On observe ici que les deux chiens les mieux représentés sur ce plan sont "bull-dog" et
# "teckel". On peut choisir de représenter uniquement les 8 chiens les mieux projetés.
#
# NB : Ne jamais faire des commentaires sur des individus qui seraient mal représentés sur le plan factoriel que l'on
# regarder ! car on ne ferait que des fausses déductions...


round(res$ind$contrib,digits=1) # uniquement les contributions en % (arrondies à un chiffre après la virgule)
##           Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## beauceron   0.8   1.7   0.2   1.1   0.3
## basset      0.5  11.7   0.6   2.0   6.8
## ber_allem   1.8   2.1   4.4   7.8   1.9
## boxer       1.5   7.5   8.4   1.6   5.1
## bull-dog    7.9   2.9   0.5   2.9   2.7
## bull-mass   4.4   2.9   4.3  10.1  12.9
## caniche     6.4   0.0   5.8   9.3   4.6
## chihuahua   5.4   6.9   3.9   0.2   0.8
## cocker      4.1   0.1   7.7   0.8   0.3
## colley      0.1   2.7   2.0  10.2   0.9
## dalmatien   3.2   9.4   3.7   0.8   0.5
## dobermann   5.9   1.0   3.6   6.1   1.4
## dogue_all   8.4   2.5   0.5   0.1   2.5
## epagn_bre   1.8  10.4   0.1   8.5   1.5
## epagn_fra   0.2   2.6   0.2   5.2   0.0
## fox_hound   5.9   0.0   2.3   0.0  10.8
## fox_terri   6.0   0.2   0.1   1.9   1.8
## grand_ble   2.1   0.1   0.0   1.4  16.5
## labrador    3.2   9.4   3.7   0.8   0.5
## levrier     3.5   0.1   6.2   5.0   3.1
## mastiff     4.4   7.6   6.1   0.4   0.8
## pekinois    5.4   6.9   3.9   0.2   0.8
## pointer     3.5   1.7   8.3   0.1   7.5
## saint_ber   2.6   3.4  14.0   0.4   2.6
## setter      2.0   1.4   1.5  12.4   0.6
## teckel      7.9   2.9   0.5   2.9   2.7
## terre_neu   1.1   2.3   7.7   7.9  10.0
# Commentaires : On voit que 2 individus contribuent formement à l'axe 1 "bull-dog", "dog_all"
# (avec des contributions de l'ordre de 8%). "colley" n'a pas du tout contribué à la fabrication de ce premier
# axe factoriel.
# Pour l'axe 2, c'est essentiellement "basset", "dalmatien", "epagn_bre" et "labrador" qui ont fortement contribué à sa fabrication. 
#
# NB : je rappelle que l'on ne souhaite pas que seul un individu (ou peu d'invidus lorsque n est grand)
# contribue à la fabrication du (ou des) premier(s) axe(s)
# factoriels car cela rendrait alors les résultats de l'étude instables dans le sens où la présence ou pas de cet
# individu dans les données va entrainer une modification dans la construction des premiers axes factoriels.
# Ici, ce n'est pas le cas. 


res$var # permet d'afficher l'ensemble des sorties numériques associées aux variables : 
## $coord
##          Dim 1       Dim 2       Dim 3       Dim 4       Dim 5
## T-   1.1849557  0.92389650 -0.61599962  0.12014924 -0.01996350
## T+   0.8510880 -1.23171972  1.01605178  0.34245635 -0.31004022
## T++ -0.8366753 -0.02057846 -0.05121744 -0.17022176  0.11266304
## P-   1.1689180  0.82434462 -0.35877044  0.16488382 -0.05122143
## P+  -0.3054053 -0.81887572 -0.23127208 -0.11836395 -0.19020146
## P++ -1.0151341  0.97390062  1.22159452  0.06760494  0.61451838
## V-   0.3199406  1.04490006  0.40172878 -0.08033130  0.30590834
## V+   0.6036867 -0.88781355  0.35631249  0.37024339 -0.37103561
## V++ -0.8920999 -0.37183247 -0.76308752 -0.23984823 -0.01008873
## I-  -0.3490450  0.80855486 -0.35151126  0.02423769 -1.03505999
## I+   0.3694426 -0.28550314  0.49320252 -0.60349180  0.14625633
## I++ -0.3350656 -0.45948302 -0.59992378  1.27524863  1.06319128
## Af- -0.8351500  0.28746968  0.06547357 -0.08315555 -0.04342350
## Af+  0.7754964 -0.26693613 -0.06079688  0.07721587  0.04032182
## Ag-  0.4007145 -0.19425299 -0.30972341 -0.51178817  0.34771663
## Ag+ -0.4315386  0.20919553  0.33354829  0.55115649 -0.37446406
## 
## $contrib
##          Dim 1       Dim 2      Dim 3       Dim 4        Dim 5
## T-  12.5978150  9.58661729  7.7724161  0.39590918  0.011470466
## T+   4.6420727 12.17067028 15.1042375  2.29739639  1.976131613
## T++ 13.4585463  0.01019149  0.1151394  1.70285200  0.782823704
## P-  14.0104164  8.72224556  3.0131477  0.85212159  0.086298489
## P+   1.6736860 15.06207234  2.1911472  0.76846202  2.082406452
## P++  6.6040417  7.60886705 21.8333953  0.08953284  7.763356494
## V-   1.3119931 17.51742290  4.7224026  0.25282794  3.847622109
## V+   3.7368537 10.11705778  2.9720027  4.29655213  4.528255671
## V++  9.1804174  1.99644722 15.3351608  2.02848142  0.003766389
## I-   1.2492400  8.39130827  2.8924483  0.01841315 35.239586898
## I+   2.2742083  1.70014447  9.2531808 18.54990013  1.143358563
## I++  0.8633836  2.03240794  6.3188861 38.22931061 27.885847123
## Af- 11.6215827  1.72364624  0.1630694  0.35219351  0.100786614
## Af+ 10.7914697  1.60052866  0.1514216  0.32703683  0.093587570
## Ag-  2.8813167  0.84758676  3.9298252 14.36693087  6.959671259
## Ag+  3.1029565  0.91278575  4.2321194 15.47207940  7.495030587
## 
## $cos2
##          Dim 1        Dim 2       Dim 3       Dim 4        Dim 5
## T-  0.49144201 0.2987546600 0.132809435 0.005052544 1.394894e-04
## T+  0.16462520 0.3448030588 0.234627550 0.026653716 2.184658e-02
## T++ 0.87503205 0.0005293413 0.003279033 0.036219310 1.586620e-02
## P-  0.57531341 0.2861238116 0.054196308 0.011447021 1.104688e-03
## P+  0.10044717 0.7221387844 0.057601141 0.015087719 3.895941e-02
## P++ 0.23420393 0.2155641859 0.339157541 0.001038734 8.582564e-02
## V-  0.06021292 0.6422447857 0.094932948 0.003795952 5.504701e-02
## V+  0.15344741 0.3318791146 0.053456249 0.057717964 5.796523e-02
## V++ 0.39792110 0.0691296921 0.291151283 0.028763587 5.089122e-05
## I-  0.05129787 0.2752677726 0.052025334 0.000247354 4.510944e-01
## I+  0.12673870 0.0756897524 0.225873819 0.338187895 1.986299e-02
## I++ 0.03207684 0.0603213262 0.102831012 0.464645451 3.229645e-01
## Af- 0.64765585 0.0767360421 0.003980589 0.006420928 1.750915e-03
## Af+ 0.64765585 0.0767360421 0.003980589 0.006420928 1.750915e-03
## Ag- 0.17292377 0.0406368567 0.103307716 0.282075371 1.302074e-01
## Ag+ 0.17292377 0.0406368567 0.103307716 0.282075371 1.302074e-01
## 
## $v.test
##          Dim 1      Dim 2      Dim 3       Dim 4       Dim 5
## T-   3.5745618  2.7870452 -1.8582372  0.36244468 -0.06022230
## T+   2.0688777 -2.9941409  2.4698818  0.83246419 -0.75366505
## T++ -4.7697834 -0.1173153 -0.2919843 -0.97041335  0.64227815
## P-   3.8675766  2.7274932 -1.1870569  0.54554794 -0.16947537
## P+  -1.6160527 -4.3330830 -1.2237768 -0.62632315 -1.00645152
## P++ -2.4676512  2.3674182  2.9695279  0.16433829  1.49380947
## V-   1.2512138  4.0863632  1.5710686 -0.31415719  1.19633699
## V+   1.9974065 -2.9374916  1.1789243  1.22501717 -1.22763837
## V++ -3.2165119 -1.3406610 -2.7513512 -0.86478510 -0.03637543
## I-  -1.1548786  2.6752499 -1.1630386  0.08019479 -3.42468309
## I+   1.8152703 -1.4028306  2.4233694 -2.96527996  0.71863604
## I++ -0.9132348 -1.2523396 -1.6351166  3.47574190  2.89777098
## Af- -4.1035414  1.4124932  0.3217069 -0.40858798 -0.21336304
## Af+  4.1035414 -1.4124932 -0.3217069  0.40858798  0.21336304
## Ag-  2.1203816 -1.0278902 -1.6389023 -2.70812844  1.83994344
## Ag+ -2.1203816  1.0278902  1.6389023  2.70812844 -1.83994344
## 
## $eta2
##              Dim 1      Dim 2       Dim 3       Dim 4       Dim 5
## taille   0.8870733 0.50248565 0.291012710 0.041557939 0.024955885
## poids    0.6440465 0.72468773 0.342222614 0.016166144 0.089467614
## velocite 0.4111741 0.68400737 0.291490812 0.062182113 0.075483501
## intellig 0.1267635 0.27987008 0.233709854 0.536921657 0.578930725
## affect   0.6476559 0.07673604 0.003980589 0.006420928 0.001750915
## agress   0.1729238 0.04063686 0.103307716 0.282075371 0.130207379
           # coordonnées, contributions, cosinus carrés des modalités, rapports de corrélations des variables
           # NB : les coordonnées peuvent être utiles dans le cas où deux modalités sont projetées au même endroit.
             
round(res$var$cos2,digits=3) # uniquement les cosinus carres (arrondis à 3 chiffres après la virgule)
##     Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## T-  0.491 0.299 0.133 0.005 0.000
## T+  0.165 0.345 0.235 0.027 0.022
## T++ 0.875 0.001 0.003 0.036 0.016
## P-  0.575 0.286 0.054 0.011 0.001
## P+  0.100 0.722 0.058 0.015 0.039
## P++ 0.234 0.216 0.339 0.001 0.086
## V-  0.060 0.642 0.095 0.004 0.055
## V+  0.153 0.332 0.053 0.058 0.058
## V++ 0.398 0.069 0.291 0.029 0.000
## I-  0.051 0.275 0.052 0.000 0.451
## I+  0.127 0.076 0.226 0.338 0.020
## I++ 0.032 0.060 0.103 0.465 0.323
## Af- 0.648 0.077 0.004 0.006 0.002
## Af+ 0.648 0.077 0.004 0.006 0.002
## Ag- 0.173 0.041 0.103 0.282 0.130
## Ag+ 0.173 0.041 0.103 0.282 0.130
round(sort(apply(res$var$cos2[,1:2], 1,sum), decreasing = TRUE) , digit=3) # cos2 avec le plan et trié par ordre décroissant
##   T++    P-    P+    T-   Af+   Af-    V-    T+    V+   V++   P++    I-   Ag- 
## 0.876 0.861 0.823 0.790 0.724 0.724 0.702 0.509 0.485 0.467 0.450 0.327 0.214 
##   Ag+    I+   I++ 
## 0.214 0.202 0.092
plot(res,axes=c(1,2),choix="ind", invisible="ind", selectMod = "cos2 7") 

# Comme pour les individus, les cosinus carrés nous donnent la qualité (en %) de réprésentation des modalités sur les
# axes factoriels.
# Par exemple, la modalité "V-" est mal représentée sur l'axe 1 (6% seulement de
# l'information de cette modalité est portée par cet axe), mais elle est  bien représentée sur l'axe 2 (64,2% de
# l'information de cette modalité est fournie par l'axe vertical).
# Globalement sur le plan principal (1-2), cette modalité "V-" a une qualité de représentation
# égale à 7% + 64,2% = 70,2%, elle est donc plutôt bien représentée sur le plan 1-2.
#
# NB : on peut sommer les qualités de représentation de l'axe 1 et de l'axe 2 pour avoir la qualité de représentation
# sur le plan 1-2, car les axes sont construits orthogonaux entre eux, et il n'y a donc pas de redondance d'information
# entre les axes factoriels.
#
# Sept modalités (T++, P-, P+, T-, Af+, Af-, V-) sont bien représentée sur le plan factoriel 1-2  (qualité supérieure à 70%) et 
# et seule la modalité I++ est vraiment mal représentée avec 9,2% de qualité de représentation.. 

round(res$var$contrib,digits=1) # uniquement les contributions en % (arrondies à un chiffre après la virgule)
##     Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## T-   12.6   9.6   7.8   0.4   0.0
## T+    4.6  12.2  15.1   2.3   2.0
## T++  13.5   0.0   0.1   1.7   0.8
## P-   14.0   8.7   3.0   0.9   0.1
## P+    1.7  15.1   2.2   0.8   2.1
## P++   6.6   7.6  21.8   0.1   7.8
## V-    1.3  17.5   4.7   0.3   3.8
## V+    3.7  10.1   3.0   4.3   4.5
## V++   9.2   2.0  15.3   2.0   0.0
## I-    1.2   8.4   2.9   0.0  35.2
## I+    2.3   1.7   9.3  18.5   1.1
## I++   0.9   2.0   6.3  38.2  27.9
## Af-  11.6   1.7   0.2   0.4   0.1
## Af+  10.8   1.6   0.2   0.3   0.1
## Ag-   2.9   0.8   3.9  14.4   7.0
## Ag+   3.1   0.9   4.2  15.5   7.5
# Les contributions (en %) des modalités à la fabrication des axes factoriels nous indiquent naturellement que seules les
# modalités T-, T++, P-, Af- et Af+ ont beaucoup contribué à la fabrication de l'axe 1 
# (avec un pourcentage de contribution de l'ordre de 85,4%). Ces modalités vont permettrent de caractériser cet axe.
# Les modalités T+, P+, V-, V+ ) sont les plus contributrice à la fabrication de l'axe 2
# (avec un pourcentage de contribution supérieur à 10%).



#######################################################################################
#######################################################################################
#######################################################################################

#=========================================================================
# Jeu de données "the" (code et  commentaires rapides des sorties)
#=========================================================================
library(FactoMineR)

the <- read.table("../data/the.csv" , header=TRUE, sep=";")

for (j in 1:18)
  the[,j] <- as.factor(the[,j])

summary(the[,1:18])
##         ptt.dej           gouter           soiree          apres.dejeuner
##  Pas.ptt dej:156   gouter    :169   Pas.soiree:197   apres dej    : 44   
##  ptt dej    :144   Pas.gouter:131   soiree    :103   Pas.apres dej:256   
##                                                                          
##                                                                          
##                                                                          
##                                                                          
##           apres.diner          tt.moment          maison           travail   
##  apres diner    : 21   Pas.tt moment:197   maison    :291   Pas.travail:213  
##  Pas.apres diner:279   tt moment    :103   Pas.maison:  9   travail    : 87  
##                                                                              
##                                                                              
##                                                                              
##                                                                              
##           salon.de.t        amis           resto          bar     
##  Pas.salon de t:242   amis    :196   Pas.resto:221   bar    : 63  
##  salon de t    : 58   Pas.amis:104   resto    : 79   Pas.bar:237  
##                                                                   
##                                                                   
##                                                                   
##                                                                   
##     variete      comment          sucre             forme    
##  noir   : 74   autre :  9   Pas.sucre:155   sachet     :170  
##  parfume:193   citron: 33   sucre    :145   sachet+vrac: 94  
##  vert   : 33   lait  : 63                   vrac       : 36  
##                pur   :195                                    
##                                                              
##                                                              
##               lieuachat                type    
##  GMS               :192   t_bas_de_gamme :  7  
##  GMS+mag.spe.      : 78   t_haut_de_gamme: 53  
##  magasin specialise: 30   t_inconnu      : 12  
##                           t_marque_connue: 95  
##                           t_MDD          : 21  
##                           t_variable     :112
head(the)
##       ptt.dej     gouter     soiree apres.dejeuner     apres.diner
## 1     ptt dej Pas.gouter Pas.soiree  Pas.apres dej Pas.apres diner
## 2     ptt dej Pas.gouter Pas.soiree  Pas.apres dej Pas.apres diner
## 3 Pas.ptt dej     gouter     soiree  Pas.apres dej     apres diner
## 4 Pas.ptt dej Pas.gouter Pas.soiree  Pas.apres dej     apres diner
## 5     ptt dej Pas.gouter     soiree  Pas.apres dej Pas.apres diner
## 6 Pas.ptt dej Pas.gouter Pas.soiree  Pas.apres dej     apres diner
##       tt.moment maison     travail     salon.de.t     amis     resto     bar
## 1 Pas.tt moment maison Pas.travail Pas.salon de t Pas.amis Pas.resto Pas.bar
## 2 Pas.tt moment maison Pas.travail Pas.salon de t Pas.amis Pas.resto Pas.bar
## 3 Pas.tt moment maison     travail Pas.salon de t     amis     resto Pas.bar
## 4 Pas.tt moment maison Pas.travail Pas.salon de t Pas.amis Pas.resto Pas.bar
## 5     tt moment maison Pas.travail Pas.salon de t Pas.amis Pas.resto Pas.bar
## 6 Pas.tt moment maison Pas.travail Pas.salon de t Pas.amis Pas.resto Pas.bar
##   variete comment     sucre  forme lieuachat       type age sexe         CSP
## 1    noir     pur     sucre sachet       GMS  t_inconnu  39    H cadre moyen
## 2    noir    lait Pas.sucre sachet       GMS t_variable  45    F cadre moyen
## 3 parfume     pur Pas.sucre sachet       GMS t_variable  47    F autre actif
## 4 parfume     pur     sucre sachet       GMS t_variable  23    H    etudiant
## 5 parfume     pur Pas.sucre sachet       GMS t_variable  48    H     employe
## 6 parfume     pur Pas.sucre sachet       GMS      t_MDD  21    H    etudiant
##         Sport age_Q   frequence     evasion.exotisme     spiritualite
## 1     sportif 35-44      1/jour Pas.evasion-exotisme Pas.spiritualite
## 2     sportif 45-59      1/jour     evasion-exotisme Pas.spiritualite
## 3     sportif 45-59 + de 2/jour Pas.evasion-exotisme Pas.spiritualite
## 4 Pas.sportif 15-24      1/jour     evasion-exotisme     spiritualite
## 5     sportif 45-59 + de 2/jour     evasion-exotisme     spiritualite
## 6     sportif 15-24      1/jour Pas.evasion-exotisme Pas.spiritualite
##       bon.pr.la.sante     diuretique     convivialite     absorption.fer
## 1     bon pr la sante Pas.diuretique Pas.convivialite Pas.absorption fer
## 2     bon pr la sante     diuretique Pas.convivialite Pas.absorption fer
## 3     bon pr la sante     diuretique     convivialite Pas.absorption fer
## 4     bon pr la sante Pas.diuretique Pas.convivialite Pas.absorption fer
## 5 Pas.bon pr la sante     diuretique     convivialite Pas.absorption fer
## 6     bon pr la sante Pas.diuretique Pas.convivialite Pas.absorption fer
##       feminin     raffine     amaigrissant     excitant     relaxant
## 1 Pas.feminin Pas.raffine Pas.amaigrissant Pas.excitant Pas.relaxant
## 2 Pas.feminin Pas.raffine Pas.amaigrissant     excitant Pas.relaxant
## 3 Pas.feminin Pas.raffine Pas.amaigrissant Pas.excitant     relaxant
## 4 Pas.feminin     raffine Pas.amaigrissant Pas.excitant     relaxant
## 5 Pas.feminin Pas.raffine Pas.amaigrissant Pas.excitant     relaxant
## 6 Pas.feminin Pas.raffine Pas.amaigrissant Pas.excitant     relaxant
##       ss.effet.sante
## 1 Pas.ss effet sante
## 2 Pas.ss effet sante
## 3 Pas.ss effet sante
## 4 Pas.ss effet sante
## 5 Pas.ss effet sante
## 6 Pas.ss effet sante
# l'ACM est réalisée avec:
  # les 18 questions premières variables de comportement en variables actives
  # la variable quantitative age en illustrative
  # les autres variable qualitative (questions signalétiques ou sur l'image du produit) en illustratives


res <- MCA(the, quanti.sup = 19, quali.sup = 20:36, graph=FALSE)  
res <- MCA(the[,1:18],  graph=FALSE)  
                                                   
# Etude du nombre d'axes à retenir    
                     
round(res$eig, digit=3) 
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1       0.148                  9.885                             9.885
## dim 2       0.122                  8.103                            17.988
## dim 3       0.090                  6.001                            23.989
## dim 4       0.078                  5.204                            29.192
## dim 5       0.074                  4.917                            34.109
## dim 6       0.071                  4.759                            38.868
## dim 7       0.068                  4.522                            43.390
## dim 8       0.065                  4.355                            47.745
## dim 9       0.062                  4.123                            51.867
## dim 10      0.059                  3.902                            55.769
## dim 11      0.057                  3.805                            59.574
## dim 12      0.054                  3.628                            63.202
## dim 13      0.052                  3.462                            66.664
## dim 14      0.049                  3.250                            69.914
## dim 15      0.048                  3.221                            73.135
## dim 16      0.047                  3.127                            76.262
## dim 17      0.046                  3.037                            79.298
## dim 18      0.040                  2.683                            81.982
## dim 19      0.038                  2.541                            84.523
## dim 20      0.037                  2.438                            86.961
## dim 21      0.036                  2.378                            89.339
## dim 22      0.035                  2.323                            91.662
## dim 23      0.031                  2.055                            93.717
## dim 24      0.029                  1.915                            95.633
## dim 25      0.027                  1.821                            97.454
## dim 26      0.021                  1.407                            98.861
## dim 27      0.017                  1.139                           100.000
barplot(res$eig[,1], main="Eigenvalues", names.arg=1:nrow(res$eig)) 

# Commentaires rapides : si l'on se base l'ébouli des valeurs propres, il semblerait 
 #raisonnable de regarder 3 dimensions. On note cependant que seulement 23,9% de 
# l'inertie est expliquée par ces 3 dimensions. En ACM, les pourcentages d'inertie
# expliquée par les axes sont souvent petits. 

# Du point de vue des variables, on regarde quelles les informations qui ressortent
# du plan 1-2 ?

plot(res, choix="var", graph.type = "classic")

plot(res, choix="var", invisible = c("quali.sup", "quanti.sup"))

plot(res, choix="var", invisible = c("quali.sup", "quanti.sup"), 
     graph.type = "classic")

round(res$var$eta2, digit=3)
##                Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## ptt.dej        0.025 0.026 0.215 0.083 0.013
## gouter         0.192 0.007 0.054 0.059 0.013
## soiree         0.053 0.002 0.106 0.019 0.000
## apres.dejeuner 0.075 0.026 0.016 0.049 0.173
## apres.diner    0.033 0.048 0.022 0.295 0.046
## tt.moment      0.045 0.001 0.101 0.049 0.009
## maison         0.005 0.000 0.134 0.003 0.009
## travail        0.112 0.043 0.005 0.065 0.008
## salon.de.t     0.372 0.022 0.008 0.003 0.014
## amis           0.243 0.015 0.103 0.001 0.011
## resto          0.226 0.059 0.002 0.006 0.143
## bar            0.147 0.007 0.043 0.001 0.028
## variete        0.090 0.160 0.332 0.032 0.162
## comment        0.103 0.043 0.196 0.303 0.241
## sucre          0.015 0.031 0.210 0.007 0.034
## forme          0.299 0.513 0.016 0.185 0.097
## lieuachat      0.418 0.626 0.042 0.106 0.007
## type           0.216 0.561 0.015 0.142 0.318
# Trois variables sont globalement liées aux deux dimensions : lieu d'achat, type et forme.
# En effet, ces trois variables ont des valeurs de rapports de corrélation plus élevées 
# (contribuent plus).

# On regarde maintenant le graphique des modalités sur le plan 1-2 en choisissant
# de n'afficher que les 10 modalités qui contribuent le plus.

plot(res, choix="ind")

plot(res, choix="ind", invisible=c("ind","quali.sup"), graph.type = "classic")

round(res$var$contrib[,1:2] , digit=3) # affiche les contributions des modalités
##                     Dim 1  Dim 2
## Pas.ptt dej         0.457  0.560
## ptt dej             0.495  0.607
## gouter              3.142  0.135
## Pas.gouter          4.053  0.174
## Pas.soiree          0.683  0.028
## soiree              1.307  0.053
## apres dej           2.385  1.018
## Pas.apres dej       0.410  0.175
## apres diner         1.146  2.025
## Pas.apres diner     0.086  0.152
## Pas.tt moment       0.576  0.014
## tt moment           1.102  0.027
## maison              0.006  0.000
## Pas.maison          0.193  0.005
## Pas.travail         1.212  0.575
## travail             2.967  1.407
## Pas.salon de t      2.694  0.191
## salon de t         11.240  0.796
## amis                3.159  0.242
## Pas.amis            5.953  0.456
## Pas.resto           2.234  0.708
## resto               6.251  1.981
## bar                 4.358  0.248
## Pas.bar             1.158  0.066
## noir                0.108  1.657
## parfume             0.261  2.390
## vert                2.985  3.282
## autre               2.324  0.000
## citron              0.941  0.472
## lait                0.004  1.353
## pur                 0.584  0.140
## Pas.sucre           0.277  0.680
## sucre               0.296  0.727
## sachet              4.317  4.494
## sachet+vrac         6.787  0.025
## vrac                0.093 18.923
## GMS                 4.383  4.592
## GMS+mag.spe.       11.263  0.110
## magasin specialise  0.013 23.888
## t_bas_de_gamme      0.408  0.076
## t_haut_de_gamme     0.336 20.511
## t_inconnu           0.157  1.039
## t_marque_connue     3.002  2.455
## t_MDD               0.739  0.732
## t_variable          3.454  0.808
round(sort(apply(res$var$contrib[,1:2], 1,sum), 
           decreasing = TRUE) , digit=3) # modalité par ordre décroissant de contribution au plan
## magasin specialise    t_haut_de_gamme               vrac         salon de t 
##             23.902             20.847             19.016             12.036 
##       GMS+mag.spe.                GMS             sachet              resto 
##             11.372              8.975              8.811              8.232 
##        sachet+vrac           Pas.amis               vert    t_marque_connue 
##              6.812              6.409              6.266              5.458 
##                bar            travail         t_variable         Pas.gouter 
##              4.605              4.374              4.263              4.228 
##          apres dej               amis             gouter        apres diner 
##              3.402              3.401              3.277              3.171 
##          Pas.resto     Pas.salon de t            parfume              autre 
##              2.943              2.885              2.651              2.325 
##        Pas.travail               noir              t_MDD             citron 
##              1.786              1.765              1.471              1.413 
##             soiree               lait            Pas.bar          t_inconnu 
##              1.360              1.357              1.224              1.196 
##          tt moment            ptt dej              sucre        Pas.ptt dej 
##              1.129              1.102              1.023              1.017 
##          Pas.sucre                pur         Pas.soiree      Pas.tt moment 
##              0.957              0.724              0.711              0.590 
##      Pas.apres dej     t_bas_de_gamme    Pas.apres diner         Pas.maison 
##              0.585              0.484              0.239              0.198 
##             maison 
##              0.006
plot(res, choix="ind", invisible=c("ind","quali.sup"), selectMod = "contrib 15")

plot(res, choix="ind", invisible=c("ind","quali.sup"), selectMod = "cos2 15",
    graph.type="classic")

# On retrouve principalement les modalités des variables globalement liées aux axes.
# On observe dans ce graphique les modalités qui s'associent.

# On regarde maintenant le graphiques des individus sur les plans 1-2 

plot(res, choix="ind", invisible=c("var", "quali.sup"), habillage= 17) # individus colorés selon le lieu d'achat

plot(res, choix="ind", invisible=c("var", "quali.sup"), label = "none")

# On retrouve que les individus sont bien discriminés par les modalités de la variable lieu d'achat.

# Enfin on peut récuperer la matrice des coordonnées factorielles pour faire une classification par exemple

head(res$ind$coord) # uniquement 5 composantes principales
##         Dim 1       Dim 2        Dim 3       Dim 4       Dim 5
## 1 -0.54101455 -0.14860555 -0.305906004  0.15876105  0.57785384
## 2 -0.36124010 -0.07798738 -0.632765190  0.06073348  0.03260245
## 3  0.07293693 -0.16924589  0.246028962 -0.45077746  0.17693914
## 4 -0.57183186  0.01762074  0.203297634 -0.63925837  0.12019206
## 5 -0.25322802 -0.11780164  0.006393492  0.01678726 -0.12655040
## 6 -0.68442482  0.03204058 -0.018115492 -0.45844399  0.15371015
res <- MCA(the, ncp=27, quanti.sup = 19, quali.sup = 20:36, graph=FALSE)  
head(res$ind$coord) # toutes (27) les composantes principales
##         Dim 1       Dim 2        Dim 3       Dim 4       Dim 5       Dim 6
## 1 -0.54101455 -0.14860555 -0.305906004  0.15876105  0.57785384  0.07733873
## 2 -0.36124010 -0.07798738 -0.632765190  0.06073348  0.03260245  0.00160563
## 3  0.07293693 -0.16924589  0.246028962 -0.45077746  0.17693914  0.22281083
## 4 -0.57183186  0.01762074  0.203297634 -0.63925837  0.12019206 -0.12559503
## 5 -0.25322802 -0.11780164  0.006393492  0.01678726 -0.12655040  0.06221474
## 6 -0.68442482  0.03204058 -0.018115492 -0.45844399  0.15371015 -0.21750956
##         Dim 7       Dim 8        Dim 9      Dim 10     Dim 11     Dim 12
## 1  0.31557695 -0.07697798  0.173105013 -0.01241095 -0.3767219 0.48647935
## 2  0.21070940  0.02838910  0.076187307  0.26291088 -0.1465449 0.01896905
## 3 -0.19676185  0.18821853  0.233542083 -0.30636042 -0.2999194 0.19480636
## 4  0.21613673  0.22497091  0.002686475  0.06676405 -0.2113344 0.22206691
## 5 -0.01312595 -0.30022882 -0.033916454  0.39212977 -0.1050746 0.14466831
## 6 -0.17247853  0.45378240 -0.010024705 -0.03212454  0.1610227 0.62264992
##        Dim 13      Dim 14      Dim 15      Dim 16      Dim 17      Dim 18
## 1  0.06082607 -0.26137757 -0.09597679  0.20432984 -0.07405680  0.33079078
## 2  0.09420543 -0.02136289  0.07131184  0.25214458 -0.20754203 -0.03520720
## 3 -0.20975292  0.45444679  0.22820247 -0.45215907 -0.09292604  0.08649407
## 4  0.09007325  0.25315824  0.02541344 -0.26004008 -0.16376606 -0.17802360
## 5  0.14272626 -0.02103863  0.09716002 -0.05680411 -0.29394505  0.28194771
## 6 -0.01022813  0.25374700  0.33416764 -0.33476739  0.01210859 -0.23215867
##         Dim 19      Dim 20      Dim 21       Dim 22      Dim 23       Dim 24
## 1  0.463168755 -0.22581617 -0.02519934  0.194609555  0.30354001 -0.334499273
## 2 -0.264736950  0.18821805 -0.13456054  0.180844168 -0.09826942  0.021621255
## 3 -0.357709420  0.25011390  0.09866294  0.005536224 -0.22910076  0.022940799
## 4 -0.115819383  0.21980991  0.03777782  0.105915301 -0.09936206 -0.266002482
## 5 -0.005795833  0.36492967 -0.14125473 -0.175047930 -0.13289421  0.083404716
## 6 -0.273938362  0.06994365 -0.17525400 -0.264279962  0.09348759 -0.001541189
##        Dim 25      Dim 26      Dim 27
## 1  0.06764422  0.06106436  0.06965033
## 2 -0.01171576 -0.07401422 -0.01727775
## 3 -0.20878634  0.22685989 -0.08415140
## 4  0.01320069  0.16145597 -0.09660558
## 5  0.11358795  0.12713404  0.05057909
## 6  0.26052696  0.17017986 -0.02436056
X <- res$ind$coord

# On a ainsi recodé toutes les variables qualitatives (actives) en 27 variables quantitatives.
d <- dist(X)
n <- 300
tree <- hclust(d^2/(2*n), method="ward.D")
plot(tree, main="CAH de Ward", xlab ="", sub="", hang=-1,labels = FALSE)
rect.hclust(tree, k=4)

part <- cutree(tree, k=4)

# Interprétation via l'ACM
part <- as.factor(part)
levels(part) <- paste("cluster",1:4,sep="")
res <- MCA(data.frame(the, part), quanti.sup = 19, quali.sup = 20:37, graph=FALSE) 
plot(res, habillage=37, invisible=c("var", "quali.sup"), title="") # 

plot(res,choix="var", invisible=c("quanti.sup", "quali.sup"), 
     title="", graph.type = "classic") 

# Interprétation avec les variables quantitatives
des <- catdes(data.frame(the, part), num.var=37)
print(des$category,digits=2) # 
## $cluster1
##                               Cla/Mod Mod/Cla Global p.value v.test
## lieuachat=GMS                      65    89.2   64.0 2.4e-18    8.7
## forme=sachet                       63    77.0   56.7 2.7e-11    6.7
## salon.de.t=Pas.salon de t          55    95.7   80.7 1.3e-10    6.4
## type=t_MDD                        100    15.1    7.0 4.0e-08    5.5
## bar=Pas.bar                        54    92.1   79.0 1.1e-07    5.3
## gouter=Pas.gouter                  63    59.0   43.7 6.8e-07    5.0
## type=t_marque_connue               67    46.0   31.7 6.9e-07    5.0
## frequence=1/jour                   64    43.9   31.7 2.6e-05    4.2
## amis=Pas.amis                      62    46.8   34.7 4.7e-05    4.1
## type=t_inconnu                    100     8.6    4.0 7.5e-05    4.0
## resto=Pas.resto                    53    84.2   73.7 1.1e-04    3.9
## apres.dejeuner=Pas.apres dej       51    93.5   85.3 1.5e-04    3.8
## apres.diner=apres diner            86    12.9    7.0 1.6e-04    3.8
## variete=vert                       76    18.0   11.0 3.5e-04    3.6
## maison=Pas.maison                 100     6.5    3.0 8.5e-04    3.3
## type=t_bas_de_gamme               100     5.0    2.3 4.2e-03    2.9
## soiree=Pas.soiree                  52    74.1   65.7 4.3e-03    2.9
## convivialite=Pas.convivialite      62    25.9   19.3 8.1e-03    2.6
## tt.moment=Pas.tt moment            52    73.4   65.7 9.1e-03    2.6
## amaigrissant=amaigrissant          62    20.1   15.0 2.2e-02    2.3
## comment=lait                       59    26.6   21.0 2.8e-02    2.2
## CSP=ouvrier                        75     6.5    4.0 4.9e-02    2.0
## variete=parfume                    42    58.3   64.3 4.3e-02   -2.0
## lieuachat=magasin specialise       27     5.8   10.0 2.3e-02   -2.3
## amaigrissant=Pas.amaigrissant      44    79.9   85.0 2.2e-02   -2.3
## tt.moment=tt moment                36    26.6   34.3 9.1e-03   -2.6
## convivialite=convivialite          43    74.1   80.7 8.1e-03   -2.6
## comment=citron                     24     5.8   11.0 6.7e-03   -2.7
## soiree=soiree                      35    25.9   34.3 4.3e-03   -2.9
## comment=autre                       0     0.0    3.0 3.3e-03   -2.9
## maison=maison                      45    93.5   97.0 8.5e-04   -3.3
## apres.diner=Pas.apres diner        43    87.1   93.0 1.6e-04   -3.8
## apres.dejeuner=apres dej           20     6.5   14.7 1.5e-04   -3.8
## resto=resto                        28    15.8   26.3 1.1e-04   -3.9
## forme=vrac                         17     4.3   12.0 9.7e-05   -3.9
## amis=amis                          38    53.2   65.3 4.7e-05   -4.1
## type=t_haut_de_gamme               21     7.9   17.7 2.8e-05   -4.2
## forme=sachet+vrac                  28    18.7   31.3 1.0e-05   -4.4
## frequence=+ de 2/jour              30    27.3   42.3 9.7e-07   -4.9
## gouter=gouter                      34    41.0   56.3 6.8e-07   -5.0
## bar=bar                            17     7.9   21.0 1.1e-07   -5.3
## salon.de.t=salon de t              10     4.3   19.3 1.3e-10   -6.4
## type=t_variable                    21    17.3   37.3 1.2e-11   -6.8
## lieuachat=GMS+mag.spe.              9     5.0   26.0 4.8e-16   -8.1
## 
## $cluster2
##                               Cla/Mod Mod/Cla Global p.value v.test
## lieuachat=GMS+mag.spe.           83.3   49.62   26.0 8.5e-17    8.3
## type=t_variable                  72.3   61.83   37.3 8.2e-15    7.8
## forme=sachet+vrac                67.0   48.09   31.3 4.1e-08    5.5
## bar=bar                          69.8   33.59   21.0 2.9e-06    4.7
## gouter=gouter                    55.0   70.99   56.3 6.3e-06    4.5
## frequence=+ de 2/jour            58.3   56.49   42.3 1.4e-05    4.4
## apres.dejeuner=apres dej         72.7   24.43   14.7 3.1e-05    4.2
## salon.de.t=salon de t            67.2   29.77   19.3 6.6e-05    4.0
## apres.diner=Pas.apres diner      46.6   99.24   93.0 6.7e-05    4.0
## variete=parfume                  51.8   76.34   64.3 1.3e-04    3.8
## resto=resto                      62.0   37.40   26.3 1.5e-04    3.8
## amis=amis                        51.5   77.10   65.3 1.5e-04    3.8
## maison=maison                    45.0  100.00   97.0 5.2e-03    2.8
## soiree=soiree                    54.4   42.75   34.3 7.4e-03    2.7
## sexe=F                           50.0   67.94   59.3 7.7e-03    2.7
## amaigrissant=Pas.amaigrissant    46.7   90.84   85.0 1.2e-02    2.5
## convivialite=convivialite        46.7   86.26   80.7 3.1e-02    2.2
## CSP=etudiant                     54.3   29.01   23.3 4.3e-02    2.0
## convivialite=Pas.convivialite    31.0   13.74   19.3 3.1e-02   -2.2
## type=t_bas_de_gamme               0.0    0.00    2.3 1.7e-02   -2.4
## amaigrissant=amaigrissant        26.7    9.16   15.0 1.2e-02   -2.5
## sexe=H                           34.4   32.06   40.7 7.7e-03   -2.7
## soiree=Pas.soiree                38.1   57.25   65.7 7.4e-03   -2.7
## comment=autre                     0.0    0.00    3.0 5.2e-03   -2.8
## maison=Pas.maison                 0.0    0.00    3.0 5.2e-03   -2.8
## age_Q=45-59                      27.9   12.98   20.3 5.1e-03   -2.8
## type=t_inconnu                    0.0    0.00    4.0 8.6e-04   -3.3
## frequence=1/jour                 28.4   20.61   31.7 2.7e-04   -3.6
## type=t_marque_connue             28.4   20.61   31.7 2.7e-04   -3.6
## amis=Pas.amis                    28.8   22.90   34.7 1.5e-04   -3.8
## resto=Pas.resto                  37.1   62.60   73.7 1.5e-04   -3.8
## apres.diner=apres diner           4.8    0.76    7.0 6.7e-05   -4.0
## salon.de.t=Pas.salon de t        38.0   70.23   80.7 6.6e-05   -4.0
## apres.dejeuner=Pas.apres dej     38.7   75.57   85.3 3.1e-05   -4.2
## forme=sachet                     32.9   42.75   56.7 2.0e-05   -4.3
## variete=vert                      9.1    2.29   11.0 7.3e-06   -4.5
## gouter=Pas.gouter                29.0   29.01   43.7 6.3e-06   -4.5
## lieuachat=GMS                    33.9   49.62   64.0 5.6e-06   -4.5
## type=t_MDD                        0.0    0.00    7.0 3.3e-06   -4.7
## bar=Pas.bar                      36.7   66.41   79.0 2.9e-06   -4.7
## lieuachat=magasin specialise      3.3    0.76   10.0 2.9e-07   -5.1
## 
## $cluster3
##                                     Cla/Mod Mod/Cla Global p.value v.test
## comment=autre                         100.0     100      3 2.1e-17    8.5
## resto=resto                             8.9      78     26 1.7e-03    3.1
## salon.de.t=salon de t                  10.3      67     19 2.3e-03    3.0
## variete=noir                            8.1      67     25 9.4e-03    2.6
## lieuachat=GMS+mag.spe.                  7.7      67     26 1.3e-02    2.5
## age_Q=60 et +                          10.5      44     13 2.0e-02    2.3
## bon.pr.la.sante=bon pr la sante         4.3     100     70 3.8e-02    2.1
## bon.pr.la.sante=Pas.bon pr la sante     0.0       0     30 3.8e-02   -2.1
## salon.de.t=Pas.salon de t               1.2      33     81 2.3e-03   -3.0
## resto=Pas.resto                         0.9      22     74 1.7e-03   -3.1
## comment=pur                             0.0       0     65 6.3e-05   -4.0
## 
## $cluster4
##                              Cla/Mod Mod/Cla Global p.value v.test
## lieuachat=magasin specialise    70.0   100.0     10 1.4e-25   10.5
## forme=vrac                      50.0    85.7     12 2.8e-16    8.2
## type=t_haut_de_gamme            32.1    81.0     18 5.2e-11    6.6
## raffine=raffine                  9.3    95.2     72 7.6e-03    2.7
## resto=Pas.resto                  9.0    95.2     74 1.3e-02    2.5
## CSP=cadre moyen                 17.5    33.3     13 1.5e-02    2.4
## comment=citron                  18.2    28.6     11 2.2e-02    2.3
## sexe=H                          10.7    61.9     41 4.7e-02    2.0
## sexe=F                           4.5    38.1     59 4.7e-02   -2.0
## variete=parfume                  4.7    42.9     64 4.1e-02   -2.0
## type=t_marque_connue             2.1     9.5     32 1.9e-02   -2.4
## resto=resto                      1.3     4.8     26 1.3e-02   -2.5
## CSP=employe                      0.0     0.0     20 8.4e-03   -2.6
## raffine=Pas.raffine              1.2     4.8     28 7.6e-03   -2.7
## type=t_variable                  1.8     9.5     37 4.3e-03   -2.9
## forme=sachet+vrac                1.1     4.8     31 3.4e-03   -2.9
## lieuachat=GMS+mag.spe.           0.0     0.0     26 1.4e-03   -3.2
## age_Q=15-24                      0.0     0.0     31 3.3e-04   -3.6
## forme=sachet                     1.2     9.5     57 4.9e-06   -4.6
## lieuachat=GMS                    0.0     0.0     64 1.2e-10   -6.4