[STA3] : Introduction à la statistique multivariée

GEO UNIV’R Tunisie 2024

Auteur·rice

Sophie Baudet-Michel, Claude Grasland

Date de publication

2024-05-13

## Packages utilitaire
library(knitr)
library(dplyr,quiet=T)

### Package d'analyse des données
library(FactoMineR)

### Packages de cartographie
library(sf, quietly-TRUE)
library(mapsf)
library(RColorBrewer)


## Options du document
options(max.print="80")
opts_chunk$set(echo=TRUE,
               cache=FALSE,
               prompt=FALSE,
               tidy=FALSE,
               comment=NA,
               message=FALSE,
               warning=FALSE,
               options(scipen=999))
opts_knit$set(width=75)

(A) PREPARATION DES DONNEES

On peut préparer les données à partir du dossier RP-Tunisie. Mais on peut aussipasser cette partie et démarrer si on le souhaite directement à la partie suivante dès lors que les fichiers ont été créés dans le dossier EXPLO.

Télécharger les jeux de données

Importe les données statistiques

# Importation du fichier .csv
don <- read.table("data/RP_Tunisie/data/don_gou.csv", 
                  header = TRUE,   # Il y a un en-tête
                  sep = ";",       # le séparateur est ;
                  encoding = "UTF-8"  # Encodage pour français et arabe
                  )


# Création ou recodage des variables
code<-don$gou_code
nom<-don$gou_nom
popto <- don$popto_2004
menag <- don$menag_2004
tailm <- don$popto_2004/don$menag_2004
densi <- don$popto_2004/don$surfa_2010
#urban <- 100*don$popco_2004/don$popto_2004
mobil <- 100*(don$immig_2004+don$emigr_2004)/don$popto_2004
acmig <- 100*(don$immig_2004-don$emigr_2004)/don$popto_2004
ordin <- 100*don$ordin_2004/don$menag_2004
porta <- 100*don$porta_2004/don$menag_2004

# Affichage
tab<-data.frame(code,nom, popto,menag, tailm, densi,mobil, acmig, ordin, porta)
kable(tab, 
      digits = c(0,0,0,0,2,1,1,1,1,1), # decimales par colonnes
      caption = "Tableau de données 2004"   # Titre du tableau
      )

# Sauvegarde aux formats .RDS et .csv
saveRDS(tab, "data/EXPLO/don2004.RDS") # sauvegarde au format interne de R

write.table(tab, "data/EXPLO/don2004.csv",
            sep=";", 
            row.names=F,
            fileEncoding = "UTF-8")

# Importation du shapefile des gouvernorats à l'aide de sf
map<-sf::st_read("data/RP_Tunisie/geom/map_gou.shp")


# Jointure des données statistiques et géométriques
map<- merge(map, tab, by.x="gou_code",by.y="code")

# Sauvegarde aux formats .RDS .shp et  .geojson

saveRDS(map, "data/EXPLO/map2004.RDS") ## Format interne de R

sf::st_write(map, "data/EXPLO/map2004.geojson",delete_dsn = T)  ## Format geojson

sf::st_write(map, "data/EXPLO/map2004.shp",delete_dsn = T)

(2) EXPLORATION UNIVARIEE

Avant de procéder à une ACP, on effectue un certain nombre d’analyse sur les variables qui seront utilisées. On prend ici l’exemple des données de 2004.

don<-readRDS("data/EXPLO/don2004.RDS") # recharge le fichier
head(don,3)  # Affiche les 3 premières lignes
  code       nom  popto  menag    tailm      densi    mobil     acmig     ordin
1   AN    Ariana 422246 101327 4.167162 1017.07792 21.84982  8.974863 16.324376
2   BA Ben Arous 505773 117901 4.289811  769.97310 24.05644  7.303474 13.018549
3   BJ      Beja 304501  68584 4.439826   81.41738 10.56384 -3.153027  3.235449
     porta
1 59.31193
2 60.50415
3 32.18681
tail(don,3)  # Affiche les 3 dernières lignes
   code      nom  popto  menag    tailm      densi     mobil      acmig
22   TO   Tozeur  97526  20485 4.760849   17.43747 10.393126 -0.6008654
23   TU    Tunis 983861 244018 4.031920 4064.26494 26.375474 -2.7646182
24   ZA Zaghouan 160963  33532 4.800280   56.14531  9.408995 -0.4876897
       ordin    porta
22  5.042714 43.56358
23 14.012901 60.46972
24  2.701897 37.94286

Exploration statistique

On regarde pour chaque variable retenue la forme de sa distribution afin de procéder éventuellement à des transformations si celle-ci est trop éloignée d’une forme gaussienne.

Taille moyenne des ménages (tailm)

X<-don$tailm

# résumé statistique
summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.032   4.371   4.754   4.682   4.912   5.401 
# graphique en R-base
hist(X)

boxplot(X, horizontal=T)

Densité de population (densi)

X<-don$densi
summary(X)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
   3.691   49.421   82.123  342.739  241.184 4064.265 
hist(X)

boxplot(X, horizontal=T)

On essaye une transformation logarithmique

X<-log(don$densi)
summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.306   3.900   4.408   4.598   5.486   8.310 
hist(X)

boxplot(X, horizontal=T)

C’est mieux !

Taux de mobilité (mobil)

X<-don$mobil
summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  7.351   9.831  11.209  13.128  14.652  26.375 
hist(X)

boxplot(X, horizontal=T)

Taux d’accroissement migratoire (acmig)

X<-don$acmig
summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-4.9969 -2.8617 -0.6699 -0.3281  1.0955  8.9749 
hist(X)

boxplot(X, horizontal=T)

Taux d’équipement des ménages en téléphones mobiles (mobil)

X<-don$mobil
summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  7.351   9.831  11.209  13.128  14.652  26.375 
hist(X)

boxplot(X, horizontal=T)

Taux d’équipement des ménages en ordinateur (ordin)

X<-don$ordin
summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.243   2.957   4.835   5.720   7.050  16.324 
hist(X)

boxplot(X, horizontal=T)

Exploration cartographique

On procède à une cartographie rapide des six variables sous forme de planches utilisant la même méthode de discrétisation (quartiles)

# Charge le fichier stat + geom
map<-readRDS("data/EXPLO/map2004.RDS")

Données structurelles

On compare ici la taille moyenne des ménages et la densité de population

# Définit un cadre avec deux cartes côte à côte
par(mfrow=c(1,2)) # une ligne et deux colonnes

# Carte n°1
mf_map(x = map, 
       type = "choro",
       var="tailm",
       breaks = "quantile",
       nbreaks=4, 
       leg_title = "quartiles")
mf_layout(title = "Taille moyenne des ménages", 
          credits = "Source : INS",
          frame=T)

# Carte n°2 
mf_map(x = map, type = "choro",var="densi",
       breaks = "quantile",nbreaks=4, leg_title = "quartiles")
mf_layout(title = "Densité de population", 
          credits = "Source : INS",
          frame=T)

Données démographiques

On compare ici le taux de mobilité et le taux d’accroissement migratoire

# Définit un cadre avec deux cartes côte à côte
par(mfrow=c(1,2))

# Carte n°1
mf_map(x = map,
       type = "choro",
       var="mobil",
       breaks = "quantile",
       nbreaks=4, 
       leg_title = "quartiles")
mf_layout(title = "Taux de mobilité", 
          credits = "Source : INS",
          frame=T)

# Carte n°2 
mf_map(x = map, 
       type = "choro",
       var="acmig",
       breaks = "quantile",
       nbreaks=4, 
       leg_title = "quartiles")
mf_layout(title = "Taux d'accroissement migratoire", 
          credits = "Source : INS",
          frame=T)

Données d’équipement

On compare ici le taux d’équipement des ménages en ordinateur et téléphones portables

# Définit un cadre avec deux cartes côte à côte
par(mfrow=c(1,2))

# Carte n°1
mf_map(x = map, type = "choro",var="porta",
       breaks = "quantile",nbreaks=4, leg_title = "quartiles")
mf_layout(title = "Equipement en téléphones portables", 
          credits = "Source : INS",
          frame=T)

# Carte n°2 
mf_map(x = map, type = "choro",var="ordin",
       breaks = "quantile",nbreaks=4, leg_title = "quartiles")
mf_layout(title = "Equipement en ordinateurs", 
          credits = "Source : INS",
          frame=T)

(3) ANALYSE EN COMPOSANTES PRINCIPALES (ACP)

Au vu de l’exploration statistique, on décide de transformer la densité de population en logarithme. Le reste des variables demeure inchangé. On choisit comme précédemment l’exemple de la situation en 2004.

Tableau brut

On constitue un tableau ne gardant que les 6 variables utiles. On ajoute en nom de lignes le code des gouvernorats

don<-readRDS("data/EXPLO/don2004.RDS")

# transforme la densité
don$logden<-log(don$densi) 

# choisit les variables
tab<-don[,c("tailm", "logden","mobil", "acmig", "ordin","porta")]   

# Ajoute un identifiant en numéro de ligne
row.names(tab) <- don$code

# Affiche le tableau
kable(tab, digits=2, caption = "Tableau brut")
Tableau brut
tailm logden mobil acmig ordin porta
AN 4.17 6.92 21.85 8.97 16.32 59.31
BA 4.29 6.65 24.06 7.30 13.02 60.50
BJ 4.44 4.40 10.56 -3.15 3.24 32.19
BZ 4.37 5.01 9.85 -0.54 4.98 38.72
GB 4.92 3.87 14.71 -0.69 6.00 46.11
GF 4.91 3.72 11.22 -2.40 6.81 43.60
JE 4.49 4.90 10.11 -2.38 2.50 32.93
KB 5.39 1.85 9.99 -1.20 3.38 50.70
KF 4.38 3.93 13.73 -4.31 3.04 33.02
KR 5.06 4.42 9.78 -4.21 1.72 29.51
KS 5.19 3.91 9.73 -4.10 1.60 31.19
ME 4.81 3.85 11.87 0.62 4.69 49.46
MH 4.77 4.88 7.35 -0.65 3.32 42.78
MN 4.75 5.71 14.63 2.89 6.61 43.52
MS 4.51 6.13 11.19 3.72 7.81 56.02
NB 4.27 5.50 9.22 1.02 6.10 46.51
SF 4.31 4.81 16.89 1.33 7.77 47.60
SL 4.83 3.92 12.32 -5.00 2.25 32.68
SS 4.37 5.48 17.58 4.02 9.62 56.75
SZ 5.15 3.98 8.73 -3.55 1.24 36.69
TA 5.40 1.31 13.52 -1.71 3.48 45.79
TO 4.76 2.86 10.39 -0.60 5.04 43.56
TU 4.03 8.31 26.38 -2.76 14.01 60.47
ZA 4.80 4.03 9.41 -0.49 2.70 37.94

Standardisation

L’ACP normée va travailler non pas sur le tableau brut mais sur le tableau standardisé afin que les variables soient comparables. Pour éliminer les effets de taille et d’unité de mesure. Chaque variable aura alors le même poids.

# applique la standardiation à chaque variable (2)
tabstd <- apply(tab,2, scale) 

# Ajoute les identifiants des unités 
row.names(tabstd)<-don$code

#Affiche le tableau
kable(tabstd, 
      digits=1,
      caption="Tableau standardisé")
Tableau standardisé
tailm logden mobil acmig ordin porta
AN -1.3 1.5 1.8 2.6 2.6 1.6
BA -1.0 1.3 2.2 2.1 1.8 1.7
BJ -0.6 -0.1 -0.5 -0.8 -0.6 -1.2
BZ -0.8 0.3 -0.7 -0.1 -0.2 -0.5
GB 0.6 -0.5 0.3 -0.1 0.1 0.2
GF 0.6 -0.6 -0.4 -0.6 0.3 0.0
JE -0.5 0.2 -0.6 -0.6 -0.8 -1.1
KB 1.9 -1.8 -0.6 -0.2 -0.6 0.7
KF -0.8 -0.4 0.1 -1.1 -0.7 -1.1
KR 1.0 -0.1 -0.7 -1.1 -1.0 -1.5
KS 1.3 -0.4 -0.7 -1.0 -1.0 -1.3
ME 0.3 -0.5 -0.3 0.3 -0.3 0.6
MH 0.2 0.2 -1.2 -0.1 -0.6 -0.1
MN 0.2 0.7 0.3 0.9 0.2 -0.1
MS -0.4 1.0 -0.4 1.1 0.5 1.2
NB -1.1 0.6 -0.8 0.4 0.1 0.3
SF -1.0 0.1 0.8 0.5 0.5 0.4
SL 0.4 -0.4 -0.2 -1.3 -0.9 -1.2
SS -0.8 0.6 0.9 1.2 1.0 1.3
SZ 1.2 -0.4 -0.9 -0.9 -1.1 -0.8
TA 1.9 -2.1 0.1 -0.4 -0.6 0.2
TO 0.2 -1.1 -0.6 -0.1 -0.2 -0.1
TU -1.7 2.4 2.7 -0.7 2.0 1.7
ZA 0.3 -0.4 -0.7 0.0 -0.7 -0.6

Matrice de corrélation

On peut examiner la matrice de corrélation entre les variables :

matcor<-cor(tab)
kable(matcor,digits=2, caption = "Matrice des corrélations")
Matrice des corrélations
tailm logden mobil acmig ordin porta
tailm 1.00 -0.81 -0.56 -0.46 -0.67 -0.40
logden -0.81 1.00 0.62 0.50 0.73 0.48
mobil -0.56 0.62 1.00 0.52 0.87 0.70
acmig -0.46 0.50 0.52 1.00 0.76 0.77
ordin -0.67 0.73 0.87 0.76 1.00 0.86
porta -0.40 0.48 0.70 0.77 0.86 1.00

? ajouter un corrélogramme ?

Paramètres principaux

param <- apply(tab, 2, summary)
variance<-apply(tab,2,var)
ectype<-apply(tab,2,sd)
tabres<-rbind(param, variance,ectype)
tabres<-data.frame(tabres)
row.names(tabres)<-c("Minimum","Q1","Mediane","Moyenne","Q3","Maximum","Variance","Ecart-Type")

kable(tabres, 
      digits=1,
      caption = "Paramètres principaux",
      )
Paramètres principaux
tailm logden mobil acmig ordin porta
Minimum 4.0 1.3 7.4 -5.0 1.2 29.5
Q1 4.4 3.9 9.8 -2.9 3.0 35.8
Mediane 4.8 4.4 11.2 -0.7 4.8 43.6
Moyenne 4.7 4.6 13.1 -0.3 5.7 44.1
Q3 4.9 5.5 14.7 1.1 7.1 49.8
Maximum 5.4 8.3 26.4 9.0 16.3 60.5
Variance 0.1 2.4 24.7 13.0 16.4 95.3
Ecart-Type 0.4 1.5 5.0 3.6 4.0 9.8

ACP

On lance la procédure d’Analyse en Composantes Principales sur le tableau des variables initiales tab Pour cela on utilise la library FactoMineR Vocabulaire : composante = axe = facteurs

# Réalisation de l'ACP : la sortie est une liste
acp <- PCA(tab, 
           graph=FALSE)

# Nom des éléments de la liste
names(acp)
[1] "eig"  "var"  "ind"  "svd"  "call"

La procédure a créé un objet acp qui est une liste de tableaux

L’objet acp contient de nombreux résultats que nous pouvons extraire, puis analyser. Les résultats qui décrivent : - les composantes de l’ACP : Eig : les valeurs propres - les positions des variables du tableau initial sur les composantes Var : les informations relatives aux variables - les positions des individus sur les composantes Ind : les informations relatives aux individus

Analyse des valeurs propres

On commence par récupérer les résultats sur les valeurs propres des composantes eig

# Extrait les valeurs propres (eig = eigenvalue)
Valprop<-acp$eig

kable(Valprop, 
      digits=2,
      caption = "Les valeurs propres des composantes ",
      col.names = c ("Valeurpropre", "PCVariance", "CumVariance"))
Les valeurs propres des composantes
Valeurpropre PCVariance CumVariance
comp 1 4.26 70.95 70.95
comp 2 0.90 14.95 85.91
comp 3 0.47 7.76 93.67
comp 4 0.18 3.04 96.70
comp 5 0.16 2.59 99.29
comp 6 0.04 0.71 100.00

On représente graphiquement les valeurs propres

Syntaxe las = 2 #pour que les noms des barres soient à la verticale names.arg = VALPROP$Comp, #pour nommer chaque barre du graphique avec les noms d’axes

VALPROP <- as.data.frame(Valprop)
VALPROP$Comp <- c("F1", "F2", "F3", "F4", "F5", "F6")
VALPROP <- VALPROP %>% rename(ValeurPropre='eigenvalue', 
                    PCVariance='percentage of variance',
                    CumVariance='cumulative percentage of variance')
barplot(VALPROP$PCVariance,  
        ylim = c(0, 80), col= "skyblue" , 
        names.arg = VALPROP$Comp,
      main = "Le % de variance des composantes",
     xlab = "les composantes",
     ylab = "le % de variance",
     las = 2)

Analyse des variables / composantes

Qualités de représentation
  • Extraction des qualités de représentations des variables sur les composantes (contenues dans acp)
  • Récupération des qualités de représentations des variables sur les composantes dans un dataframe Var$cos2
  • Nous n’analyserons que les 2 1ères composantes
qualvar<-acp$var$cos2
QUALVAR <- as.data.frame(qualvar)
QUALVAR <- QUALVAR %>% select (Dim.1:Dim.2)
QUALVAR <- QUALVAR %>% rename(QualF1='Dim.1', QualF2='Dim.2')
kable(QUALVAR, 
      digits=2,
      caption = "Qualités de représentations des variables sur les composantes")
Qualités de représentations des variables sur les composantes
QualF1 QualF2
tailm 0.58 0.31
logden 0.66 0.23
mobil 0.73 0.00
acmig 0.63 0.14
ordin 0.95 0.01
porta 0.71 0.21

Contributions

Var$contrib

ctrvar<-acp$var$contrib
CTRVAR <- as.data.frame(ctrvar)
CTRVAR <- CTRVAR %>% select (Dim.1:Dim.2)
CTRVAR <- CTRVAR %>% rename(CtrF1='Dim.1', CtrF2='Dim.2')
kable(CTRVAR, 
      digits=2,
      caption = "Contributions des variables aux composantes")
Contributions des variables aux composantes
CtrF1 CtrF2
tailm 13.68 34.86
logden 15.62 25.17
mobil 17.15 0.16
acmig 14.74 15.13
ordin 22.25 1.31
porta 16.57 23.37

Corrélations

corvar<-acp$var$cor
CORVAR <- as.data.frame(corvar)
CORVAR <- CORVAR %>% select(Dim.1:Dim.2)
CORVAR <- CORVAR %>% rename(CorF1='Dim.1', CorF2='Dim.2')
kable(CORVAR, 
      digits=2,
      caption = "Corrélations des variables avec les composantes")
Corrélations des variables avec les composantes
CorF1 CorF2
tailm -0.76 0.56
logden 0.82 -0.48
mobil 0.85 0.04
acmig 0.79 0.37
ordin 0.97 0.11
porta 0.84 0.46

Tableau de synthèse

Réunion des descriptions des variables (QUAL, COR, CTR) sur les composantes dans un seul tableau

ACPComp <- cbind.data.frame(CORVAR, CTRVAR,QUALVAR)
kable(ACPComp, 
      digits=2,
      caption = "Descriptions des composantes par les variables")
Descriptions des composantes par les variables
CorF1 CorF2 CtrF1 CtrF2 QualF1 QualF2
tailm -0.76 0.56 13.68 34.86 0.58 0.31
logden 0.82 -0.48 15.62 25.17 0.66 0.23
mobil 0.85 0.04 17.15 0.16 0.73 0.00
acmig 0.79 0.37 14.74 15.13 0.63 0.14
ordin 0.97 0.11 22.25 1.31 0.95 0.01
porta 0.84 0.46 16.57 23.37 0.71 0.21

Graphique n°1 : corrélations des variables avec les composantes

Représentation graphique des positions des variables sur le 1er plan factoriels : 1-2 soit 86% de la variance du tableau de données

plot.PCA(acp,choix = "var",axes = c(1,2))

Analyse des individus / composantes

On fait la même chose pour les individus : on récupère les résultats pour les coordonnées et contributions des individus sur les composantes ind\(coord* *ind\)contrib On pourrait aussi récupérer les qualités de représentations (cos2) On ne travaille que sur les 2 premiers axes

Tableau de synthèse

cooind<-data.frame(acp$ind$coord)
COOIND <- cooind %>% select(Dim.1:Dim.2)
COOIND <- COOIND %>% rename(CorIndF1='Dim.1', CorIndF2='Dim.2')

ctrind<-data.frame(acp$ind$contrib)
CTRIND <- ctrind %>% select(Dim.1:Dim.2)
CTRIND <- CTRIND %>% rename(CtrIndF1='Dim.1', CtrIndF2='Dim.2')

ACPIndComp <- cbind.data.frame(COOIND, CTRIND)
kable(ACPIndComp, 
      digits=2,
      caption = "Descriptions des composantes par les variables")
Descriptions des composantes par les variables
CorIndF1 CorIndF2 CtrIndF1 CtrIndF2
AN 4.78 0.59 22.40 1.62
BA 4.25 0.68 17.70 2.12
BJ -1.14 -1.32 1.28 8.07
BZ -0.20 -0.97 0.04 4.38
GB -0.21 0.70 0.04 2.25
GF -0.73 0.41 0.53 0.79
JE -1.07 -1.32 1.11 8.05
KB -1.78 2.18 3.10 22.10
KF -1.05 -1.32 1.08 8.14
KR -2.22 -0.65 4.84 1.96
KS -2.42 -0.19 5.72 0.16
ME -0.21 0.78 0.04 2.83
MH -0.88 -0.17 0.76 0.14
MN 0.79 0.10 0.61 0.05
MS 1.60 0.32 2.51 0.48
NB 0.61 -0.70 0.36 2.31
SF 1.32 -0.21 1.71 0.20
SL -1.80 -0.74 3.17 2.54
SS 2.39 0.49 5.60 1.12
SZ -2.20 0.05 4.73 0.01
TA -1.88 2.10 3.47 20.50
TO -0.90 0.61 0.79 1.71
TU 4.16 -1.35 16.96 8.44
ZA -1.22 -0.07 1.46 0.02

Graphique des coordonnées des individus sur les composantes

plot.PCA(acp, choix = "ind",  cex = 0.8)

Cartographie des résultats de l’ACP

On fait une jointure

# Chargement du fonds de carte
map<-readRDS("data/EXPLO/map2004.RDS")
map<-map[,c("gou_code","gou_nom","geometry")]
# Ajout du code aux résultats de l'ACP sur les individus
ACPIndComp$gou_code<-rownames(ACPIndComp)
# Jointure
mapACP<-merge(map,ACPIndComp,by="gou_code")

On cartographie l’axe factoriel n°1

# Choix des classes et paliers
mybreaks<-c(-10,-3,-2,-1,0,1,2,3,10)
mypal<-brewer.pal(n = 8,name="RdBu")

# Carte des coordonnées des individus sur le 1er axe
mf_map(x = mapACP, type = "choro",var="CorIndF1",
       breaks = mybreaks,
       pal=mypal,
       leg_title = "Coordonnées", leg_pos="right")
mf_map(x=mapACP, type="prop", var ="CtrIndF1",
       col="gray",border="black",inches=0.05,
       leg_title = "Contributions", leg_pos = "topright")
mf_layout(title =  "Axe factoriel n°1 : Opposition entre les métropoles littorales et l'intérieur", 
          credits = "Source : INS",
          frame=T)

On cartographie l’axe factoriel n°2

# Choix des classes et paliers
mybreaks<-c(-10,-3,-2,-1,0,1,2,3,10)
mypal<-brewer.pal(n = 8,name="RdBu")

# Carte des coordonnées des individus sur le 1er axe
mf_map(x = mapACP, type = "choro",var="CorIndF2",
       breaks = mybreaks,
       pal=mypal,
       leg_title = "Coordonnées", leg_pos="right")
mf_map(x=mapACP, type="prop", var ="CtrIndF2",
       col="gray",border="black",inches=0.05,
       leg_title = "Contributions", leg_pos = "topright")
mf_layout(title = "Axe factoriel n°2 : Spécificité des zones intérieures du Nord et du Sud", 
          credits = "Source : INS",
          frame=T)

(4) CLASSIFICATION ASCENDANTE HIERARCHIQUE (CAH)

Réalisation de la CAH

cah<-HCPC(acp,nb.clust = 4)

tabres<-cah$data.clust

Aide à l’interprétation du profil des classes

catdes(tabres,num.var = 7)

Link between the cluster variable and the quantitative variables
================================================================
            Eta2           P-value
logden 0.8742961 0.000000003430429
ordin  0.8626694 0.000000008258952
mobil  0.7922782 0.000000498388749
porta  0.6942662 0.000022432310735
tailm  0.6628743 0.000058422533025
acmig  0.5586204 0.000803095528735

Description of each cluster by quantitative variables
=====================================================
$`1`
          v.test Mean in category Overall mean sd in category Overall sd
tailm   2.754972         5.397597     4.681510    0.003118411  0.3758509
logden -2.900932         1.579334     4.598438    0.273543036  1.5049016
           p.value
tailm  0.005869713
logden 0.003720544

$`2`
         v.test Mean in category Overall mean sd in category Overall sd
mobil -2.833720        10.697866   13.1278048       1.876258   4.865936
acmig -3.086236        -2.247168   -0.3281443       1.765304   3.528411
ordin -3.165110         3.509918    5.7196433       1.659890   3.961662
porta -3.670047        37.883834   44.0643183       6.067117   9.556057
           p.value
mobil 0.0046009675
acmig 0.0020270800
ordin 0.0015502425
porta 0.0002425055

$`3`
        v.test Mean in category Overall mean sd in category Overall sd
acmig 2.038861         2.595971   -0.3281443       1.221718   3.528411
         p.value
acmig 0.04146395

$`4`
          v.test Mean in category Overall mean sd in category Overall sd
mobil   4.085085        24.093913   13.1278048      1.8477795  4.8659360
ordin   3.995453        14.451942    5.7196433      1.3848440  3.9616623
logden  3.246416         7.293678    4.5984382      0.7275680  1.5049016
porta   3.040853        60.095267   44.0643183      0.5540810  9.5560575
acmig   2.482717         4.504573   -0.3281443      5.1851866  3.5284107
tailm  -2.500845         4.162964    4.6815104      0.1053255  0.3758509
             p.value
mobil  0.00004406077
ordin  0.00006457066
logden 0.00116868064
porta  0.00235909247
acmig  0.01303847659
tailm  0.01238973441

Visualisation du profils des classes

plot.catdes(catdes(tabres,7,proba = 1),level = 1,barplot = T)

Jointure du fonds de carte et des résultats de la CAH

# Chargement du fonds de carte
map<-readRDS("data/EXPLO/map2004.RDS")
map<-map[,c("gou_code","gou_nom","geometry")]
# Ajout du code aux résultats de l'ACP sur les individus
tabres$gou_code<-rownames(tabres)
# Jointure
mapCAH<-merge(map,tabres,by="gou_code")

Cartographie des résultats de la CAH

# Ajout de noms aux classes
mapCAH$classes<-as.factor(mapCAH$clust)
levels(mapCAH$classes)<- c("1 : Spécifique",
                           "2 : Défavorisé",
                           "3 : Favorisé",
                           "4 : Très favorisé")
mypal=c("lightgreen","lightyellow","orange","red")

# Carte des coordonnées des individus sur le 1er axe
mf_map(x = mapCAH, type = "typo",var="classes",
       leg_title = "Classes", leg_pos="right",
       pal=mypal)
mf_layout(title = "Typologie des gouvernorats", 
          credits = "Source : INS",
          frame=T)