Cette section présente les analyses réalisées pour établir des groupes de pays comparables selon leur profil de vaccination.
Pour analyser notre jeu de données sur la vaccination, nous aurons recours aux analyses par grappes (cluster analysis ou clustering en anglais). L’objectif de ce type d’analyses est de regrouper les observations, les pays dans le cas présent, qui présentent le plus de similitudes en fonction de certaines caractéristiques. Plus précisément, nous allons créer des groupes de pays comparables selon leur profil de vaccination et des indicateurs comme la population, le PIB et l’espérance de vie.
Pour réaliser notre analyse, nous nous inspirons des méthodologies présentées dans Lapierre and Joanis (2016) et Silge (2021).
Pour nos analyses, nous utilisons le jeu de données des données par pays les plus récentes en lien avec la vaccination. Pour simplifier les analyses, nous avons éliminé toutes observations comportant des valeurs manquantes.
La première étape de notre analyse consiste à vérifier la corrélation entre les variables qui seront utilisées pour l’analyse par grappes. Comme mentionné dans Lapierre and Joanis (2016), les coefficients de corrélation ne devraient pas dépasser 0,8.
À titre de rappel, le coefficient de corrélation mesure la relation entre deux variables. Plus il est près de 1 (-1), plus la relation entre les deux variables est linéaire et positive (négative).
ggplot(df_corr,
aes(people_fully_vaccinated_per_hundred, life_expectancy)) +
geom_point(shape = "circle", size = 1.5, colour = "#440154") +
ggtitle("Relation entre les personnes pleinement vaccinées \npar 100 habitants et l'espérance de vie") +
theme_economist() +
theme(title = element_text(size = 9))

Par exemple, le graphique ci-haut illustre cette relation entre les variables personnes pleinement vaccinées par 100 hab. (people_fully_vaccinated_per_hundred) et espérance de vie (life_expectancy). Le coefficient de corrélation de 0.8 confirme ce que nous montre le graphique, c’est-à-dire qu’il y a une forte relation positive entre les deux variables.
À l’opposé, le coefficient de corrélation des variables population (population) et espérance de vie (life_expectancy) est de -0.03, indiquant une très faible relation négative.
| people_fully_vaccinated_per_hundred | population | income_per_person | gdp | life_expectancy | |
|---|---|---|---|---|---|
| people_fully_vaccinated_per_hundred | 1.00 | -0.01 | 0.74 | 0.19 | 0.80 |
| population | -0.01 | 1.00 | -0.03 | 0.60 | -0.03 |
| income_per_person | 0.74 | -0.03 | 1.00 | 0.28 | 0.73 |
| gdp | 0.19 | 0.60 | 0.28 | 1.00 | 0.18 |
| life_expectancy | 0.80 | -0.03 | 0.73 | 0.18 | 1.00 |
Ce sont les combinaisons suivantes qui présentent les coefficients de corrélation les plus élevés :
people_fully_vaccinated_per_hundred et income_per_personpeople_fully_vaccinated_per_hundred et life_expectancyincome_per_person et life_expectancygdp et populationLa bonne nouvelle, c’est qu’aucun de ces coefficients ne dépassent le seuil de 0.8. Nous pouvons donc procéder à l’analyse par grappes avec des variables.
La prochaine étape de l’analyse est de s’assurer de standardiser les données. En effet, comme l’objectif de l’analyse par grappes est de regrouper ensemble les pays les plus similaires, il est important de tenir compte des effets d’échelle. Les variables de population et de PIB (gpd) sont de bons exemples de variables où un effet d’échelle pourrait venir influencer les analyses.
Voici d’abord un tableau présentant les statistiques descriptives des variables qui nous intéressent pour l’analyse par grappes.
Statistiques descriptives des variables d’intérêtsstat_descriptive %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
| Variable | Minimum | Maximum | Moyenne | Écart type |
|---|---|---|---|---|
| Personnes pleinement vaccinées par 100 hab. | 0 | 90 | 41 | 27 |
| Population | 98728 | 1393409033 | 35433218 | 114075744 |
| PIB réel estimé par habitant | 673 | 94610 | 18848 | 18897 |
| PIB réel estimé (G$) | 0 | 21146 | 594 | 1897 |
| Espérance de vie | 54 | 85 | 74 | 7 |
Nous standardisons maintenant nos variables d’intérêts en utilisant la fonction scale() de R. Voici le même tableau que présenté précédemment, mais cette fois en calculant les statistiques descriptives pour nos variables d’intérêt qui ont été standardisées. On peut voir que l’ensemble des variables présentent ainsi une moyenne de 0 et un écart type de 1.
stat_norm %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
| Variable | Minimum | Maximum | Moyenne | Écart type |
|---|---|---|---|---|
| Personnes pleinement vaccinées par 100 hab. | -1 | 2 | 0 | 1 |
| Population | 0 | 12 | 0 | 1 |
| PIB réel estimé par habitant | -1 | 4 | 0 | 1 |
| PIB réel estimé (G$) | 0 | 11 | 0 | 1 |
| Espérance de vie | -3 | 2 | 0 | 1 |
L’analyse par grappes présentée ici est grandement inspirée et adaptée de Silge (2021). Dans cette démonstration, Julia Silge présente une application de l’analyse par grappes avec la méthode des k-means.
Il est généralement recommandé de commencer une analyse par grappe avec la méthode des k-means avec 3 grappes. Silge recommande ensuite d’utiliser la fonction tidy() du package broom (compris dans les tidymodels) afin de visualiser les résultats de cette première analyse.
Length Class Mode
cluster 176 -none- numeric
centers 15 -none- numeric
totss 1 -none- numeric
withinss 3 -none- numeric
tot.withinss 1 -none- numeric
betweenss 1 -none- numeric
size 3 -none- numeric
iter 1 -none- numeric
ifault 1 -none- numeric
# A tibble: 3 × 8
people_fully_vac… population income_per_pers… gdp life_expectancy
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1.14 0.253 1.51 0.593 1.11
2 -1.15 -0.0543 -0.785 -0.247 -1.15
3 0.237 -0.0935 -0.218 -0.131 0.255
# … with 3 more variables: size <int>, withinss <dbl>, cluster <fct>
Il est maintenant possible d’observer nos trois grappes en produisant un nuage de points à partir de deux variables. À noter que pour arriver à visualiser nos grappes, il est nécessaire de relier nos grappes avec nos données. Pour ce faire, nous utilisons la fonction augment().
augment(vaccination_clust, df_analysis) %>% # on lie les clusters avec la db originale
ggplot(aes(people_fully_vaccinated_per_hundred, life_expectancy, color = .cluster)) +
geom_point() +
ggtitle("Relation entre les personnes pleinement vaccinées \npar 100 habitants et l'espérance de vie, trois grappes") +
theme_economist() +
theme(legend.position = "right",
legend.key.size = unit(1, "cm"),
title = element_text(size = 9),
axis.title = element_text(size = 10),
legend.text = element_text(size = 10),
legend.title=element_text(face = "bold", size = 11))

La lecture du graphique nous indique déjà que l’analyse par grappes est intéressante pour notre jeu de données. En effet, bien qu’il y ait quelques croisements entre certains pays, il est évident que les pays tendent à se regrouper selon leur position dans le graphique. Par exemple, les pays dans le coin inférieur gauche semblent caractérisés par une plus faible proportion de personnes pleinement vaccinées ainsi qu’une plus faible espérance de vie. Pour leur part, les pays dans le coin supérieur droit sont à l’opposé avec une plus forte proportion de personnes pleinement vaccinées ainsi qu’une grande espérance de vie.
Il est toutefois possible de constater que nous avons deux points (pays) qui semblent se retrouver en plein milieu du groupe central. Voyons si nous pouvons raffiner l’analyse par grappe.
Que ce soit par le nombre de grappes à constituer ou par la liste des variables à inclure pour identifier nos grappes, les analyses par grappes relèvent de l’art autant que de la science. À noter que considérant la nature de ce rapport, nous nous limitions ici à un simple test pour évaluer le nombre de grappes à utiliser.
Qu’est-ce qui confirme que trois est le bon nombre de grappes à utiliser en fonction notre jeu de données?
One way is to look at the total within-cluster sum of squares and see if it stops dropping off so quickly at some value for k. We can get that from another verb from broom, glance(); let’s try lots of values for k and see what happens to the total sum of squares. Silge (2021)
kclusts <-
tibble(k = 1:10) %>%
mutate(
kclust = map(k, ~ kmeans(select(df_analysis, -name), .x)),
glanced = map(kclust, glance),
)
kclusts %>%
unnest(cols = c(glanced)) %>%
ggplot(aes(k, tot.withinss)) +
geom_line(alpha = 0.5, size = 1.2, colour = "#440154") +
geom_point(size = 2, colour = "#440154") +
ggtitle("Une aide pour choisir le nombre de grappes") +
theme_economist() +
theme(title = element_text(size = 9))

L’analyse du graphique semble indiquer que c’est avec quatre grappes que notre analyse sera la plus stable. Ajustons notre analyse par grappes en conséquence.
final_clust <- kmeans(select(df_analysis, -name), centers = 4)
library(plotly)
p <- augment(final_clust, df_analysis) %>%
ggplot(aes(people_fully_vaccinated_per_hundred, life_expectancy, color = .cluster, name = name)) +
geom_point() +
ggtitle("Relation entre les personnes pleinement vaccinées \npar 100 habitants et l'espérance de vie, quatre grappes")
ggplotly(p, height = 500)
C’est ce qui conclut la partie analyse de ce rapport. Dans la prochaine section, nous produisons quelques visualisations pour explorer les résultats de cette analyse par grappes.
Les données utilisées pour les analyses sont disponibles pour le téléchargement sur la page Données pour téléchargement.
If you see mistakes or want to suggest changes, please create an issue on the source repository.
For attribution, please cite this work as
Lapierre (2021, Dec. 21). Projet final: Établir des groupes de pays comparables. Retrieved from https://fas1002.github.io/FAS1002_projet-final
BibTeX citation
@misc{lapierre2021établir,
author = {Lapierre, Stéphanie},
title = {Projet final: Établir des groupes de pays comparables},
url = {https://fas1002.github.io/FAS1002_projet-final},
year = {2021}
}