library(questionr)
library(tidyverse)
library(gtsummary)
library(gt)Analyser ses données
1 Préalable : le chargement des extensions et de la base R
Utilisation de 4 packages : # questionr (déjà installé), tidyverse (déjà installé), gtsummary et gt (à installer)
1.0.1 Chargement des extensions avec la fonction library
1.0.2 Activation du thème “fr” de gt_summary pour franciser l’affichage (virgule décimale, etc)
set_gtsummary_theme(theme_gtsummary_language("fr"))
options(
OutDec = ",", # pour les virgules
big.mark = " " # pour l’espace des milliers
)1.0.3 Chargement de la base avec la fonction load
load("../DATA/bns.RData")!! Astuce : il est également possible de le faire en cliquant sur le fichier dans la fenêtre Fichiers (bas à droite)
2 Sorties brutes
2.1 Tris à plat
2.1.1 Sortie systématisée des tris à plat
Utilisation de l’instruction lapply (du package de {base}) avec l’instruction freq (du package {questionr})
l’application lapply (pour liste apply) applique une même fonction (ici freq) à chaque élément d’un objet et renvoie ensuite les résultats sous forme de liste
2 étapes :
- Création d’un objet qui garde les variables dont on souhaite avoir les tris à plat (en distinguant variable d’intérêt et variables socio-démographiques, donc 2 objets)
- Application sur cet objet en ayant bien précisé la base dans laquelle les variables sont présentes de l’instruction lapply et freq et sauvegarde dans une table de données
Exemple avec les variables d’intérêt
vi <- c("UTILINT", "NET", "ORDIPERSO", "ORDIPRO", "TAB", "SMARTPHO_f", "ENCEINTE_f", "CONN_SANTE", "CONN_SECURITE", "CONN_DOMOTIQUE", "CONN_MENAGER", "IA_PRO", "IA_PERSO")
tap_vi<-lapply(bns[vi],freq)
tap_vi$UTILINT
n % val%
Tous les jours 3120 80,9 80,9
Une à deux fois par semaine 243 6,3 6,3
Plus rarement 120 3,1 3,1
Jamais 374 9,7 9,7
NA 1 0,0 NA
$NET
n % val%
Oui 2957 76,6 76,6
Non 901 23,4 23,4
$ORDIPERSO
n % val%
Plusieurs 1048 27,2 27,2
Un 2192 56,8 56,9
Aucun 610 15,8 15,8
NA 8 0,2 NA
$ORDIPRO
n % val%
Plusieurs 220 5,7 5,8
Un 793 20,6 20,9
Aucun 2782 72,1 73,3
NA 63 1,6 NA
$TAB
n % val%
Oui 1923 49,8 50,2
Non 1907 49,4 49,8
NA 28 0,7 NA
$SMARTPHO_f
n % val%
Oui 3373 87,4 87,4
Non 485 12,6 12,6
$ENCEINTE_f
n % val%
Oui 968 25,1 29,8
Non 2285 59,2 70,2
NA 605 15,7 NA
$CONN_SANTE
n % val%
Vous en possédez déjà 895 23,2 28,0
Vous en utiliserez probablement un à l'avenir 588 15,2 18,4
Vous n'en utiliserez probablement pas à l'avenir 1708 44,3 53,5
NA 667 17,3 NA
$CONN_SECURITE
n % val%
Vous en possédez déjà 736 19,1 23,3
Vous en utiliserez probablement un à l'avenir 842 21,8 26,7
Vous n'en utiliserez probablement pas à l'avenir 1576 40,9 50,0
NA 704 18,2 NA
$CONN_DOMOTIQUE
n % val%
Vous en possédez déjà 630 16,3 19,9
Vous en utiliserez probablement un à l'avenir 831 21,5 26,3
Vous n'en utiliserez probablement pas à l'avenir 1703 44,1 53,8
NA 694 18,0 NA
$CONN_MENAGER
n % val%
Vous en possédez déjà 554 14,4 17,3
Vous en utiliserez probablement un à l'avenir 721 18,7 22,5
Vous n'en utiliserez probablement pas à l'avenir 1930 50,0 60,2
NA 653 16,9 NA
$IA_PRO
n % val%
Oui 713 18,5 18,6
Non 3130 81,1 81,4
NA 15 0,4 NA
$IA_PERSO
n % val%
Oui 903 23,4 23,5
Non 2939 76,2 76,5
NA 16 0,4 NA
Exemple avec les variables socio-démographiques
vsd <- c("CLAGE", "GENRE", "PCS", "DIPL", "AGGLO")
tap_vsd <- lapply(bns[vsd],freq)
tap_vsd$CLAGE
n % val%
18-24 ans 256 6,6 6,6
25-39 ans 686 17,8 17,8
40-59 ans 1399 36,3 36,3
60-69 ans 623 16,1 16,1
70 ans et plus 894 23,2 23,2
$GENRE
n % val%
Femme 2045 53 53
Homme 1813 47 47
$PCS
n %
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 191 5,0
Cadre et profession intellectuelle supérieure 383 9,9
Profession Intermédiaire 459 11,9
Employé·e 572 14,8
Ouvrier·ère 355 9,2
Personne au foyer 258 6,7
Autre inactif·ve 244 6,3
Retraité·e 1396 36,2
val%
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 5,0
Cadre et profession intellectuelle supérieure 9,9
Profession Intermédiaire 11,9
Employé·e 14,8
Ouvrier·ère 9,2
Personne au foyer 6,7
Autre inactif·ve 6,3
Retraité·e 36,2
$DIPL
n % val%
Non diplômé 363 9,4 9,4
BEPC 1254 32,5 32,5
BAC 729 18,9 18,9
Diplômé du supérieur 1512 39,2 39,2
$AGGLO
n % val%
Communes rurales 957 24,8 24,8
2 000 à 19 999 habitants 626 16,2 16,2
20 000 à 99 999 habitants 562 14,6 14,6
100 000 habitants et plus 1193 30,9 30,9
Agglomération parisienne 520 13,5 13,5
Astuce : on peut afficher les tables de données qui sauvegardent les tris à plat dans la fenêtre Données
2.1.2 Sauvegarde des tris à plat
Sauvegarde des tris à plat au format RData
save(bns,tap_vi,file="../TAB-FIG/tap_vi.RData")
save(bns,tap_vsd,file="../TAB-FIG/tp_vsd.RData")2.2 Tris croisés : 5 étapes
2.2.1 Etape 1 : exécution et sauvegarde du tri croisé
Fonction table(var_expl,var_int)
Exemple : utilisation quotidienne d’internet et classes d’âges
tab1<-table(bns$CLAGE,bns$utiltlj)
tab1
Utilise internet tous les jours
18-24 ans 178
25-39 ans 569
40-59 ans 1266
60-69 ans 542
70 ans et plus 565
N'utilise pas internet tous les jours
18-24 ans 78
25-39 ans 117
40-59 ans 133
60-69 ans 81
70 ans et plus 328
2.2.2 Etape 2 : calcul des % lignes
Fonction lprop(objet qui contient le tri croisé)
lprop(tab1)
Utilise internet tous les jours
18-24 ans 69,5
25-39 ans 82,9
40-59 ans 90,5
60-69 ans 87,0
70 ans et plus 63,3
Ensemble 80,9
N'utilise pas internet tous les jours Total
18-24 ans 30,5 100,0
25-39 ans 17,1 100,0
40-59 ans 9,5 100,0
60-69 ans 13,0 100,0
70 ans et plus 36,7 100,0
Ensemble 19,1 100,0
2.2.3 Etape 3 : Affichage des effectifs théoriques
Vérifier qu’aucun effectif n’est inférieur à 1 et qu’il n’y a pas plus de 20% des cases <5)
Fonction chisq.test avec option $expected
chisq.test(tab1)$expected
Utilise internet tous les jours
18-24 ans 207,0832
25-39 ans 554,9183
40-59 ans 1131,6775
60-69 ans 503,9564
70 ans et plus 722,3645
N'utilise pas internet tous les jours
18-24 ans 48,91677
25-39 ans 131,08167
40-59 ans 267,32253
60-69 ans 119,04356
70 ans et plus 170,63547
2.2.4 Etape 4 : la sortie des résultats du test du Khi²
Fonction chisq.test
chisq.test(tab1)
Pearson's Chi-squared test
data: tab1
X-squared = 301,12, df = 4, p-value < 2,2e-16
Les résultats du test du Khi² :
- X-sqared : valeur du Khi² du tableau ;
- df : degrés de liberté du tableau : produit du (nombre de modalités en lignes -1) par le (nombre de modalités en colonnes – 1)
- p-value : valeur du risque d’erreur associé au test statistique (autrement dit à l’hypothèse nulle d’indépendance, autrement dit que le résultat soit dû au hasard)
2.2.5 Etape : conservation de l’info en commentaire
Effet significatif (*) de l’âge** sur l’utilisation quotidienne d’internet
2.3 Croisement de la même variable avec d’autres facteurs explicatifs
2.3.1 Avec le genre
tab2<-table(bns$GENRE,bns$utiltlj)
lprop(tab2)
Utilise internet tous les jours
Femme 80,3
Homme 81,5
Ensemble 80,9
N'utilise pas internet tous les jours Total
Femme 19,7 100,0
Homme 18,5 100,0
Ensemble 19,1 100,0
chisq.test(tab2)$expected
Utilise internet tous les jours N'utilise pas internet tous les jours
Femme 1653,43 390,5699
Homme 1466,57 346,4301
chisq.test(tab2)
Pearson's Chi-squared test with Yates' continuity correction
data: tab2
X-squared = 0,80445, df = 1, p-value = 0,3698
Effet non significatif (ns) du genre sur l’utilisation quotidienne d’internet
2.3.2 Avec la PCS
tab3<-table(bns$PCS,bns$utiltlj)
lprop(tab3)
Utilise internet tous les jours
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 85,3
Cadre et profession intellectuelle supérieure 86,7
Profession Intermédiaire 91,1
Employé·e 87,8
Ouvrier·ère 83,1
Personne au foyer 87,6
Autre inactif·ve 70,9
Retraité·e 72,5
Ensemble 80,9
N'utilise pas internet tous les jours
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 14,7
Cadre et profession intellectuelle supérieure 13,3
Profession Intermédiaire 8,9
Employé·e 12,2
Ouvrier·ère 16,9
Personne au foyer 12,4
Autre inactif·ve 29,1
Retraité·e 27,5
Ensemble 19,1
Total
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 100,0
Cadre et profession intellectuelle supérieure 100,0
Profession Intermédiaire 100,0
Employé·e 100,0
Ouvrier·ère 100,0
Personne au foyer 100,0
Autre inactif·ve 100,0
Retraité·e 100,0
Ensemble 100,0
chisq.test(tab3)$expected
Utilise internet tous les jours
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 154,5035
Cadre et profession intellectuelle supérieure 309,8159
Profession Intermédiaire 371,2938
Employé·e 462,7016
Ouvrier·ère 287,1662
Personne au foyer 208,7011
Autre inactif·ve 197,3762
Retraité·e 1128,4418
N'utilise pas internet tous les jours
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise 36,49650
Cadre et profession intellectuelle supérieure 73,18408
Profession Intermédiaire 87,70625
Employé·e 109,29842
Ouvrier·ère 67,83381
Personne au foyer 49,29894
Autre inactif·ve 46,62380
Retraité·e 266,55821
chisq.test(tab3)
Pearson's Chi-squared test
data: tab3
X-squared = 147,32, df = 7, p-value < 2,2e-16
Effet significatif (*) de la PCS** sur l’utilisation quotidienne d’internet (en partie lié à l’âge)
2.3.3 Avec le diplôme
bns$DIPL <- bns$DIPL |>
fct_recode(
NULL = "Elèves"
)
tab4<-table(bns$DIPL,bns$utiltlj)
lprop(tab4)
Utilise internet tous les jours
Non diplômé 49,3
BEPC 79,6
BAC 84,8
Diplômé du supérieur 87,6
Ensemble 80,9
N'utilise pas internet tous les jours Total
Non diplômé 50,7 100,0
BEPC 20,4 100,0
BAC 15,2 100,0
Diplômé du supérieur 12,4 100,0
Ensemble 19,1 100,0
chisq.test(tab4)$expected
Utilise internet tous les jours
Non diplômé 293,6375
BEPC 1013,5753
BAC 589,7018
Diplômé du supérieur 1223,0853
N'utilise pas internet tous les jours
Non diplômé 69,36246
BEPC 239,42468
BAC 139,29816
Diplômé du supérieur 288,91470
chisq.test(tab4)
Pearson's Chi-squared test
data: tab4
X-squared = 287,02, df = 3, p-value < 2,2e-16
Effet significatif (*) du diplôme** sur l’utilisation quotidienne d’internet (effet linéaire)
2.3.4 Avec la taille de l’agglomération
tab5<-table(bns$AGGLO,bns$utiltlj)
lprop(tab5)
Utilise internet tous les jours
Communes rurales 73,5
2 000 à 19 999 habitants 80,8
20 000 à 99 999 habitants 82,6
100 000 habitants et plus 84,9
Agglomération parisienne 83,6
Ensemble 80,9
N'utilise pas internet tous les jours Total
Communes rurales 26,5 100,0
2 000 à 19 999 habitants 19,2 100,0
20 000 à 99 999 habitants 17,4 100,0
100 000 habitants et plus 15,1 100,0
Agglomération parisienne 16,4 100,0
Ensemble 19,1 100,0
chisq.test(tab5)$expected
Utilise internet tous les jours
Communes rurales 774,1353
2 000 à 19 999 habitants 506,3832
20 000 à 99 999 habitants 454,6124
100 000 habitants et plus 965,0402
Agglomération parisienne 419,8289
N'utilise pas internet tous les jours
Communes rurales 182,86466
2 000 à 19 999 habitants 119,61680
20 000 à 99 999 habitants 107,38761
100 000 habitants et plus 227,95981
Agglomération parisienne 99,17112
chisq.test(tab5)
Pearson's Chi-squared test
data: tab5
X-squared = 50,202, df = 4, p-value = 3,277e-10
Effet significatif (*) de la taille de l’agglomération** sur l’utilisation quotidienne d’internet (dichotomie zone rurale / zone urbaine)
3 Sorties tabulaires synthétiques
Utilisation de la fonction tbl_summary {gtsummary} et de ses options
3.1 Exemple 1 : les objets connectés
conn <- select (bns, CONN_SANTE, CONN_SECURITE, CONN_DOMOTIQUE, CONN_MENAGER) # Sélection des variables du tableau dans un objet sur lequel on appliquera ensuite la fonction tbl_summary
conn %>%
tbl_summary(
statistic = everything() ~ "{p}", # Choix de la statistique (pourcentage)
missing = "no", # N'affiche pas les valeurs manquantes
label = list( # Intitulés plus explicites des variables
CONN_SANTE ~ "la santé",
CONN_SECURITE ~ "la sécurité",
CONN_DOMOTIQUE ~ "la domotique",
CONN_MENAGER ~ "l'électroménager"
)
) %>%
bold_labels() %>% # Met en gras les labels
modify_header(
label ~ "**Objet connecté relatif à**", # Modifie l'intitulé de la colonne Characteristic
stat_0 ~ "**Pourcentage**" # Modifie l'intitulé de la colonne N=
) %>%
modify_caption("**Tableau 1. Situation par rapport aux objets connectés**") %>%
modify_footnote(everything() ~ NA) %>% # Pour supprimer les notes automatiques
modify_footnote(
stat_0 ~ paste0("N = ", nrow(conn)), # Ajout d'une note avec l'effectif total
label ~ "Quelle est votre situation par rapport aux objets connectés relatifs à ?" # Ajout d'une 2ème note qui explicite la question posée
) %>%
as_gt() # Pour un affichage conforme dans le Viewer et en tant qu'image| Objet connecté relatif à1 | Pourcentage2 |
|---|---|
| la santé | |
| Vous en possédez déjà | 28 |
| Vous en utiliserez probablement un à l'avenir | 18 |
| Vous n'en utiliserez probablement pas à l'avenir | 54 |
| la sécurité | |
| Vous en possédez déjà | 23 |
| Vous en utiliserez probablement un à l'avenir | 27 |
| Vous n'en utiliserez probablement pas à l'avenir | 50 |
| la domotique | |
| Vous en possédez déjà | 20 |
| Vous en utiliserez probablement un à l'avenir | 26 |
| Vous n'en utiliserez probablement pas à l'avenir | 54 |
| l'électroménager | |
| Vous en possédez déjà | 17 |
| Vous en utiliserez probablement un à l'avenir | 22 |
| Vous n'en utiliserez probablement pas à l'avenir | 60 |
| 1 Quelle est votre situation par rapport aux objets connectés relatifs à ? | |
| 2 N = 3858 | |
3.2 Exemple 2 : les équipements numériques
Toutes les variables sont dichotomiques ==> affichage d’une seule modalité (car les deux modalités sont complémentaires l’une de l’autre)
equip <- select (bns, SMARTPHO_f, ORDIPERSO_r, TAB, ENCEINTE_f, ORDIPRO_r) # Selection des variables du tableau dans un nouvel objet sur lequel on appliquera ensuite la fonction tb_summary
equip %>%
tbl_summary(
type = everything() ~ "dichotomous",
value = everything() ~ "Oui", # modalité retenue : uniquement les oui
statistic = everything() ~ "{p}", # on affiche la proportion en %
missing = "no", # pas d'affichage des NA
label = list(
SMARTPHO_f ~ "Smartphone",
ORDIPERSO_r ~ "Ordinateur personnel",
TAB ~ "Tablette",
ENCEINTE_f ~ "Enceinte connectée",
ORDIPRO_r ~ "Ordinateur professionnel"
)
) %>%
modify_header(
label ~ "**Type d'équipement**", # Pour afficher Equipement plutôt que Caractéristique
stat_0 ~ "**Pourcentage**" # Pour afficher Pourcentage plutôt que N=4 066
) %>%
modify_caption("**Tableau 2. Les équipements numériques**") %>%
modify_footnote(everything() ~ NA) %>% # Pour supprimer les notes automatiques
modify_footnote(
update = list(
stat_0 ~ paste0("N = ", nrow(equip))) # Ajout d'une note avec l'effectif total
)| Type d’équipement | Pourcentage1 |
|---|---|
| Smartphone | 87 |
| Ordinateur personnel | 84 |
| Tablette | 50 |
| Enceinte connectée | 30 |
| Ordinateur professionnel | 27 |
| 1 N = 3858 | |
3.3 Exemple 3 : les facteurs explicatifs de l’utilisation quotidienne d’internet
tlj <- select(bns, utiltlj, CLAGE, GENRE, PCS, DIPL, AGGLO)
tlj %>%
tbl_summary(
by = utiltlj, # Variable d'intérêt ou variable de tri
percent = "row", # Calcul des % lignes
missing = "no", # Pas d'affichage des NA (non pris en compte dans le calcul des %)
statistic = everything() ~ "{p}", # Affichage des % uniquement
digits = everything() ~ 0, # pas de décimale
label = list( # Renomme les noms des modalités
CLAGE ~ "Classes d'âges",
GENRE ~ "Genre",
PCS ~ "Catégorie socio-professionnelle",
DIPL ~ "Diplôme",
AGGLO ~ "Taille de l'agglomération")
) %>%
add_overall(last=TRUE) %>% # Ajoute la colonne Total (=100%)
modify_header(
label ~ "**Facteur explicatif**", # Affiche Facteur explicatif au lieu de caractéristique (par défaut)
stat_1 ~ "Utilisation quotidienne d'internet (81%)", # Intitulé de la stat1 (modalité 1 de la variable d'intérêt)
stat_2 ~ "Utilisation non quotidienne d'internet (19%)", # Intitulé de la stat2 (modalité 1 de la variable d'intérêt)
stat_0 ~ "Total (100%)" # Intitulé de la stat_0 (colonne Total)
) %>%
add_p () %>% # Affichage des p-value (par défaut, test du Khi²)
bold_labels () %>% # Mise en gras des labels des variables
modify_caption("**Tableau 3. Déterminants de l'utilisation quotidienne d'internet(%)**") %>% # Titre du tableau
modify_footnote(everything() ~ NA) %>% # Pour supprimer les notes automatiques
modify_footnote(
p.value ~ "Test du Khi² d'indépendance") # Pour expliciter le test utilisé pour les p-values | Facteur explicatif | Utilisation quotidienne d’internet (81%) | Utilisation non quotidienne d’internet (19%) | Total (100%) | p-valeur1 |
|---|---|---|---|---|
| Classes d'âges | <0,001 | |||
| 18-24 ans | 70 | 30 | 100 | |
| 25-39 ans | 83 | 17 | 100 | |
| 40-59 ans | 90 | 10 | 100 | |
| 60-69 ans | 87 | 13 | 100 | |
| 70 ans et plus | 63 | 37 | 100 | |
| Genre | 0,3 | |||
| Femme | 80 | 20 | 100 | |
| Homme | 82 | 18 | 100 | |
| Catégorie socio-professionnelle | <0,001 | |||
| Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise | 85 | 15 | 100 | |
| Cadre et profession intellectuelle supérieure | 87 | 13 | 100 | |
| Profession Intermédiaire | 91 | 9 | 100 | |
| Employé·e | 88 | 12 | 100 | |
| Ouvrier·ère | 83 | 17 | 100 | |
| Personne au foyer | 88 | 12 | 100 | |
| Autre inactif·ve | 71 | 29 | 100 | |
| Retraité·e | 72 | 28 | 100 | |
| Diplôme | <0,001 | |||
| Non diplômé | 49 | 51 | 100 | |
| BEPC | 80 | 20 | 100 | |
| BAC | 85 | 15 | 100 | |
| Diplômé du supérieur | 88 | 12 | 100 | |
| Taille de l'agglomération | <0,001 | |||
| Communes rurales | 73 | 27 | 100 | |
| 2 000 à 19 999 habitants | 81 | 19 | 100 | |
| 20 000 à 99 999 habitants | 83 | 17 | 100 | |
| 100 000 habitants et plus | 85 | 15 | 100 | |
| Agglomération parisienne | 84 | 16 | 100 | |
| 1 Test du Khi² d’indépendance | ||||
4 Quelques représentations graphiques
4.1 Installations et chargements des packages ggplot2 et scales
library(ggplot2)
library(scales)colors() # Affichage des noms des couleurs [1] "white" "aliceblue" "antiquewhite"
[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
[7] "antiquewhite4" "aquamarine" "aquamarine1"
[10] "aquamarine2" "aquamarine3" "aquamarine4"
[13] "azure" "azure1" "azure2"
[16] "azure3" "azure4" "beige"
[19] "bisque" "bisque1" "bisque2"
[22] "bisque3" "bisque4" "black"
[25] "blanchedalmond" "blue" "blue1"
[28] "blue2" "blue3" "blue4"
[31] "blueviolet" "brown" "brown1"
[34] "brown2" "brown3" "brown4"
[37] "burlywood" "burlywood1" "burlywood2"
[40] "burlywood3" "burlywood4" "cadetblue"
[43] "cadetblue1" "cadetblue2" "cadetblue3"
[46] "cadetblue4" "chartreuse" "chartreuse1"
[49] "chartreuse2" "chartreuse3" "chartreuse4"
[52] "chocolate" "chocolate1" "chocolate2"
[55] "chocolate3" "chocolate4" "coral"
[58] "coral1" "coral2" "coral3"
[61] "coral4" "cornflowerblue" "cornsilk"
[64] "cornsilk1" "cornsilk2" "cornsilk3"
[67] "cornsilk4" "cyan" "cyan1"
[70] "cyan2" "cyan3" "cyan4"
[73] "darkblue" "darkcyan" "darkgoldenrod"
[76] "darkgoldenrod1" "darkgoldenrod2" "darkgoldenrod3"
[79] "darkgoldenrod4" "darkgray" "darkgreen"
[82] "darkgrey" "darkkhaki" "darkmagenta"
[85] "darkolivegreen" "darkolivegreen1" "darkolivegreen2"
[88] "darkolivegreen3" "darkolivegreen4" "darkorange"
[91] "darkorange1" "darkorange2" "darkorange3"
[94] "darkorange4" "darkorchid" "darkorchid1"
[97] "darkorchid2" "darkorchid3" "darkorchid4"
[100] "darkred" "darksalmon" "darkseagreen"
[103] "darkseagreen1" "darkseagreen2" "darkseagreen3"
[106] "darkseagreen4" "darkslateblue" "darkslategray"
[109] "darkslategray1" "darkslategray2" "darkslategray3"
[112] "darkslategray4" "darkslategrey" "darkturquoise"
[115] "darkviolet" "deeppink" "deeppink1"
[118] "deeppink2" "deeppink3" "deeppink4"
[121] "deepskyblue" "deepskyblue1" "deepskyblue2"
[124] "deepskyblue3" "deepskyblue4" "dimgray"
[127] "dimgrey" "dodgerblue" "dodgerblue1"
[130] "dodgerblue2" "dodgerblue3" "dodgerblue4"
[133] "firebrick" "firebrick1" "firebrick2"
[136] "firebrick3" "firebrick4" "floralwhite"
[139] "forestgreen" "gainsboro" "ghostwhite"
[142] "gold" "gold1" "gold2"
[145] "gold3" "gold4" "goldenrod"
[148] "goldenrod1" "goldenrod2" "goldenrod3"
[151] "goldenrod4" "gray" "gray0"
[154] "gray1" "gray2" "gray3"
[157] "gray4" "gray5" "gray6"
[160] "gray7" "gray8" "gray9"
[163] "gray10" "gray11" "gray12"
[166] "gray13" "gray14" "gray15"
[169] "gray16" "gray17" "gray18"
[172] "gray19" "gray20" "gray21"
[175] "gray22" "gray23" "gray24"
[178] "gray25" "gray26" "gray27"
[181] "gray28" "gray29" "gray30"
[184] "gray31" "gray32" "gray33"
[187] "gray34" "gray35" "gray36"
[190] "gray37" "gray38" "gray39"
[193] "gray40" "gray41" "gray42"
[196] "gray43" "gray44" "gray45"
[199] "gray46" "gray47" "gray48"
[202] "gray49" "gray50" "gray51"
[205] "gray52" "gray53" "gray54"
[208] "gray55" "gray56" "gray57"
[211] "gray58" "gray59" "gray60"
[214] "gray61" "gray62" "gray63"
[217] "gray64" "gray65" "gray66"
[220] "gray67" "gray68" "gray69"
[223] "gray70" "gray71" "gray72"
[226] "gray73" "gray74" "gray75"
[229] "gray76" "gray77" "gray78"
[232] "gray79" "gray80" "gray81"
[235] "gray82" "gray83" "gray84"
[238] "gray85" "gray86" "gray87"
[241] "gray88" "gray89" "gray90"
[244] "gray91" "gray92" "gray93"
[247] "gray94" "gray95" "gray96"
[250] "gray97" "gray98" "gray99"
[253] "gray100" "green" "green1"
[256] "green2" "green3" "green4"
[259] "greenyellow" "grey" "grey0"
[262] "grey1" "grey2" "grey3"
[265] "grey4" "grey5" "grey6"
[268] "grey7" "grey8" "grey9"
[271] "grey10" "grey11" "grey12"
[274] "grey13" "grey14" "grey15"
[277] "grey16" "grey17" "grey18"
[280] "grey19" "grey20" "grey21"
[283] "grey22" "grey23" "grey24"
[286] "grey25" "grey26" "grey27"
[289] "grey28" "grey29" "grey30"
[292] "grey31" "grey32" "grey33"
[295] "grey34" "grey35" "grey36"
[298] "grey37" "grey38" "grey39"
[301] "grey40" "grey41" "grey42"
[304] "grey43" "grey44" "grey45"
[307] "grey46" "grey47" "grey48"
[310] "grey49" "grey50" "grey51"
[313] "grey52" "grey53" "grey54"
[316] "grey55" "grey56" "grey57"
[319] "grey58" "grey59" "grey60"
[322] "grey61" "grey62" "grey63"
[325] "grey64" "grey65" "grey66"
[328] "grey67" "grey68" "grey69"
[331] "grey70" "grey71" "grey72"
[334] "grey73" "grey74" "grey75"
[337] "grey76" "grey77" "grey78"
[340] "grey79" "grey80" "grey81"
[343] "grey82" "grey83" "grey84"
[346] "grey85" "grey86" "grey87"
[349] "grey88" "grey89" "grey90"
[352] "grey91" "grey92" "grey93"
[355] "grey94" "grey95" "grey96"
[358] "grey97" "grey98" "grey99"
[361] "grey100" "honeydew" "honeydew1"
[364] "honeydew2" "honeydew3" "honeydew4"
[367] "hotpink" "hotpink1" "hotpink2"
[370] "hotpink3" "hotpink4" "indianred"
[373] "indianred1" "indianred2" "indianred3"
[376] "indianred4" "ivory" "ivory1"
[379] "ivory2" "ivory3" "ivory4"
[382] "khaki" "khaki1" "khaki2"
[385] "khaki3" "khaki4" "lavender"
[388] "lavenderblush" "lavenderblush1" "lavenderblush2"
[391] "lavenderblush3" "lavenderblush4" "lawngreen"
[394] "lemonchiffon" "lemonchiffon1" "lemonchiffon2"
[397] "lemonchiffon3" "lemonchiffon4" "lightblue"
[400] "lightblue1" "lightblue2" "lightblue3"
[403] "lightblue4" "lightcoral" "lightcyan"
[406] "lightcyan1" "lightcyan2" "lightcyan3"
[409] "lightcyan4" "lightgoldenrod" "lightgoldenrod1"
[412] "lightgoldenrod2" "lightgoldenrod3" "lightgoldenrod4"
[415] "lightgoldenrodyellow" "lightgray" "lightgreen"
[418] "lightgrey" "lightpink" "lightpink1"
[421] "lightpink2" "lightpink3" "lightpink4"
[424] "lightsalmon" "lightsalmon1" "lightsalmon2"
[427] "lightsalmon3" "lightsalmon4" "lightseagreen"
[430] "lightskyblue" "lightskyblue1" "lightskyblue2"
[433] "lightskyblue3" "lightskyblue4" "lightslateblue"
[436] "lightslategray" "lightslategrey" "lightsteelblue"
[439] "lightsteelblue1" "lightsteelblue2" "lightsteelblue3"
[442] "lightsteelblue4" "lightyellow" "lightyellow1"
[445] "lightyellow2" "lightyellow3" "lightyellow4"
[448] "limegreen" "linen" "magenta"
[451] "magenta1" "magenta2" "magenta3"
[454] "magenta4" "maroon" "maroon1"
[457] "maroon2" "maroon3" "maroon4"
[460] "mediumaquamarine" "mediumblue" "mediumorchid"
[463] "mediumorchid1" "mediumorchid2" "mediumorchid3"
[466] "mediumorchid4" "mediumpurple" "mediumpurple1"
[469] "mediumpurple2" "mediumpurple3" "mediumpurple4"
[472] "mediumseagreen" "mediumslateblue" "mediumspringgreen"
[475] "mediumturquoise" "mediumvioletred" "midnightblue"
[478] "mintcream" "mistyrose" "mistyrose1"
[481] "mistyrose2" "mistyrose3" "mistyrose4"
[484] "moccasin" "navajowhite" "navajowhite1"
[487] "navajowhite2" "navajowhite3" "navajowhite4"
[490] "navy" "navyblue" "oldlace"
[493] "olivedrab" "olivedrab1" "olivedrab2"
[496] "olivedrab3" "olivedrab4" "orange"
[499] "orange1" "orange2" "orange3"
[502] "orange4" "orangered" "orangered1"
[505] "orangered2" "orangered3" "orangered4"
[508] "orchid" "orchid1" "orchid2"
[511] "orchid3" "orchid4" "palegoldenrod"
[514] "palegreen" "palegreen1" "palegreen2"
[517] "palegreen3" "palegreen4" "paleturquoise"
[520] "paleturquoise1" "paleturquoise2" "paleturquoise3"
[523] "paleturquoise4" "palevioletred" "palevioletred1"
[526] "palevioletred2" "palevioletred3" "palevioletred4"
[529] "papayawhip" "peachpuff" "peachpuff1"
[532] "peachpuff2" "peachpuff3" "peachpuff4"
[535] "peru" "pink" "pink1"
[538] "pink2" "pink3" "pink4"
[541] "plum" "plum1" "plum2"
[544] "plum3" "plum4" "powderblue"
[547] "purple" "purple1" "purple2"
[550] "purple3" "purple4" "red"
[553] "red1" "red2" "red3"
[556] "red4" "rosybrown" "rosybrown1"
[559] "rosybrown2" "rosybrown3" "rosybrown4"
[562] "royalblue" "royalblue1" "royalblue2"
[565] "royalblue3" "royalblue4" "saddlebrown"
[568] "salmon" "salmon1" "salmon2"
[571] "salmon3" "salmon4" "sandybrown"
[574] "seagreen" "seagreen1" "seagreen2"
[577] "seagreen3" "seagreen4" "seashell"
[580] "seashell1" "seashell2" "seashell3"
[583] "seashell4" "sienna" "sienna1"
[586] "sienna2" "sienna3" "sienna4"
[589] "skyblue" "skyblue1" "skyblue2"
[592] "skyblue3" "skyblue4" "slateblue"
[595] "slateblue1" "slateblue2" "slateblue3"
[598] "slateblue4" "slategray" "slategray1"
[601] "slategray2" "slategray3" "slategray4"
[604] "slategrey" "snow" "snow1"
[607] "snow2" "snow3" "snow4"
[610] "springgreen" "springgreen1" "springgreen2"
[613] "springgreen3" "springgreen4" "steelblue"
[616] "steelblue1" "steelblue2" "steelblue3"
[619] "steelblue4" "tan" "tan1"
[622] "tan2" "tan3" "tan4"
[625] "thistle" "thistle1" "thistle2"
[628] "thistle3" "thistle4" "tomato"
[631] "tomato1" "tomato2" "tomato3"
[634] "tomato4" "turquoise" "turquoise1"
[637] "turquoise2" "turquoise3" "turquoise4"
[640] "violet" "violetred" "violetred1"
[643] "violetred2" "violetred3" "violetred4"
[646] "wheat" "wheat1" "wheat2"
[649] "wheat3" "wheat4" "whitesmoke"
[652] "yellow" "yellow1" "yellow2"
[655] "yellow3" "yellow4" "yellowgreen"
4.2 Diagramme à bandes (ggplot)
Représentations graphiques des variables catégorielles
4.2.1 Une variable
Exemple : la possession d’un appareil connecté relatif à la santé (CONN_SANTE)
bns %>%
filter(!is.na(CONN_SANTE)) %>% # n'affiche pas les NA
count(CONN_SANTE) %>% # compte les effectifs pour chaque modalité
mutate(freq=n/sum(n)) %>% # calcul du % (freq) pour chaque modalité
ggplot(aes(x=reorder(CONN_SANTE,-freq),y=freq)) + # variable sur l'axe X et % sur axe Y et Le signe - devant freq permet d'ordonner du plus grand au plus petit
geom_col(fill="#39ADAF") + # Choix de la couleur des bandes
labs(
x = "",
y = "Pourcentage",
title = "Figure 1. Possession d'un objet connecté relatif à la santé (%)"
) +
scale_y_continuous(labels = percent) + # Affichage ss forme de % et non de proportion
theme_minimal() +
theme(
plot.title.position = "plot" # Pour afficher le titre en haut de la figure
)4.2.2 Plusieurs variables
On souhaite réaliser un seul diagramme avec les différents équipements numériques et uniquement les modalités “oui”
prop_oui <- function(x) {mean(x == "Oui", na.rm = TRUE)*100} # Creation d'une fonction utilitaire qui calcule les % de oui pondérés
equip_fig <- equip %>%
summarise(
SMARTPHO_f_oui = prop_oui(SMARTPHO_f),
ORDIPERSO_r_oui = prop_oui(ORDIPERSO_r),
TAB_oui = prop_oui(TAB),
ENCEINTE_f_oui = prop_oui(ENCEINTE_f),
ORDIPRO_r_oui = prop_oui(ORDIPRO_r)
) %>%
pivot_longer(everything(),names_to = "variable",values_to = "Pourcentage") %>%
# Remplace les noms affichés
mutate(variable = recode(variable,
SMARTPHO_f_oui = "Smartphone",
ORDIPERSO_r_oui = "Ordinateur personnel",
TAB_oui = "Tablette",
ENCEINTE_f_oui = "Enceinte",
ORDIPRO_r_oui = "Ordinateur professionnel"),
variable = fct_reorder(variable, Pourcentage, .desc = TRUE)
)
ggplot(equip_fig, aes(x = variable, y = Pourcentage)) +
geom_col(width = 0.6, fill = "#4E79A7") +
geom_text(aes(label = paste0(round(Pourcentage, 0), "%")), vjust = -0.5) +
labs(
title = "Figure 2. Les équipements des Français·es (%)",
x = NULL, y = NULL
) +
theme_minimal() +
theme(legend.position = "none")4.3 Diagrammes en boites (boxplot)
Représentations graphiques des variables numériques
Exemples : HR_PHONE et HR_ECRAN2
Vérification du type et recodages des NA
- Variable HR_ECRAN2
str(bns$HR_ECRAN2) # OK variable numérique num [1:3858] 21 5 20 9999 9999 ...
freq(bns$HR_ECRAN2) # Recoder les 9999 en NA n % val%
0 34 0,9 0,9
1 32 0,8 0,8
2 59 1,5 1,5
3 65 1,7 1,7
4 42 1,1 1,1
5 82 2,1 2,1
6 56 1,5 1,5
7 69 1,8 1,8
8 51 1,3 1,3
9 24 0,6 0,6
10 201 5,2 5,2
11 10 0,3 0,3
12 45 1,2 1,2
13 6 0,2 0,2
14 100 2,6 2,6
15 158 4,1 4,1
16 20 0,5 0,5
17 5 0,1 0,1
18 15 0,4 0,4
19 3 0,1 0,1
20 360 9,3 9,3
21 81 2,1 2,1
22 13 0,3 0,3
23 6 0,2 0,2
24 46 1,2 1,2
25 147 3,8 3,8
26 5 0,1 0,1
27 6 0,2 0,2
28 82 2,1 2,1
29 3 0,1 0,1
30 339 8,8 8,8
31 1 0,0 0,0
32 7 0,2 0,2
33 1 0,0 0,0
34 3 0,1 0,1
35 136 3,5 3,5
36 13 0,3 0,3
37 2 0,1 0,1
38 8 0,2 0,2
39 4 0,1 0,1
40 203 5,3 5,3
41 1 0,0 0,0
42 22 0,6 0,6
43 2 0,1 0,1
44 3 0,1 0,1
45 33 0,9 0,9
46 1 0,0 0,0
47 1 0,0 0,0
48 9 0,2 0,2
49 10 0,3 0,3
50 162 4,2 4,2
54 2 0,1 0,1
55 5 0,1 0,1
56 15 0,4 0,4
58 2 0,1 0,1
60 67 1,7 1,7
63 4 0,1 0,1
64 2 0,1 0,1
65 3 0,1 0,1
66 1 0,0 0,0
68 1 0,0 0,0
70 72 1,9 1,9
72 5 0,1 0,1
75 4 0,1 0,1
77 3 0,1 0,1
78 3 0,1 0,1
79 1 0,0 0,0
80 28 0,7 0,7
84 3 0,1 0,1
86 1 0,0 0,0
90 10 0,3 0,3
91 1 0,0 0,0
98 2 0,1 0,1
99 11 0,3 0,3
100 31 0,8 0,8
104 1 0,0 0,0
110 1 0,0 0,0
111 1 0,0 0,0
112 2 0,1 0,1
120 4 0,1 0,1
125 1 0,0 0,0
130 2 0,1 0,1
140 2 0,1 0,1
150 9 0,2 0,2
155 1 0,0 0,0
159 1 0,0 0,0
168 4 0,1 0,1
9999 765 19,8 19,8
bns$HR_ECRAN2[bns$HR_ECRAN2 == 9999] <- NA
freq(bns$HR_ECRAN2) # Vérification OK n % val%
0 34 0,9 1,1
1 32 0,8 1,0
2 59 1,5 1,9
3 65 1,7 2,1
4 42 1,1 1,4
5 82 2,1 2,7
6 56 1,5 1,8
7 69 1,8 2,2
8 51 1,3 1,6
9 24 0,6 0,8
10 201 5,2 6,5
11 10 0,3 0,3
12 45 1,2 1,5
13 6 0,2 0,2
14 100 2,6 3,2
15 158 4,1 5,1
16 20 0,5 0,6
17 5 0,1 0,2
18 15 0,4 0,5
19 3 0,1 0,1
20 360 9,3 11,6
21 81 2,1 2,6
22 13 0,3 0,4
23 6 0,2 0,2
24 46 1,2 1,5
25 147 3,8 4,8
26 5 0,1 0,2
27 6 0,2 0,2
28 82 2,1 2,7
29 3 0,1 0,1
30 339 8,8 11,0
31 1 0,0 0,0
32 7 0,2 0,2
33 1 0,0 0,0
34 3 0,1 0,1
35 136 3,5 4,4
36 13 0,3 0,4
37 2 0,1 0,1
38 8 0,2 0,3
39 4 0,1 0,1
40 203 5,3 6,6
41 1 0,0 0,0
42 22 0,6 0,7
43 2 0,1 0,1
44 3 0,1 0,1
45 33 0,9 1,1
46 1 0,0 0,0
47 1 0,0 0,0
48 9 0,2 0,3
49 10 0,3 0,3
50 162 4,2 5,2
54 2 0,1 0,1
55 5 0,1 0,2
56 15 0,4 0,5
58 2 0,1 0,1
60 67 1,7 2,2
63 4 0,1 0,1
64 2 0,1 0,1
65 3 0,1 0,1
66 1 0,0 0,0
68 1 0,0 0,0
70 72 1,9 2,3
72 5 0,1 0,2
75 4 0,1 0,1
77 3 0,1 0,1
78 3 0,1 0,1
79 1 0,0 0,0
80 28 0,7 0,9
84 3 0,1 0,1
86 1 0,0 0,0
90 10 0,3 0,3
91 1 0,0 0,0
98 2 0,1 0,1
99 11 0,3 0,4
100 31 0,8 1,0
104 1 0,0 0,0
110 1 0,0 0,0
111 1 0,0 0,0
112 2 0,1 0,1
120 4 0,1 0,1
125 1 0,0 0,0
130 2 0,1 0,1
140 2 0,1 0,1
150 9 0,2 0,3
155 1 0,0 0,0
159 1 0,0 0,0
168 4 0,1 0,1
NA 765 19,8 NA
- Variable HR_PHONE
str(bns$HR_PHONE) # Variable de type character à numériser chr [1:3858] "24" "1" "20" "1" "1" "15" "28" "10" "10" "2" "6" "10" "4" ...
bns$HR_PHONE_n <- as.numeric(bns$HR_PHONE) # Pour passer du type character à numérique
str(bns$HR_PHONE_n) num [1:3858] 24 1 20 1 1 15 28 10 10 2 ...
freq(bns$HR_PHONE_n) # Recoder les 999 en NA n % val%
0 22 0,6 0,7
1 156 4,0 5,0
2 169 4,4 5,4
3 134 3,5 4,3
4 87 2,3 2,8
5 138 3,6 4,4
6 64 1,7 2,1
7 132 3,4 4,2
8 91 2,4 2,9
9 18 0,5 0,6
10 285 7,4 9,1
11 7 0,2 0,2
12 57 1,5 1,8
13 5 0,1 0,2
14 89 2,3 2,9
15 177 4,6 5,7
16 27 0,7 0,9
17 2 0,1 0,1
18 16 0,4 0,5
19 2 0,1 0,1
20 308 8,0 9,9
21 45 1,2 1,4
22 7 0,2 0,2
23 4 0,1 0,1
24 29 0,8 0,9
25 75 1,9 2,4
26 3 0,1 0,1
27 2 0,1 0,1
28 25 0,6 0,8
29 2 0,1 0,1
30 159 4,1 5,1
31 1 0,0 0,0
32 4 0,1 0,1
33 3 0,1 0,1
34 2 0,1 0,1
35 58 1,5 1,9
36 3 0,1 0,1
38 1 0,0 0,0
39 1 0,0 0,0
40 76 2,0 2,4
42 5 0,1 0,2
43 1 0,0 0,0
45 9 0,2 0,3
48 6 0,2 0,2
49 2 0,1 0,1
50 50 1,3 1,6
53 2 0,1 0,1
54 1 0,0 0,0
55 2 0,1 0,1
56 3 0,1 0,1
60 9 0,2 0,3
64 1 0,0 0,0
65 1 0,0 0,0
66 1 0,0 0,0
67 1 0,0 0,0
70 21 0,5 0,7
72 1 0,0 0,0
75 2 0,1 0,1
80 3 0,1 0,1
90 3 0,1 0,1
91 1 0,0 0,0
99 5 0,1 0,2
100 14 0,4 0,4
105 1 0,0 0,0
120 5 0,1 0,2
125 1 0,0 0,0
130 2 0,1 0,1
140 1 0,0 0,0
150 3 0,1 0,1
160 2 0,1 0,1
168 4 0,1 0,1
999 468 12,1 15,0
NA 741 19,2 NA
bns$HR_PHONE_n[bns$HR_PHONE_n == 999] <- NA
freq(bns$HR_PHONE_n) # OK n % val%
0 22 0,6 0,8
1 156 4,0 5,9
2 169 4,4 6,4
3 134 3,5 5,1
4 87 2,3 3,3
5 138 3,6 5,2
6 64 1,7 2,4
7 132 3,4 5,0
8 91 2,4 3,4
9 18 0,5 0,7
10 285 7,4 10,8
11 7 0,2 0,3
12 57 1,5 2,2
13 5 0,1 0,2
14 89 2,3 3,4
15 177 4,6 6,7
16 27 0,7 1,0
17 2 0,1 0,1
18 16 0,4 0,6
19 2 0,1 0,1
20 308 8,0 11,6
21 45 1,2 1,7
22 7 0,2 0,3
23 4 0,1 0,2
24 29 0,8 1,1
25 75 1,9 2,8
26 3 0,1 0,1
27 2 0,1 0,1
28 25 0,6 0,9
29 2 0,1 0,1
30 159 4,1 6,0
31 1 0,0 0,0
32 4 0,1 0,2
33 3 0,1 0,1
34 2 0,1 0,1
35 58 1,5 2,2
36 3 0,1 0,1
38 1 0,0 0,0
39 1 0,0 0,0
40 76 2,0 2,9
42 5 0,1 0,2
43 1 0,0 0,0
45 9 0,2 0,3
48 6 0,2 0,2
49 2 0,1 0,1
50 50 1,3 1,9
53 2 0,1 0,1
54 1 0,0 0,0
55 2 0,1 0,1
56 3 0,1 0,1
60 9 0,2 0,3
64 1 0,0 0,0
65 1 0,0 0,0
66 1 0,0 0,0
67 1 0,0 0,0
70 21 0,5 0,8
72 1 0,0 0,0
75 2 0,1 0,1
80 3 0,1 0,1
90 3 0,1 0,1
91 1 0,0 0,0
99 5 0,1 0,2
100 14 0,4 0,5
105 1 0,0 0,0
120 5 0,1 0,2
125 1 0,0 0,0
130 2 0,1 0,1
140 1 0,0 0,0
150 3 0,1 0,1
160 2 0,1 0,1
168 4 0,1 0,2
NA 1209 31,3 NA
Synthèse des principaux indicateurs de tendance centrale et de dispersion
summary(bns$HR_ECRAN2) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0,0 13,0 24,0 28,1 36,0 168,0 765
summary(bns$HR_PHONE_n) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0,0 5,0 12,0 17,1 21,0 168,0 1209
4.3.1 Une variable
Affichage séparé de chaque diagramme
boxplot(bns$HR_ECRAN2,main = "Figure 3. Nombre d'heures passées devant des écrans",col="orange")boxplot(bns$HR_PHONE_n, main = "Figure 4. Nombre d'heures passées sur un smpartphone", col="lightblue") Affichage des deux diagrammes côte à côte
bp <- boxplot(bns$HR_ECRAN2, bns$HR_PHONE_n,
names = c("Devant les écrans", "Sur le smartphone"),
main = "Figure 5. Comparaison du temps passé par semaine",
ylab = "Heures",
col = c("orange", "lightblue"))
# Statistiques tirées de l'objet 'bp'
q1 <- bp$stats[2, ] # Q1
med <- bp$stats[3, ] # Médiane
q3 <- bp$stats[4, ] # Q3
# Moyennes (à calculer à part)
moy <- c(mean(bns$HR_ECRAN2_r, na.rm = TRUE),
mean(bns$HR_PHONE_r, na.rm = TRUE))
# Ajouts : un point pour la moyenne, et des étiquettes pour les 4 stats
points(1:2, moy, pch = 19, col = "red")
text(1:2, med, labels = paste0("Med=", round(med, 1)), pos = 3, cex = 0.8)
text(1:2, q1, labels = paste0("Q1=", round(q1, 1)), pos = 1, cex = 0.8)
text(1:2, q3, labels = paste0("Q3=", round(q3, 1)), pos = 3, cex = 0.8)4.3.2 Plusieurs variables
Temps d’écran et âges
boxplot(HR_ECRAN2 ~ CLAGE, data = bns,
main = "Figure 6. Temps d'écran selon les classes d'âge",
xlab = "Classe d'âge",
ylab = "Heures par jour",
col = "orange")Temps d’écran et genre
boxplot(HR_ECRAN2 ~ GENRE, data = bns,
main = "Figure 7. Temps d'écran selon le genre",
xlab = "Genre",
ylab = "Heures par jour",
col = "orange")Temps d’écran et niveau de diplôme
boxplot(HR_ECRAN2 ~ DIPL, data = bns,
main = "Figure 8. Temps d'écran selon le niveau d'étude",
xlab = "Niveau d'étude",
ylab = "Heures par jour",
col = "orange")