L’objet créé avec survey::svydesign() ou srvyr::as_survey_design() n’est plus un tableau de données, mais plutôt un tableau de données auquel est attaché un plan d’échantillonnage. Les colonnes du tableau d’origine ne sont plus directement accessibles avec l’opérateur $. En fait, elles sont stockées dans un sous-objet $variables.
Il n’est pas aisé de modifier des variables dans un objet de ce type. Il est donc préférable de procéder à l’ensemble des nettoyages, recodages de variables (et au besoin transformation des vecteurs labellisés en facteur), avant de définir le plan d’échantillonnage et de procéder aux analyses.
Si l’on souhaite manipuler les données, le plus simple est d’avoir recours au package srvyr qui étend les verbes de dplyr (cf. Chapitre 8) aux objets survey.
L'objet suivant est masqué depuis 'package:stats':
filter
t_titanic |>select(Sex, Age)
Independent Sampling design (with replacement)
Called via srvyr
Sampling variables:
- ids: `1`
- weights: n
Data variables:
- Sex (chr), Age (chr)
t_titanic |>filter(Sex =="Female")
Independent Sampling design (with replacement)
Called via srvyr
Sampling variables:
- ids: `1`
- weights: n
Data variables:
- Class (chr), Sex (chr), Age (chr), Survived (chr), n (dbl)
On peut aussi utiliser srvyr::pull() pour extraire le contenu d’une colonne ou srvyr::drop_na() pour supprimer les observations contenant des valeurs manquantes.
Avertissement
Par contre, le verbe arrange() (tri du tableau) ou encore les fonctions de jointures (telles que left_join()) ne sont pas implémentées car ce type d’opération entraînerait des modifications du plan d’échantillonnage. Il est donc préférable de réaliser ce type d’opérations avant la déclaration du plan d’échantillonnage (quand les données sont donc encore stockées dans un tableau de données classiques).
When `proportion` is unspecified, `survey_prop()` now defaults to `proportion = TRUE`.
ℹ This should improve confidence interval coverage.
This message is displayed once per session.
Warning: There were 24 warnings in `dplyr::summarise()`.
The first warning was:
ℹ In argument: `taux_survie = survey_prop()`.
ℹ In group 1: `Sex = "Female"`, `Class = "1st"`, `Survived = "No"`.
Caused by warning in `summary.glm()`:
! les observations de poids nul n'ont pas été utilisées pour le calcul de la dispersion
ℹ Run `dplyr::last_dplyr_warnings()` to see the 23 remaining warnings.
# A tibble: 8 × 5
# Groups: Sex, Class [8]
Sex Class Survived taux_survie taux_survie_se
<chr> <chr> <chr> <dbl> <dbl>
1 Female 1st Yes 0.972 0.0384
2 Female 2nd Yes 0.877 0.145
3 Female 3rd Yes 0.459 0.306
4 Female Crew Yes 0.870 0.163
5 Male 1st Yes 0.344 0.312
6 Male 2nd Yes 0.140 0.150
7 Male 3rd Yes 0.173 0.183
8 Male Crew Yes 0.223 0.249
29.2 Lister / Rechercher des variables
La fonction labelled::look_for(), que nous avons déjà abordée (cf. Section 4.3), est compatible avec les objets survey et peut donc être utilisée pour lister ou rechercher des variables.
t_titanic <- titanic |> labelled::set_variable_labels(Class ="Class du passager",Sex ="Sexe du passager",Age ="Enfant ou adulte ?",Survived ="A survécu au naufrage ?",n ="Nombre d'observations" ) |> srvyr::as_survey_design(weights = n)t_titanic |> labelled::look_for()
pos variable label col_type missing values
1 Class Class du passager chr 0
2 Sex Sexe du passager chr 0
3 Age Enfant ou adulte ? chr 0
4 Survived A survécu au naufrage ? chr 0
5 n Nombre d'observations dbl 0
t_titanic |> labelled::look_for("nau")
pos variable label col_type missing values
4 Survived A survécu au naufrage ? chr 0
29.3 Extraire un sous-échantillon
Si l’on souhaite travailler sur un sous-échantillon de l’enquête, il importe de définir le plan d’échantillonnage sur l’ensemble du jeu de données avant de procéder à la sélection des observations.
La fonction classique pour sélectionner des lignes est subset(). Cependant, elle a un inconvénient lorsque nos données comportent des étiquettes de variables (cf. Chapitre 11) ou de valeurs ( Chapitre 12), car les étiquettes ne sont pas conservées après l’opération.
On préférera donc avoir recours à srvyr::filter() qui conservent les attributs associés aux colonnes du tableau de données.
pos variable label col_type missing values
1 Class Class du passager chr 0
2 Sex Sexe du passager chr 0
3 Age Enfant ou adulte ? chr 0
4 Survived A survécu au naufrage ? chr 0
5 n Nombre d'observations dbl 0