Exo 1 : Développement des pays africains en 2018 (ACP-CAH)

Author

Claude Grasland, France Guérin-Pace, Ané Landry Tanoh

Introduction

Le but de cet exercice est :

  1. De montrer les commandes R permettant de réaliser une ACP et une CAH
  2. D’apprendre à interpréter les résultats.
  3. De cartographier les axes factoriels et les classes obtenues

En préalable à cet exercice il est indispensable d’avoir bien maîtrisé les fondements théoriques des deux méthodes d’ACP et de CAH qui sont discutés sur ce site. On peut également trouver une présentation plus approfondie sur le plan statistique dans le MOOC de cours de François Husson en suivant les liens suivants

CHOIX DES DONNEES

Le chargement des données s’effectue à l’aide de trois fichiers qui peuvent être importées dans R mais aussi bien dans d’autres logiciels de statistique (format .csv) ou de cartographie (format .shp).

don <- read.csv2("DEV-AFRIC-2018/afrika_don.csv")
meta <- read.csv2("DEV-AFRIC-2018/afrika_don_meta.csv")
map <- st_read("DEV-AFRIC-2018/afrika_map.shp",quiet = T)

Liste des variables

kable(meta, caption = "Défintion et source des variables")
Défintion et source des variables
Code Definition Souce
iso3 ISO3 code of country Human Development Report 2020
name English name of country Human Development Report 2020
nom French name of country Human Development Report 2020
POP Population (Millions inhabitants) Human Development Report 2020
PIB Gross Domestic Product ($ per capita ppp) Human Development Report 2020
IDH Human Development Index Human Development Report 2020
ADOFEC Adolescent birth rate (births per 1,000 women ages 15-19)        Human Development Report 2020
CO2HAB Carbon Dioxyde Emissions per capita (tonnes) Human Development Report 2020
EMPAGR Employment in agriculture (% of total employment)           Human Development Report 2020
EMPSER Employment in services (% of total employment)                     Human Development Report 2020
INTERN Internet users, total (% of population)                             Human Development Report 2020
ESPVIE Life expectancy at birth (years)                          Human Development Report 2020
AGEMED Median age (years)                                                 Human Development Report 2020
TELMOB Mobile phone subscriptions (per 100 people)                        Human Development Report 2020
MORINF Mortality rate, infant (per 1,000 live births)                     Human Development Report 2020
TXMIGR Net migration rate (per 1,000 people)                              Human Development Report 2020
DVIEUX Old-age (65 and older) dependency ratio (per 100 people ages 15-64) Human Development Report 2020
TUBERC Tuberculosis incidence (per 100,000 people)                         Human Development Report 2020
URBANI Urban population (%)                                               Human Development Report 2020
DJEUNE Young age (0-14) dependency ratio (per 100 people ages 15-64) Human Development Report 2020
SUBREG United Nation subregions in Africa Human Development Report 2020
LOCKED Landlocked country (0/1) CEPII
COLFRA Colonisation by France (0/1) CEPII
COLGBR Colonisation by United Kingdom (0/1) CEPII
LANGFR French official langage (0/1) CEPII
LANGEN English official langage(0/1) CEPII

Paramètres principaux

On résume rapidement les variables retenues ce qui permet de constater qu’elles sont toutes complètes sauf la variable X1_PIB pour laquelle il y a trois valeurs manquantes.

summary(don)
     iso3               name               nom                 POP          
 Length:49          Length:49          Length:49          Min.   :  0.9662  
 Class :character   Class :character   Class :character   1st Qu.:  4.8782  
 Mode  :character   Mode  :character   Mode  :character   Median : 15.2256  
                                                          Mean   : 26.2713  
                                                          3rd Qu.: 30.0925  
                                                          Max.   :198.4191  
                                                                            
      PIB               IDH             ADOFEC            CO2HAB       
 Min.   :  756.6   Min.   :0.3925   Min.   :  5.814   Min.   :0.02423  
 1st Qu.: 2014.9   1st Qu.:0.4783   1st Qu.: 65.995   1st Qu.:0.17041  
 Median : 3289.4   Median :0.5317   Median : 92.262   Median :0.33470  
 Mean   : 5168.8   Mean   :0.5455   Mean   : 92.836   Mean   :1.07945  
 3rd Qu.: 6437.0   3rd Qu.:0.5903   3rd Qu.:120.468   3rd Qu.:1.05493  
 Max.   :19458.9   Max.   :0.7470   Max.   :188.314   Max.   :8.09036  
 NA's   :3         NA's   :1                                           
     EMPAGR           EMPSER           INTERN           ESPVIE     
 Min.   : 5.128   Min.   : 6.498   Min.   : 1.309   Min.   :53.04  
 1st Qu.:30.375   1st Qu.:27.744   1st Qu.: 9.800   1st Qu.:59.80  
 Median :43.752   Median :41.351   Median :20.000   Median :63.17  
 Mean   :46.174   Mean   :39.652   Mean   :25.381   Mean   :63.21  
 3rd Qu.:64.448   3rd Qu.:49.136   3rd Qu.:42.000   3rd Qu.:66.33  
 Max.   :92.017   Max.   :71.846   Max.   :64.804   Max.   :76.79  
                                                                   
     AGEMED          TELMOB           MORINF          TXMIGR       
 Min.   :15.15   Min.   : 20.36   Min.   :10.24   Min.   :-15.902  
 1st Qu.:17.84   1st Qu.: 47.72   1st Qu.:32.70   1st Qu.: -1.277  
 Median :19.20   Median : 88.18   Median :42.14   Median : -0.339  
 Mean   :20.31   Mean   : 82.81   Mean   :45.33   Mean   : -1.103  
 3rd Qu.:21.51   3rd Qu.:104.45   3rd Qu.:59.40   3rd Qu.:  0.131  
 Max.   :32.84   Max.   :153.25   Max.   :84.46   Max.   : 12.443  
                                                                   
     DVIEUX           TUBERC          URBANI          DJEUNE      
 Min.   : 3.802   Min.   : 12.0   Min.   :13.20   Min.   : 35.93  
 1st Qu.: 4.977   1st Qu.: 93.0   1st Qu.:32.20   1st Qu.: 63.06  
 Median : 5.466   Median :186.0   Median :43.60   Median : 75.62  
 Mean   : 5.961   Mean   :222.3   Mean   :45.37   Mean   : 72.68  
 3rd Qu.: 6.274   3rd Qu.:308.0   3rd Qu.:56.70   3rd Qu.: 83.04  
 Max.   :12.555   Max.   :611.0   Max.   :89.55   Max.   :105.10  
                                                                  
    SUBREG              LOCKED           COLFRA           COLGBR      
 Length:49          Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
 Class :character   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
 Mode  :character   Median :0.0000   Median :0.0000   Median :0.0000  
                    Mean   :0.3265   Mean   :0.4082   Mean   :0.3878  
                    3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000  
                    Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
                                                                      
     LANGFR          LANGEN      
 Min.   :0.000   Min.   :0.0000  
 1st Qu.:0.000   1st Qu.:0.0000  
 Median :0.000   Median :0.0000  
 Mean   :0.449   Mean   :0.4286  
 3rd Qu.:1.000   3rd Qu.:1.0000  
 Max.   :1.000   Max.   :1.0000  
                                 

Analyse en composantes principales (ACP)

Préparation du tableau

On conserve toutes les variables quantitatives sauf la population, le PIB et l’IDH et on ajoute en nom de ligne les codes des pays.

tab<-don[,8:20]
row.names(tab)<-don$iso3
kable(head(tab), caption = "Tableau prêt pour l'ACP et la CAH")
Tableau prêt pour l’ACP et la CAH
CO2HAB EMPAGR EMPSER INTERN ESPVIE AGEMED TELMOB MORINF TXMIGR DVIEUX TUBERC URBANI DJEUNE
AGO 1.1209815 50.4490 41.3865 14.33910 60.9660 16.677 43.1305 51.58504 0.211 4.3225 355 65.85 91.4625
BDI 0.0466776 92.0170 6.4980 2.66075 61.4135 17.320 56.5347 40.99260 0.181 4.3610 111 13.20 86.9555
BEN 0.6224791 38.9125 42.1465 20.00000 61.6200 18.781 82.3843 60.53574 -0.176 5.9895 56 47.60 77.7865
BFA 0.1973980 25.5640 40.8700 16.00000 61.3770 17.551 97.9123 49.00709 -1.282 4.5605 48 29.70 84.9065
BWA 2.9573642 20.8570 61.0040 47.00000 69.4325 24.044 150.0060 29.98541 1.341 6.9540 275 69.80 54.9450
CAF 0.0650827 77.4450 17.1505 4.33925 53.0425 17.611 27.6743 84.46370 -8.581 5.3140 540 41.60 83.1095

Caclul de l’ACP

On va utiliser le package FactomineR pour réaliser l’analyse en composante principales à l’aide de la fonction PCA().

.

library(FactoMineR)
monACP <- PCA(tab)

Comme on peut le voir, l’application de la fonction PCA provoque l’apparition de deux graphiques, l’un relatif aux variables et l’autre aux individus. Nous allons les analyser tout à tour en ajoutant des informations additionnelles contenues dans l’objet monACP. Celui-ci contient en effet un grand nombre de résultats qu’il suffit d’extraire :

names(monACP)
[1] "eig"  "var"  "ind"  "svd"  "call"

Analyse des valeurs propres

L’analyse des valeurs propres permet de savoir quelle est la part de variance prise en compte par chacun des facteurs (on dit aussi composantes) de l’analyse. Les facteurs sont orthogonaux c’est-à-dire statistiquement indépendants (corrélation = 0). Le premier facteur est celui qui résume le mieux le nuage de point. Puis le second facteur est celui qui résume le maximum de variance résiduelle, etc. Il y a autant de facteurs que de variables de sorte que les facteurs sont d’autant plus pertinents qu’ils résument une part de la variance supérieure à 1/k ou k est le nombre de variables. Les facteurs qui résument plus qu’une variable ont une valeur propre supérieure à 1 et doivent être interprétés en priorité.

valprop<-monACP$eig
kable(valprop, 
      digits=2,
      caption = "Tableau des valeurs propres",
      col.names = c ("Valeurs propres", "Variance (%)", "Variance cumulée (%)"))
Tableau des valeurs propres
Valeurs propres Variance (%) Variance cumulée (%)
comp 1 6.79 52.23 52.23
comp 2 1.72 13.19 65.42
comp 3 1.23 9.50 74.92
comp 4 0.90 6.93 81.85
comp 5 0.62 4.76 86.61
comp 6 0.51 3.94 90.54
comp 7 0.41 3.18 93.73
comp 8 0.35 2.72 96.45
comp 9 0.20 1.54 97.99
comp 10 0.18 1.36 99.35
comp 11 0.05 0.35 99.70
comp 12 0.03 0.22 99.92
comp 13 0.01 0.08 100.00
  • Commentaire : expliquez pourquoi on peut analyser les trois premiers facteurs

Analyse des corrélations des variables avec les facteurs

corvar<-monACP$var$cor
kable(corvar,digits=2,caption =" Corrélation des variables avec les facteurs")
Corrélation des variables avec les facteurs
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
CO2HAB 0.75 0.16 0.16 0.32 -0.02
EMPAGR -0.85 -0.26 0.14 0.27 -0.07
EMPSER 0.83 0.34 -0.08 -0.30 0.02
INTERN 0.85 0.09 -0.05 -0.16 0.01
ESPVIE 0.71 -0.59 0.20 0.04 -0.20
AGEMED 0.92 -0.13 -0.11 0.28 0.10
TELMOB 0.68 0.27 0.03 -0.49 -0.08
MORINF -0.67 0.49 -0.18 0.11 0.47
TXMIGR 0.21 0.25 0.87 0.13 0.05
DVIEUX 0.71 -0.35 -0.41 0.21 0.20
TUBERC -0.05 0.71 -0.31 0.34 -0.50
URBANI 0.68 0.37 0.22 0.21 0.19
DJEUNE -0.90 0.03 0.15 -0.23 -0.04
ctrvar<-monACP$var$contrib
kable(ctrvar,digits=2,caption =" Contribution des variables aux facteurs")
Contribution des variables aux facteurs
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
CO2HAB 8.21 1.50 2.13 11.68 0.06
EMPAGR 10.67 3.82 1.69 7.95 0.86
EMPSER 10.04 6.56 0.54 10.31 0.09
INTERN 10.64 0.45 0.23 3.00 0.03
ESPVIE 7.42 20.20 3.38 0.16 6.28
AGEMED 12.51 0.93 0.94 8.55 1.49
TELMOB 6.84 4.30 0.07 26.99 0.95
MORINF 6.68 14.24 2.57 1.38 36.35
TXMIGR 0.67 3.72 61.49 1.74 0.39
DVIEUX 7.49 7.12 13.47 4.78 6.53
TUBERC 0.04 29.17 7.76 12.89 40.66
URBANI 6.81 7.95 3.99 4.76 6.08
DJEUNE 11.99 0.05 1.74 5.82 0.22
plot.PCA(monACP,choix = "varcor",axes = c(1,2))

plot.PCA(monACP,choix = "varcor",axes = c(3,2))

Commentaire : proposez une interprétation des trois premiers facteurs

  • le premier facteur :

  • le second facteur :

  • le troisième facteur :

Cartographie des coordonnées des individus sur les facteurs

Nous allons maintenant examiner comment les individus se positionnent sur les facteurs. Pour cela nous allons extraire les coordonnées des individus et les contributions puis les fusionner avec le fichier sf contenant les contours des pays pour faire des cartes.

cooind<-data.frame(monACP$ind$coord)
names(cooind)<-c("Coo1","Coo2","Coo3","Coo4","Coo5")
cooind$iso3<-row.names(cooind)
map<-left_join(map,cooind)

ctrind<-data.frame(monACP$ind$contrib)
names(ctrind)<-c("Ctr1","Ctr2","Ctr3","Ctr4","Ctr5")
ctrind$iso3<-row.names(ctrind)
map<-left_join(map,ctrind)

Carte du facteur 1 : donnez lui un nom

mypal<-brewer.pal(n = 8,name = "RdYlBu")


mf_map(map,var="Coo1",
       type="choro",
       breaks=c(-10,-3,-2,-1,0,1,2,3,10),
       pal=mypal,
       leg_pos = "left",
       leg_title = "Coordonnées",
       leg_val_rnd = 1)

mf_map(map,var="Ctr1",
       type="prop",
       inches=0.05,
       col="gray70",
       leg_pos = "right",
       leg_title = "Contributions",
        )

mf_layout(title = "Facteur 1 : ...???...",
          frame = T,
          arrow = F,
          credits = "(c) EE CIST 2023 - Source : HDR 2020"
            )

Commentaire : proposez une commentaire de la carte

Carte du facteur 2 : Donnez-lui un nom

mypal<-brewer.pal(n = 8,name = "RdYlBu")


mf_map(map,var="Coo2",
       type="choro",
       breaks=c(-10,-3,-2,-1,0,1,2,3,10),
       pal=mypal,
       leg_pos = "left",
       leg_title = "Coordonnées",
       leg_val_rnd = 1)

mf_map(map,var="Ctr2",
       type="prop",
       inches=0.05,
       col="gray70",
       leg_pos = "right",
       leg_title = "Contributions",
        )

mf_layout(title = "Facteur 2 : ...???...",
          frame = T,
          arrow = F,
          credits = "(c) EE CIST 2023 - Source : HDR 2020"
            )

Commentaire : proposez une commentaire de la carte

Carte du facteur 3 : Donnez-lui un nom

mypal<-brewer.pal(n = 8,name = "RdYlBu")


mf_map(map,var="Coo3",
       type="choro",
       breaks=c(-10,-3,-2,-1,0,1,2,3,10),
       pal=mypal,
       leg_pos = "left",
       leg_title = "Coordonnées",
       leg_val_rnd = 1)

mf_map(map,var="Ctr3",
       type="prop",
       inches=0.05,
       col="gray70",
       leg_pos = "right",
       leg_title = "Contributions",
        )

mf_layout(title = "Facteur 3 : ...???... ",
          frame = T,
          arrow = F,
          credits = "(c) EE CIST 2023 - Source : HDR 2020"
            )

Commentaire : proposez une commentaire de la carte

Classification ascendante hiérarchique (CAH)

On effectue la classification sur le même tableau

CAH selon le critère de Ward

nbclasses <- 5
maCAH<-HCPC(monACP, nb.clust=nbclasses)

CAH<-data.frame(maclassif=maCAH$data.clust$clust,iso3=row.names(maCAH$data.clust))

map<-left_join(map,CAH)

Commentaire : Discutez le choix du nombre de classe retenues - au besoin modifiez le programme

Interprétation des classes

maCAH$desc.var

Link between the cluster variable and the quantitative variables
================================================================
            Eta2      P-value
AGEMED 0.8039374 5.060759e-15
EMPAGR 0.7686951 1.841599e-13
EMPSER 0.7396272 2.401275e-12
DJEUNE 0.6977446 6.050035e-11
ESPVIE 0.6924972 8.772653e-11
MORINF 0.6794410 2.151163e-10
INTERN 0.6756970 2.762938e-10
DVIEUX 0.6713158 3.689236e-10
TUBERC 0.5272748 8.745116e-07
URBANI 0.5050177 2.312757e-06
CO2HAB 0.4690791 1.010400e-05
TELMOB 0.4498411 2.128272e-05

Description of each cluster by quantitative variables
=====================================================
$`1`
          v.test Mean in category Overall mean sd in category Overall sd
MORINF  4.095734        68.855434     45.32532      10.427182  17.581908
EMPAGR  3.292330        69.273313     46.17392       9.151047  21.471924
DJEUNE  2.156486        83.588188     72.67812       7.272691  15.482977
TUBERC  2.070014       327.625000    222.26531     145.252313 155.766803
TELMOB -2.691164        51.701775     82.80564      19.821927  35.371054
INTERN -3.079388         6.546392     25.38088       2.660927  18.718153
EMPSER -3.303503        23.673938     39.65218       7.152320  14.802263
ESPVIE -3.407514        56.976062     63.21391       2.666740   5.602355
            p.value
MORINF 4.208337e-05
EMPAGR 9.936107e-04
DJEUNE 3.104577e-02
TUBERC 3.845104e-02
TELMOB 7.120325e-03
INTERN 2.074262e-03
EMPSER 9.548505e-04
ESPVIE 6.555747e-04

$`2`
          v.test Mean in category Overall mean sd in category Overall sd
EMPAGR  3.436935         65.97173     46.17392      11.506355   21.47192
MORINF -1.978415         35.99367     45.32532       5.449706   17.58191
INTERN -2.035092         15.16156     25.38088       8.795731   18.71815
TELMOB -2.667714         57.49156     82.80564      23.582229   35.37105
EMPSER -3.387605         26.19991     39.65218       9.151641   14.80226
URBANI -3.982373         25.50909     45.37347       8.968906   18.59337
            p.value
EMPAGR 5.883366e-04
MORINF 4.788189e-02
INTERN 4.184160e-02
TELMOB 7.636914e-03
EMPSER 7.050574e-04
URBANI 6.823045e-05

$`3`
          v.test Mean in category Overall mean sd in category Overall sd
AGEMED -2.059356        18.806222    20.310653      1.4687891   3.856709
DVIEUX -2.543570         5.123806     5.960786      0.6398809   1.737191
          p.value
AGEMED 0.03946019
DVIEUX 0.01097262

$`4`
          v.test Mean in category Overall mean sd in category Overall sd
TUBERC  3.860261       434.857143   222.265306     131.845612 155.766803
EMPSER  3.793409        59.504571    39.652184       6.863163  14.802263
INTERN  3.673663        49.692686    25.380877       9.810010  18.718153
AGEMED  2.634130        23.902429    20.310653       2.307402   3.856709
TELMOB  2.549195       114.684743    82.805645      36.143684  35.371054
CO2HAB  2.480614         2.615599     1.079454       2.357461   1.751532
DJEUNE -3.206523        55.125429    72.678122       8.016482  15.482977
EMPAGR -3.519691        19.454286    46.173918      10.442229  21.471924
            p.value
TUBERC 0.0001132660
EMPSER 0.0001485934
INTERN 0.0002390983
AGEMED 0.0084353097
TELMOB 0.0107971975
CO2HAB 0.0131156460
DJEUNE 0.0013434972
EMPAGR 0.0004320501

$`5`
          v.test Mean in category Overall mean sd in category Overall sd
AGEMED  5.179263        28.863400    20.310653       2.625777   3.856709
DVIEUX  5.120339         9.769400     5.960786       2.038212   1.737191
ESPVIE  4.886679        74.936000    63.213908       2.122361   5.602355
CO2HAB  3.566990         3.754558     1.079454       2.247640   1.751532
INTERN  3.252880        51.451520    25.380877      16.178937  18.718153
URBANI  2.533100        65.540000    45.373469      12.748937  18.593372
EMPSER  2.081007        52.841500    39.652184       6.157679  14.802263
TUBERC -2.567874        51.000000   222.265306      30.086542 155.766803
EMPAGR -2.828800        20.166700    46.173918       8.832253  21.471924
MORINF -3.833633        16.465259    45.325321       3.634739  17.581908
DJEUNE -4.250530        44.499600    72.678122       6.706856  15.482977
            p.value
AGEMED 2.227639e-07
DVIEUX 3.049872e-07
ESPVIE 1.025513e-06
CO2HAB 3.611057e-04
INTERN 1.142417e-03
URBANI 1.130587e-02
EMPSER 3.743331e-02
TUBERC 1.023242e-02
EMPAGR 4.672290e-03
MORINF 1.262645e-04
DJEUNE 2.132657e-05

Commentaire : Discutez le profil de chacune des classes en vous aidant des tableaux ci-dessus

Cartographie

mypal<-brewer.pal(n = nbclasses,name = "Set3")


mf_map(map,var="maclassif",
       type="typo",
       pal=mypal,
       leg_title = "Classes")

mf_layout(title = "Typologie du développement des pays d'Afrique en 2018",
          frame = T,
          arrow = F,
          credits = "(c) EE CIST 2023 - Source : HDR 2020"
            )

Commentaire : Commentez la distribution spataile des classes