Le tirage d’échantillon est la phase éssentielle qui suit le calcul de la taille minimale. Les plans de sondage abordés ici sont le tirage aléatoire simple (tas), tirage stratifié (ts) et tirage à deux dégrès (tdd). Le plan par grappes est un cas particulier du tirage à deux degrés et le plan à plusieurs degrès se généralisent ainsément.
La base de données est un répartoire fictif des entreprises du Sénégal composée de 300 000 entreprises sur un fichier excel.
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.2 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
Pour identifier les unités, une variable itératif est créée: ID
# Identification des unités avec un entier
base$ID <- 1:220565
Une extraction de la base est illustrée ci-après:
# Affrichage de sept premières lignes
knitr::kable(base[1:7, c(20,1:7)], format = "html", caption = "LISTE")
| ID | REG | DEPT | CCRCA | COD | TEL | CUIE | ACTIVITE |
|---|---|---|---|---|---|---|---|
| 1 | TAMBACOUNDA | KOUMPENTOUM | PAYAR | 05420204 | 32:663:68 24 | T9D0Y0H7 | Commerce |
| 2 | THIES | TIVAOUANE | TIVAOUANE | 07310200 | 76/844:88/47 | V8P6Q4I6 | Transport |
| 3 | DAKAR | PIKINE | MBAO | 01230135 | 78/377:48/21 | B1A6V0J6 | Agriculture |
| 4 | KOLDA | VELINGARA | MEDINA GOUNASS | 10220103 | 30/559/48 29 | K5M8L4C4 | Agriculture |
| 5 | DAKAR | PIKINE | DALIFORD | 01230124 | 77 230:26 84 | A2R1I9W1 | Agriculture |
| 6 | DIOURBEL | BAMBEY | NGOYE | 03120303 | 77/448:32/79 | Z2N9X1C7 | Autres Services |
| 7 | FATICK | FOUNDIOUGNE | KARANG POSTE | 09210400 | 30/551:20/90 | M1Z5L7F5 | Agriculture |
Le code suivant permet de tirer un échantillon de 2000 entreprise suivant un tirage aléatoire simple sans remise.
# Tirage aléatoire simple
tas <- base[sample(nrow(base), 2000, replace = FALSE), ]
knitr::kable(tas[1:7, c(20,1:6)], format = "html")
| ID | REG | DEPT | CCRCA | COD | TEL | CUIE |
|---|---|---|---|---|---|---|
| 167640 | TAMBACOUNDA | TAMBACOUNDA | MISSIRAH | 05220302 | 76/416/76 29 | P8C4Z4W1 |
| 128555 | SAINT-LOUIS | DAGANA | RONKH | 04120203 | 77/691/43/11 | M0H3U1D6 |
| 207389 | SAINT-LOUIS | PODOR | DEMETTE | 04210600 | 76:425:20/90 | I5Z3Y6K1 |
| 31541 | KOLDA | MEDINA YORO FOULAH | MEDINA YORO FOULAH | 10310100 | 30/849/59 10 | C7R7P1K7 |
| 113777 | SAINT-LOUIS | DAGANA | GAE | 04110500 | 30/349:57/15 | C4T0Z3T4 |
| 139473 | DAKAR | DAKAR | MEDINA | 01130113 | 30/138/98/91 | H8T0D4P0 |
| 70645 | TAMBACOUNDA | BAKEL | GABOU | 05120302 | 33/902:11/57 | E0M3P0R5 |
Les valeurs de ID ne sont plus successives, montrant ainsi le choix aléatoire des lignes. Les fonction sample_n(), sample_frac() permettent aussi de tirer un échantillon.
tas_i <- base[sample.int(nrow(base), 2000, replace = FALSE), ]
tas_n <- sample_n(base, size = 2000, replace = FALSE)
tas_f <- sample_frac(base, size = 0.01, replace = FALSE)
Il y a la fonction Strata() du package
DescTools qui permet de réaliser un tirage avec les
méthodes suivantes:
- tirage aléatoire simple sans remplacement (“srswor”); - tirage
aléatoire simple avec remplacement (“srswr”); - tirage simple avec
algorithme de Poisson (“poisson”); - tirage systématique
(“systematic”).
# Tirage systématique à probilité égales
base$GR <- 1
tas_s <- Strata(base, stratanames = "GR", method = "systematic", size = 2000)
tas_s <- arrange(tas_s, ID)
knitr::kable(tas_s[2:7, 1:7], format = "html")
| GR | REG | DEPT | CCRCA | COD | TEL | CUIE | |
|---|---|---|---|---|---|---|---|
| 1.415 | 1 | THIES | MBOUR | NGUEKOKH | 07110300 | 33:299:64/25 | J3S3I3H6 |
| 1.485 | 1 | KOLDA | VELINGARA | KANDIA | 10220301 | 76/153/58 58 | X4L2N2J1 |
| 1.508 | 1 | DAKAR | RUFISQUE | BAMBILOR | 01320102 | 77:593:75 42 | D1W6J8I0 |
| 1.658 | 1 | DAKAR | DAKAR | MEDINA | 01130113 | 77:795:73 27 | A7I8Y2D5 |
| 1.911 | 1 | THIES | MBOUR | FISSEL | 07120101 | 30 655 34 45 | I6N2Y5I6 |
| 1.1154 | 1 | LOUGA | LOUGA | NGUEUNE SARR | 08320402 | 77:229:37/75 | R9G5K4R6 |
Nous allons considérer l’activité comme variable de stratification.
knitr::kable(table(base$ACTIVITE))
| Var1 | Freq |
|---|---|
| Agriculture | 64560 |
| Autres Services | 37829 |
| BTP | 13007 |
| Commerce | 61744 |
| Industrie | 10647 |
| Transport | 32778 |
Le tirage est réalisé comme suit avec un total de 333 dans chacune des quatre secteurs d’activités. (n = 6x333 = 1998).
# Tirage stratifié
ts <- sample_n(group_by(base, ACTIVITE), size = 333)
knitr::kable(addmargins(table(ts$ACTIVITE), FUN = sum))
| Var1 | Freq |
|---|---|
| Agriculture | 333 |
| Autres Services | 333 |
| BTP | 333 |
| Commerce | 333 |
| Industrie | 333 |
| Transport | 333 |
| sum | 1998 |
Il est possible de préciser plusieurs variables de stratification:
# Tirage stratifié
ts_t <- sample_n(group_by(base, SEXE, ACTIVITE), size = 166)
addmargins(table(ts_t$ACTIVITE, ts_t$SEXE))
##
## Femme Homme Sum
## Agriculture 166 166 332
## Autres Services 166 166 332
## BTP 166 166 332
## Commerce 166 166 332
## Industrie 166 166 332
## Transport 166 166 332
## Sum 996 996 1992
Avec la fonction Strata(), il est possible de différencier la taille des strates:
ts_d <- Strata(base, c("SEXE", "ACTIVITE"),
size = c(100,120,140,160,180,200,190,170,150,130,110,90))
addmargins(table(ts_d$ACTIVITE, ts_d$SEXE))
##
## Femme Homme Sum
## Agriculture 100 120 220
## Autres Services 140 160 300
## BTP 180 200 380
## Commerce 190 170 360
## Industrie 150 130 280
## Transport 110 90 200
## Sum 870 870 1740
Pour cette méthode, les UP seront des communes avec comme probabilité le nombre d’employés. Les US seront les entreprises dans les communes tirées. La base des 552 UP est formée ci-après.
# Base des 552 communes uniques par ligne
UP <- mutate(group_by(base, COD), POIDS = sum(EMPLOI))
UP <- UP[!duplicated(UP$COD), c("COD", "CCRCA", "POIDS")]
L’échantillon des UP tiré est précisé dans le bloc de commandes suivant.
# Tirage des UP
ECH_UP <- UP[sample(nrow(UP), 52, replace = FALSE, prob = UP$EMPLOI), ]
## Warning: Unknown or uninitialised column: `EMPLOI`.
US <- merge(ECH_UP, base, by = c("COD", "COD"), all.y = FALSE)
ECH_US <- sample_frac(US, size = 0.09, replace = FALSE)
Les quelques lignes présentées ici permettent de faciliser la procédure d’échantillonnage dans une enquête par sondage. Les plans à plus de deux degrés se déduisent aisement de la procédure de tirage à deux degrés présentée ci-haut. Le tirage par grappes est un tirage à deux degrès pour lequel lorsqu’un Up est tiré, tous ses US sont pris en compte.