## 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")
$set(echo=TRUE,
opts_chunkcache=FALSE,
prompt=FALSE,
tidy=FALSE,
comment=NA,
message=FALSE,
warning=FALSE,
options(scipen=999))
$set(width=75) opts_knit
[STA3] : Introduction à la statistique multivariée
GEO UNIV’R Tunisie 2024
(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.
Importe les données statistiques
# Importation du fichier .csv
<- read.table("data/RP_Tunisie/data/don_gou.csv",
don 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
<-don$gou_code
code<-don$gou_nom
nom<- don$popto_2004
popto <- don$menag_2004
menag <- don$popto_2004/don$menag_2004
tailm <- don$popto_2004/don$surfa_2010
densi #urban <- 100*don$popco_2004/don$popto_2004
<- 100*(don$immig_2004+don$emigr_2004)/don$popto_2004
mobil <- 100*(don$immig_2004-don$emigr_2004)/don$popto_2004
acmig <- 100*don$ordin_2004/don$menag_2004
ordin <- 100*don$porta_2004/don$menag_2004
porta
# Affichage
<-data.frame(code,nom, popto,menag, tailm, densi,mobil, acmig, ordin, porta)
tabkable(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
<-sf::st_read("data/RP_Tunisie/geom/map_gou.shp")
map
# Jointure des données statistiques et géométriques
<- merge(map, tab, by.x="gou_code",by.y="code")
map
# Sauvegarde aux formats .RDS .shp et .geojson
saveRDS(map, "data/EXPLO/map2004.RDS") ## Format interne de R
::st_write(map, "data/EXPLO/map2004.geojson",delete_dsn = T) ## Format geojson
sf
::st_write(map, "data/EXPLO/map2004.shp",delete_dsn = T) sf
(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.
<-readRDS("data/EXPLO/don2004.RDS") # recharge le fichier
donhead(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)
<-don$tailm
X
# 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)
<-don$densi
Xsummary(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
<-log(don$densi)
Xsummary(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)
<-don$mobil
Xsummary(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)
<-don$acmig
Xsummary(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)
<-don$mobil
Xsummary(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)
<-don$ordin
Xsummary(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
<-readRDS("data/EXPLO/map2004.RDS") map
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
<-readRDS("data/EXPLO/don2004.RDS")
don
# transforme la densité
$logden<-log(don$densi)
don
# choisit les variables
<-don[,c("tailm", "logden","mobil", "acmig", "ordin","porta")]
tab
# Ajoute un identifiant en numéro de ligne
row.names(tab) <- don$code
# Affiche le tableau
kable(tab, digits=2, caption = "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)
<- apply(tab,2, scale)
tabstd
# Ajoute les identifiants des unités
row.names(tabstd)<-don$code
#Affiche le tableau
kable(tabstd,
digits=1,
caption="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 :
<-cor(tab)
matcorkable(matcor,digits=2, caption = "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
<- apply(tab, 2, summary)
param <-apply(tab,2,var)
variance<-apply(tab,2,sd)
ectype<-rbind(param, variance,ectype)
tabres<-data.frame(tabres)
tabresrow.names(tabres)<-c("Minimum","Q1","Mediane","Moyenne","Q3","Maximum","Variance","Ecart-Type")
kable(tabres,
digits=1,
caption = "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
<- PCA(tab,
acp 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)
<-acp$eig
Valprop
kable(Valprop,
digits=2,
caption = "Les valeurs propres des composantes ",
col.names = c ("Valeurpropre", "PCVariance", "CumVariance"))
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
<- as.data.frame(Valprop)
VALPROP $Comp <- c("F1", "F2", "F3", "F4", "F5", "F6")
VALPROP<- VALPROP %>% rename(ValeurPropre='eigenvalue',
VALPROP 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
<-acp$var$cos2
qualvar<- as.data.frame(qualvar)
QUALVAR <- QUALVAR %>% select (Dim.1:Dim.2)
QUALVAR <- QUALVAR %>% rename(QualF1='Dim.1', QualF2='Dim.2')
QUALVAR kable(QUALVAR,
digits=2,
caption = "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
<-acp$var$contrib
ctrvar<- as.data.frame(ctrvar)
CTRVAR <- CTRVAR %>% select (Dim.1:Dim.2)
CTRVAR <- CTRVAR %>% rename(CtrF1='Dim.1', CtrF2='Dim.2')
CTRVAR kable(CTRVAR,
digits=2,
caption = "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
<-acp$var$cor
corvar<- as.data.frame(corvar)
CORVAR <- CORVAR %>% select(Dim.1:Dim.2)
CORVAR <- CORVAR %>% rename(CorF1='Dim.1', CorF2='Dim.2')
CORVAR kable(CORVAR,
digits=2,
caption = "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
<- cbind.data.frame(CORVAR, CTRVAR,QUALVAR)
ACPComp kable(ACPComp,
digits=2,
caption = "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
<-data.frame(acp$ind$coord)
cooind<- cooind %>% select(Dim.1:Dim.2)
COOIND <- COOIND %>% rename(CorIndF1='Dim.1', CorIndF2='Dim.2')
COOIND
<-data.frame(acp$ind$contrib)
ctrind<- ctrind %>% select(Dim.1:Dim.2)
CTRIND <- CTRIND %>% rename(CtrIndF1='Dim.1', CtrIndF2='Dim.2')
CTRIND
<- cbind.data.frame(COOIND, CTRIND)
ACPIndComp kable(ACPIndComp,
digits=2,
caption = "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
<-readRDS("data/EXPLO/map2004.RDS")
map<-map[,c("gou_code","gou_nom","geometry")]
map# Ajout du code aux résultats de l'ACP sur les individus
$gou_code<-rownames(ACPIndComp)
ACPIndComp# Jointure
<-merge(map,ACPIndComp,by="gou_code") mapACP
On cartographie l’axe factoriel n°1
# Choix des classes et paliers
<-c(-10,-3,-2,-1,0,1,2,3,10)
mybreaks<-brewer.pal(n = 8,name="RdBu")
mypal
# 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
<-c(-10,-3,-2,-1,0,1,2,3,10)
mybreaks<-brewer.pal(n = 8,name="RdBu")
mypal
# 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
<-HCPC(acp,nb.clust = 4) cah
<-cah$data.clust tabres
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
<-readRDS("data/EXPLO/map2004.RDS")
map<-map[,c("gou_code","gou_nom","geometry")]
map# Ajout du code aux résultats de l'ACP sur les individus
$gou_code<-rownames(tabres)
tabres# Jointure
<-merge(map,tabres,by="gou_code") mapCAH
Cartographie des résultats de la CAH
# Ajout de noms aux classes
$classes<-as.factor(mapCAH$clust)
mapCAHlevels(mapCAH$classes)<- c("1 : Spécifique",
"2 : Défavorisé",
"3 : Favorisé",
"4 : Très favorisé")
=c("lightgreen","lightyellow","orange","red")
mypal
# 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)