31  Graphiques pondérés

Le package ggplot2 n’est compatible directement avec les objets survey. Cependant, il accepte une esthétique weight qui permet de définir une variable de pondération.

Avertissement

ATTENTION : les graphiques obtenus ne sont corrects qu’à la condition que seuls les poids soient nécessaires pour les construire, ce qui est le cas d’un nuage de points ou d’un diagramme en barres.

Par contre, si le calcul du graphique implique le calcul de variances, la représentation sera incorrecte. Par exemple, avec ggplot2::geom_smooth(), les intervalles de confiance affichés ne prendront pas correctement en compte le plan d’échantillonnage.

Reprenons le jeu de données fecondite que nous avons abordé dans le chapitre sur les analyses bivariées pondérées, cf. Chapitre 30. Les poids d’enquête y sont indiqués dans la colonne poids. Pour rappel, les données catégorielles étant stockées sous forme de vecteurs numériques avec étiquettes de valeurs (cf. Chapitre 12), nous allons les convertir en facteurs avec labelled::unlabelled().

data("fecondite", package = "questionr")
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
d <- labelled::unlabelled(femmes)

Pour réaliser un graphique, nous pouvons reprendre ce que nous avons vu dans notre chapitre introductif sur ggplot2, cf. Chapitre 17, en spécifiant simplement l’esthétique weight.

ggplot(d) +
  aes(x = region, fill = test, weight = poids) +
  geom_bar(position = "fill")
Figure 31.1: Un graphique en barres pondéré

Si l’on a déjà créé un objet survey, on peut obtenir les poids des observations avec la fonction weights(). Les données sont quant à elle accessibles via le sous-élément nommé variables.

library(srvyr)

Attachement du package : 'srvyr'
L'objet suivant est masqué depuis 'package:stats':

    filter
dp <- femmes |> 
  labelled::unlabelled() |> 
  as_survey_design(weights = poids)
ggplot(dp$variables) +
  aes(x = region, fill = test, weight = weights(dp)) +
  geom_bar(position = "fill")
Figure 31.2: Un graphique en barres pondéré

Pour se faciliter les choses, on peut avoir directement recours à la fonction ggstats::ggsurvey(), que l’on utilisera à la place de ggplot2::ggplot(), et qui fait exactement la même chose que dans notre exemple précédent : on lui passe un objet de type survey et la fonction en extrait le sous-élément variables pour le passer à ggplot2::ggplot() et les poids qui sont automatiquement associés à l’esthétique weight.

Ainsi, le code de notre graphique précédent s’écrit tout simplement1 :

1 Notez que les poids ont déjà été associés à la bonne esthétique et qu’il n’est donc pas nécessaire de le refaire dans l’appel à aes().

ggstats::ggsurvey(dp) +
  aes(x = region, fill = test) +
  geom_bar(position = "fill")
Figure 31.3: Un graphique en barres pondéré