Cours complet

Author

Marie Lesclingand

Published

February 18, 2026

1 PREMIERS PAS

1.1 Découverte de l’environnement RStudio

Ce script est une prise en main du logiciel R, via l’interface RStudio

1.1.1 Le projet

Avant de démarrer :

  • Créer un répertoire QUANTI dans l’explorateur de fichiers ou le finder :
  • Créer à l’intérieur trois sous-dossiers :
    • DATA
    • DOCS
    • TAB_FIG
  • Enregistrer la base de données dans DATA, les fichiers de documentation de la base dans DOCS

Puis créer un projet RStudio à partir de ce répertoire existant (QUANTI)

1.1.2 Le script

Tout commentaire doit être précédé d’un #

Structurer le script en titrant avec les —-

1.1.3 L’interface RStudio

Les quatre cadrans principaux :

  • Cadran haut-gauche : Script : sauvegarde des instructions
  • Cadran haut-bas : Console : écriture et résultats des instructions
  • Cadran haut-droite : Environnement/Historique/Connexions : affichage des bases et objets utilisés
  • Cadran bas-droite :Fichiers/Graphiques/Paquets/Aide/Visualiseur/Présentation : explorateur, visualisation des packages, de l’aide et des graphiques et tableaux

1.1.4 Les fonctions de base

1.1.4.1 Comme une calculatrice

Exemple : calcul de la somme 2+2

2+2
[1] 4

Autres exemples de calculs simples : différence, produit et quotient

5-10
[1] -5
78*5
[1] 390
95/86
[1] 1.104651

1.1.4.2 Stockage de valeurs dans des objets vecteurs

On peut stocker une valeur dans un objet pour pouvoir la réutiliser ensuite facilement :

Exemple : création du vecteur x qui prend la valeur 2

x<-2

Calcul de x+10 avec affichage du résultat

x+10
[1] 12

On peut aussi créer un vecteur avec une série de valeurs :

Exemple : création d’un vecteur ages suite à une petite enquête auprès de 16 étudiants

ages<-c(19, 20, 20, 20, 20, 20, 20, 21, 20, 19, 19, 20, 20, 20, 19, 19)

Affichage du vecteur ages

```{r}
ages
```

Exemple : création d’un vecteur annais à partir du vecteur ages qui donne l’année de naissance en fonction de l’âge

annais=2025-ages

Affichage du vecteur annais

annais
 [1] 2006 2005 2005 2005 2005 2005 2005 2004 2005 2006 2006 2005 2005 2005 2006
[16] 2006

Exemple : Création du vecteur genre qui saisit les genre des étudiants enquêtés

genre<-c("homme", "femme", "femme", "femme", "femme", "homme", "femme", "femme", "femme", "femme", "homme", "femme", "femme", "homme", "femme", "femme") 

Affichage du vecteur genre

genre
 [1] "homme" "femme" "femme" "femme" "femme" "homme" "femme" "femme" "femme"
[10] "femme" "homme" "femme" "femme" "homme" "femme" "femme"

Remarque : tous les nouveaux objets apparaissent dans la fenêtre Environnement

1.1.4.3 Quelques fonctions

Valeur minimale (min)

  • Exemple : la plus petite valeur pour une variable numérique
min(ages)
[1] 19
  • Exemple : la première valeur par ordre alphabétique pour une variable catégorielle numérique
min(genre)
[1] "femme"

Valeur maximale (max)

  • Exemple : la plus grande valeur pour une variable numérique
max(ages)
[1] 21
  • Exemple : la dernière valeur par ordre alphabétique pour une variable catégorielle
max(genre)
[1] "homme"

Valeurs minimale et maximale

  • Exemple : min et max de la variable annais
range(annais)
[1] 2004 2006
  • Exemple : min et max de la variable ages
range(ages)
[1] 19 21

Quelques indicateurs sur les variables numériques

  • Moyenne
mean(ages) 
[1] 19.75
  • Médiane
median(ages) 
[1] 20
  • Principaux indicateurs
summary(ages) 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  19.00   19.00   20.00   19.75   20.00   21.00 

1.1.5 Les packages ou extensions

  • Nouvelles fonctionnalités utiles aux différentes étapes de préparation, d’analyse et de valorisation

  • Deux étapes :

    • Installation avec l’instruction install.packages(“nompackage”) : à faire une seule fois
    • Chargement du package installé : à écrire au début de chaque script avec l’instruction library
    • Exemple : l’extension tidyverse

install.packages(“tidyverse”)

library(tidyverse)

1.1.6 Aide

  • help.start() pour afficher le sommaire de l’aide (fenêtre en bas à droite)

  • help(mean) pour afficher l’aide sur la fonction mean

Dans l’onglet Aide (cadran en bas à droite), pour chaque fonction, infos sur le package dans lequel elle est {}, son utilité et des exemples d’utilisation

1.2 Importation d’une base, sélection de variables et sauvegarde

1.2.1 Importation de bases au format csv ou xls

  • Avoir enregistré les bases récupérées dans le sous-dossier DATA du répertoire QUANTI

  • Selon le format de la base (xls ou csv), on utilisera les instructions readxls ou readr

  • On peut aussi passer par le bouton de la fenêtre Environnement et copier le code

    • Exemple 1 : fichier .csv
    bn1 <- read_delim("../DATA/barometre-du-numerique-2024.csv", 
                     delim = ";", escape_double = FALSE, locale = locale(), 
                     trim_ws = TRUE)
    • Exemple 2 : fichier .xls

      • Avoir installé le package readxls
      library(readxl)
      • Importation de la base
      bn2 <- read_excel("../DATA/barometre-du-numerique-2024.xlsx")

1.2.2 Visionnage et premières explorations de la base

  • Affichage de la base dans un nouvel onglet
View(bn2) 
  • Nombre d’observations (lignes) et de variables (colonnes)
dim(bn2) 
[1] 4066  236
  • Affichage des noms de toutes les variables
names(bn2) 
  [1] "IDENT"          "RECUEIL"        "ANNEENQ"        "POND"          
  [5] "AGE6FUZ"        "AGGLO5"         "REGION"         "TYPLOG"        
  [9] "TYPLOG2"        "NBPERS"         "NBPERS5"        "SITUEMP"       
 [13] "EMP_CF"         "EXERCPRO"       "PCS8EGO"        "PCS8_CF"       
 [17] "SALCOMP"        "TEMPSTRA"       "DIPLOME_CF"     "DIPL5"         
 [21] "TYPOSQT"        "TELFIXE"        "TABLETTE"       "TABLET2"       
 [25] "MICRO2"         "PTSMART2"       "SMARTPHO"       "TELMODET"      
 [29] "TELMOB"         "FRQINTER"       "FRQHANG1"       "FRQHANG2"      
 [33] "FRQAPPLI"       "INTERNET"       "TYPCONN2"       "ENCEINTE"      
 [37] "CONNEC1"        "CONNEC1_NOWEB"  "CONNEC2"        "CONNEC2_NOWEB" 
 [41] "CONNEC3"        "CONNEC3_NOWEB"  "CONNEC4"        "CONNEC4_NOWEB" 
 [45] "FREQORDI"       "FREQTAB"        "FREQFIXE"       "FREQMOB"       
 [49] "FREQALEX"       "FREQTOT"        "US_JOB"         "US_ADMI"       
 [53] "US_ACHAT"       "FREQACHA"       "MISSWEB"        "TYPRADIO2"     
 [57] "NBTIC1"         "NBTIC1_5"       "NBTIC2"         "NBTIC2_5"      
 [61] "NBTIC3"         "NBTIC3_5"       "NBTIC5"         "NBTIC5_5"      
 [65] "NBTIC6"         "NBTIC6_5"       "NBTIC7"         "NBTIC7_5"      
 [69] "NBOLD1"         "NBOLD1_5"       "NBOLD2"         "NBOLD2_5"      
 [73] "NBOLD3"         "NBOLD3_5"       "NBOLD5"         "NBOLD5_5"      
 [77] "NBOLD6"         "NBOLD6_5"       "NBOLD7"         "NBOLD7_5"      
 [81] "FREINWEB1"      "FREINWEB2"      "FREINWEB3"      "FREINWEB4"     
 [85] "FREINWEB5"      "ANSMART"        "CHANSMAR"       "KEEPSMAR"      
 [89] "NBDATA"         "FREINWEB"       "REGLTELE"       "REGLWEB"       
 [93] "REGLJEU"        "LIVRNUM"        "REVTOT7"        "SEXE"          
 [97] "TICNEW_CORR"    "TICOLD_CORR"    "TICLOVE_CORR"   "PREINSTA"      
[101] "WHYPREIN"       "MICROPERSO"     "MICROPRO"       "SMARTACCESS_1" 
[105] "SMARTACCESS_2"  "FORFAIT2"       "MOBPRIX"        "WEBTARIF"      
[109] "CHAT2_1_CORR"   "CHAT2_2_CORR"   "RESOC"          "CGUFACEB2"     
[113] "OPICGU1"        "OPICGU2"        "SIGNAL2"        "OPISIGN1"      
[117] "OPISIGN2"       "OPISIGN3"       "NETFLIX2"       "INTERNEFFET"   
[121] "NUMLIMIT_1"     "NUMLIMIT_2"     "NUMLIMIT_3"     "NUMLIMIT_4"    
[125] "NUMLIMIT_5"     "NBDATA_CORR"    "HR_PHONE"       "HR_PHONE_7"    
[129] "NOMTEMP1"       "NOMTEMP1_AUTRE" "NAVISMAR2"      "NAVDEF1"       
[133] "NAVDEF2"        "NAVDEF3"        "VIEUSMAR2"      "MOBNEG"        
[137] "WHYMOBNEG"      "MOBNEG2_1"      "MOBNEG2_2"      "USDONNEE"      
[141] "PLUSDONNEE"     "MOINSDONNEE"    "WHYMOINSDONNEE" "WEBNEG"        
[145] "WHYWEBNEG"      "WEBNEG2_1"      "WEBNEG2_2"      "AGEC1FIX"      
[149] "AGEC1MOB"       "FRQAGEC1FIX"    "FRQAGEC1MOB"    "AGEC2FIX"      
[153] "AGEC2MOB"       "FRQAGEC2FIX"    "FRQAGEC2MOB"    "AGEC3FIX"      
[157] "AGEC3MOB"       "HR_ECRAN2"      "HR_ECRAN2_7"    "OPITPSECRAN"   
[161] "REGLSMA"        "CONFIA"         "IA_CREA"        "IA_ENV"        
[165] "IA_EMPL"        "IA_EDU"         "US_MAPS"        "US_LOG"        
[169] "US_RDV"         "US_ITIN"        "PETITION"       "ACHANET1"      
[173] "ACHANET2"       "ACHANET4"       "ACHANET5"       "ACHANET6"      
[177] "VINTED_1"       "VINTED_2"       "PREFSOCI"       "CLIQUERPLAT"   
[181] "PAYPHON"        "PREFPAY"        "PREFACT"        "PREFSHOP"      
[185] "PREFALIM"       "PREFLIVR"       "MISSPHONE"      "RSFREQ1"       
[189] "RSFREQ2"        "RSFREQ3"        "OCCASCGU"       "UTILCGU"       
[193] "WHYNOSIG"       "CLOUD1"         "CLOUD2"         "CLOUDWHY1"     
[197] "CLOUDWHY2"      "TYPTELE"        "TYPTV2"         "MODTV1"        
[201] "MODTV2"         "MODTV3"         "MODTV4"         "MODTV5"        
[205] "MODTV6"         "EQIPTV1"        "EQIPTV2"        "EQIPTV3"       
[209] "EQIPTV4"        "EQIPTV5"        "EQIPTV6"        "APPLITV1"      
[213] "APPLITV2"       "WHYTVORDI1"     "WHYTVORDI2"     "RADIOIP3"      
[217] "RADIOIP4"       "TYPMUS"         "TYPINFO"        "TYPDEBAT"      
[221] "TYPSPORT"       "TYPRIRE"        "CRAINTNUM"      "ACCONUM"       
[225] "WHEREACCONUM1"  "WHEREACCONUM2"  "WHYDIFFADMIN1"  "WHYDIFFADMIN2" 
[229] "WHYDIFFADMIN3"  "WHYDIFFADMIN4"  "WHYDIFFADMIN5"  "WHYDIFFADMIN6" 
[233] "WHYDIFFADMIN7"  "WHYDIFFADMIN8"  "WHYDIFFADMIN9"  "PIX"           

1.2.3 Sélection des variables

  • Variables de contrôle et de pondération : IDENT et POND

  • Variables d’intérêt : variables sur les équipements numériques, les objets connectés et les pratiques liées à l’IA : INTERNET FREQTOT MICROPERSO MICROPRO TABLETTE SMARTPHO HR_ECRAN2 HRPHONE ENCEINTE CONNEC1 CONNEC2 CONNEC3 CONNEC4 CHAT_1 CHAT_2

  • Variables socio-démographiques : variables individuelles, ménage et macro : AGE6FUZ SEXE PCS8EGO DIPL5 NBPERS AGGLO5

  • Utilisation de la fonction select et création d’une nouvelle base

bns<-select(bn2,IDENT, POND, INTERNET, FREQTOT, MICROPERSO, MICROPRO, TABLETTE, SMARTPHO, HR_ECRAN2, HR_PHONE, ENCEINTE, CONNEC1, CONNEC2, CONNEC3, CONNEC4, CHAT2_1_CORR, CHAT2_2_CORR, AGE6FUZ, SEXE, PCS8EGO, DIPL5, NBPERS, AGGLO5)

23 variables sélectionnées

dim(bns) 
[1] 4066   23

1.2.4 Sauvegarde de la base au format RData

Stockage de la base dans le sous-dossier DATA

save(bns,file = "../DATA/bns.RData")

La nouvelle base s’affiche dans l’onglet Environnement du cadran en haut à droite

2 PREPARATION DES DONNNES

2.1 Préalable : le chargement des extensions et de la base R

Installation et chargement d’une nouvelle extension questionr

library(questionr)

2.1.1 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.2 Nettoyage et préparation des données

2.2.1 Identification du type des variables

Utilisation de l’instruction describe (de l’extension {questionr})

describe(bns)
[4066 obs. x 23 variables] tbl_df tbl data.frame

$IDENT: 
numeric: 2.02e+13 2.02e+13 2.02e+13 2.02e+13 2.02e+14 2.02e+13 2.02e+14 2.02e+14 2.02e+13 2.02e+13 ...
min: 2.02e+13 - max: 2.02e+14 - NAs: 0 (0%) - 2 unique values

$POND: 
numeric: 0.60187632 0.9779219 0.69407288 0.90717176 1.32537509 0.82894369 1.97293471 1.00447518 0.74818343 0.80783431 ...
min: 0.2903716 - max: 3.69319769 - NAs: 0 (0%) - 2864 unique values

$INTERNET: 
character: "Non" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" ...
NAs: 0 (0%) - 2 unique values

$FREQTOT: 
character: "Plus rarement" "Tous les jours" "Tous les jours" "Tous les jours" "Tous les jours" "Tous les jours" "Tous les jours" "Tous les jours" "Tous les jours" "Tous les jours" ...
NAs: 0 (0%) - 5 unique values

$MICROPERSO: 
character: "Un" "Plusieurs" "Un" "Plusieurs" "Un" "Plusieurs" "Un" "Un" "Plusieurs" "Un" ...
NAs: 0 (0%) - 4 unique values

$MICROPRO: 
character: "Plusieurs" "Aucun" "Aucun" "Aucun" "Aucun" "Aucun" "Aucun" "Aucun" "Un" "Aucun" ...
NAs: 0 (0%) - 4 unique values

$TABLETTE: 
character: "Non" "Oui" "Oui" "Oui" "Oui" "Oui" "Non" "Oui" "Oui" "Oui" ...
NAs: 0 (0%) - 3 unique values

$SMARTPHO: 
character: "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" "Oui" ...
NAs: 0 (0%) - 2 unique values

$HR_ECRAN2: 
numeric: 21 5 20 9999 9999 35 28 25 25 70 ...
min: 0 - max: 9999 - NAs: 0 (0%) - 90 unique values

$HR_PHONE: 
character: "24" "1" "20" "1" "1" "15" "28" "10" "10" "2" ...
NAs: 0 (0%) - 73 unique values

$ENCEINTE: 
character: "Oui" "Oui" "Non" "Non" "Non" "Non" "Oui" "Oui" "Oui" "Non" ...
NAs: 0 (0%) - 4 unique values

$CONNEC1: 
character: "Vous en possédez déjà" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous en possédez déjà" "Vous en utiliserez probablement un à l'avenir" "Vous en possédez déjà" "Vous n'en utiliserez probablement pas à l'avenir" ...
NAs: 0 (0%) - 5 unique values

$CONNEC2: 
character: "Vous en utiliserez probablement un à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous en possédez déjà" "Vous en possédez déjà" "Vous en utiliserez probablement un à l'avenir" "Vous en possédez déjà" "Vous n'en utiliserez probablement pas à l'avenir" ...
NAs: 0 (0%) - 5 unique values

$CONNEC3: 
character: "Vous en possédez déjà" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous en utiliserez probablement un à l'avenir" "Vous en possédez déjà" "Vous n'en utiliserez probablement pas à l'avenir" ...
NAs: 0 (0%) - 5 unique values

$CONNEC4: 
character: "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous n'en utiliserez probablement pas à l'avenir" "Vous en utiliserez probablement un à l'avenir" "Vous en possédez déjà" "Vous n'en utiliserez probablement pas à l'avenir" ...
NAs: 0 (0%) - 5 unique values

$CHAT2_1_CORR: 
character: "Oui" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Oui" "Non" ...
NAs: 0 (0%) - 3 unique values

$CHAT2_2_CORR: 
character: "Oui" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Oui" "Oui" ...
NAs: 0 (0%) - 3 unique values

$AGE6FUZ: 
character: "25-39 ans" "70 ans et plus" "40-59 ans" "60-69 ans" "70 ans et plus" "70 ans et plus" "60-69 ans" "60-69 ans" "40-59 ans" "40-59 ans" ...
NAs: 0 (0%) - 6 unique values

$SEXE: 
character: "Homme" "Femme" "Femme" "Femme" "Femme" "Femme" "Homme" "Femme" "Femme" "Homme" ...
NAs: 0 (0%) - 2 unique values

$PCS8EGO: 
character: "Autre inactif" "Retraité" "Profession Intermédiaire" "Retraité" "Retraité" "Retraité" "Employé" "Retraité" "Agri. exploitant, artisan, commerçant et chef d'entreprise" "Cadre et profession intellectuelle supérieure" ...
NAs: 0 (0%) - 8 unique values

$DIPL5: 
character: "Diplômé du supérieur" "Diplômé du supérieur" "Diplômé du supérieur" "Non diplômé" "BEPC" "Diplômé du supérieur" "Non diplômé" "BEPC" "Diplômé du supérieur" "Diplômé du supérieur" ...
NAs: 0 (0%) - 5 unique values

$NBPERS: 
numeric: 1 2 1 4 2 2 2 2 5 2 ...
min: 1 - max: 9 - NAs: 0 (0%) - 9 unique values

$AGGLO5: 
character: "Agglomération parisienne" "100 000 habitants et plus" "Communes rurales" "Communes rurales" "100 000 habitants et plus" "20 000 à 99 999 habitants" "2 000 à 19 999 habitants" "20 000 à 99 999 habitants" "2 000 à 19 999 habitants" "20 000 à 99 999 habitants" ...
NAs: 0 (0%) - 5 unique values
  • Astuce : on peut voir le type des variables directement dans la fenêtre Environnement

2.2.2 Factorisation, recodage des NA et réordonnancement

2.2.2.1 Préambule

  • Sous R, les variables catégorielles seront reconnues comme des variables de type factor (et non character)
  • Sous R, les non-réponses doivent être codées en NA pour être reconnues comme telles
  • Les modalités des variables catégorielles (ordinales notamment) ne sont pas toujours correctement ordonnancées

Pour chaque variable catégorielle, il faudra donc procéder en trois étapes :

  • Tri à plat de la variable brute (pour voir ce qu’il faut faire);
  • Factorisation avec éventuel recodage des non-réponses en NA et éventuel réordonnancement des modalités de réponse;
  • Tri à plat de la nouvelle variable (pour vérifier ce qui a été fait) ;

!! Nota Bene : il est important de créer une nouvelle variable (nouveau nom) afin de ne pas écraser la variable initiale brute

2.2.2.2 Exemple avec la variable FREQTOT

  1. Tri à plat avec la fonction freq (nombase$nomvariable)
freq(bns$FREQTOT)
                               n    % val%
Jamais                       375  9.2  9.2
Non réponse                    1  0.0  0.0
Plus rarement                125  3.1  3.1
Tous les jours              3316 81.6 81.6
Une à deux fois par semaine  249  6.1  6.1

Recodage nécessaire des “Non réponse” en NA et ordonnancement de la variable

  1. Recodage de FREQTOT en UTILINT
    • Utilisation du recodage interactif dans les Extensions Levels Recoding et Ordering

    • Utilisation du pipe |> ou %>% : application sur l’objet placé avant de la fonction située après

bns$UTILINT <- bns$FREQTOT |>
  fct_recode(
    NULL = "Non réponse"
  ) |>
  fct_relevel(
    "Tous les jours", "Une à deux fois par semaine", "Plus rarement",
    "Jamais"
  )
  1. Vérification avec tri à plat de la variable UTILINT
freq(bns$UTILINT)
                               n    % val%
Tous les jours              3316 81.6 81.6
Une à deux fois par semaine  249  6.1  6.1
Plus rarement                125  3.1  3.1
Jamais                       375  9.2  9.2
NA                             1  0.0   NA

2.2.2.3 Application aux autres variables

2.2.2.3.1 Variables d’intérêt
  • Variable INTERNET : factorisation et réordonnancement
freq(bns$INTERNET)
       n    % val%
Non  905 22.3 22.3
Oui 3161 77.7 77.7
bns$NET <- bns$INTERNET |>
  fct_recode() |>
  fct_relevel ("Oui", "Non")
freq(bns$NET)
       n    % val%
Oui 3161 77.7 77.7
Non  905 22.3 22.3
  • Variable MICROPERSO : factorisation, recodage et réordonnancement
freq(bns$MICROPERSO)
               n    % val%
Aucun        637 15.7 15.7
Non réponse    9  0.2  0.2
Plusieurs   1073 26.4 26.4
Un          2347 57.7 57.7
bns$ORDIPERSO <- bns$MICROPERSO |>
  fct_recode(
    NULL = "Non réponse"
  ) |>
  fct_relevel("Plusieurs", "Un", "Aucun")
freq(bns$ORDIPERSO)
             n    % val%
Plusieurs 1073 26.4 26.4
Un        2347 57.7 57.9
Aucun      637 15.7 15.7
NA           9  0.2   NA
  • Variable MICROPRO : factorisation, recodage et réordonnancement
freq(bns$MICROPRO) 
               n    % val%
Aucun       2949 72.5 72.5
Non réponse   65  1.6  1.6
Plusieurs    224  5.5  5.5
Un           828 20.4 20.4
bns$ORDIPRO <- bns$MICROPRO |>
  fct_recode(
    NULL = "Non réponse"
  ) |>
  fct_relevel("Plusieurs", "Un", "Aucun")
freq(bns$ORDIPRO)
             n    % val%
Plusieurs  224  5.5  5.6
Un         828 20.4 20.7
Aucun     2949 72.5 73.7
NA          65  1.6   NA
  • Variable TABLETTE : factorisation, recodage et réordonnancement
freq(bns$TABLETTE)
         n    % val%
[Nsp]   29  0.7  0.7
Non   1992 49.0 49.0
Oui   2045 50.3 50.3
bns$TAB <- bns$TABLETTE |>
  fct_recode(
    NULL = "[Nsp]"
  ) |>
  fct_relevel("Oui", "Non")
freq(bns$TAB)
       n    % val%
Oui 2045 50.3 50.7
Non 1992 49.0 49.3
NA    29  0.7   NA
  • Variable SMARTPHO : factorisation et réordonnancement
freq(bns$SMARTPHO)
       n    % val%
Non  492 12.1 12.1
Oui 3574 87.9 87.9
bns$SMARTPHO_f <- bns$SMARTPHO |>
  fct_recode() |>
  fct_relevel("Oui","Non")
freq(bns$SMARTPHO_f)
       n    % val%
Oui 3574 87.9 87.9
Non  492 12.1 12.1
  • Variable ENCEINTE : factorisation, recodage et réordonnancement
freq(bns$ENCEINTE)
         n    % val%
[Nsp]    4  0.1  0.1
"NA"   601 14.8 14.8
Non   2401 59.1 59.1
Oui   1060 26.1 26.1
bns$ENCEINTE_f <- bns$ENCEINTE |>
  fct_recode(
    NULL = "[Nsp]",
    NULL = "NA"
  ) |>
  fct_relevel("Oui", "Non")
freq(bns$ENCEINTE_f)
       n    % val%
Oui 1060 26.1 30.6
Non 2401 59.1 69.4
NA   605 14.9   NA
  • Variable CONNEC1 : factorisation et recodage
freq(bns$CONNEC1)
                                                    n    % val%
"NA"                                              601 14.8 14.8
Non réponse                                        68  1.7  1.7
Vous en possédez déjà                             963 23.7 23.7
Vous en utiliserez probablement un à l'avenir     629 15.5 15.5
Vous n'en utiliserez probablement pas à l'avenir 1805 44.4 44.4
bns$CONN_SANTE <- bns$CONNEC1 |>
  fct_recode(
    NULL = "Non réponse",
    NULL = "NA"
  )
freq(bns$CONN_SANTE)
                                                    n    % val%
Vous en possédez déjà                             963 23.7 28.3
Vous en utiliserez probablement un à l'avenir     629 15.5 18.5
Vous n'en utiliserez probablement pas à l'avenir 1805 44.4 53.1
NA                                                669 16.5   NA
  • Variable CONNEC2 : factorisation et recodage
freq(bns$CONNEC2)
                                                    n    % val%
"NA"                                              601 14.8 14.8
Non réponse                                       107  2.6  2.6
Vous en possédez déjà                             791 19.5 19.5
Vous en utiliserez probablement un à l'avenir     890 21.9 21.9
Vous n'en utiliserez probablement pas à l'avenir 1677 41.2 41.2
bns$CONN_SECURITE <- bns$CONNEC2 |>
  fct_recode(
    NULL = "Non réponse",
    NULL = "NA"
  )
freq(bns$CONN_SECURITE)
                                                    n    % val%
Vous en possédez déjà                             791 19.5 23.6
Vous en utiliserez probablement un à l'avenir     890 21.9 26.5
Vous n'en utiliserez probablement pas à l'avenir 1677 41.2 49.9
NA                                                708 17.4   NA
  • Variable CONNEC3 : factorisation et recodage
freq(bns$CONNEC3)
                                                    n    % val%
"NA"                                              601 14.8 14.8
Non réponse                                        96  2.4  2.4
Vous en possédez déjà                             684 16.8 16.8
Vous en utiliserez probablement un à l'avenir     879 21.6 21.6
Vous n'en utiliserez probablement pas à l'avenir 1806 44.4 44.4
bns$CONN_DOMOTIQUE <- bns$CONNEC3 |>
  fct_recode(
    NULL = "Non réponse",
    NULL = "NA"
  )
freq(bns$CONN_DOMOTIQUE)
                                                    n    % val%
Vous en possédez déjà                             684 16.8 20.3
Vous en utiliserez probablement un à l'avenir     879 21.6 26.1
Vous n'en utiliserez probablement pas à l'avenir 1806 44.4 53.6
NA                                                697 17.1   NA
  • Variable CONNEC4 : factorisation et recodage
freq(bns$CONNEC4)
                                                    n    % val%
"NA"                                              601 14.8 14.8
Non réponse                                        54  1.3  1.3
Vous en possédez déjà                             610 15.0 15.0
Vous en utiliserez probablement un à l'avenir     761 18.7 18.7
Vous n'en utiliserez probablement pas à l'avenir 2040 50.2 50.2
bns$CONN_MENAGER <- bns$CONNEC4 |>
  fct_recode(
    NULL = "Non réponse",
    NULL = "NA"
  )
freq(bns$CONN_MENAGER)
                                                    n    % val%
Vous en possédez déjà                             610 15.0 17.9
Vous en utiliserez probablement un à l'avenir     761 18.7 22.3
Vous n'en utiliserez probablement pas à l'avenir 2040 50.2 59.8
NA                                                655 16.1   NA
  • Variable CHAT2_1_CORR : factorisation, recodage et réordonnancement
freq(bns$CHAT2_1_CORR)
               n    % val%
Non         3265 80.3 80.3
Non réponse   15  0.4  0.4
Oui          786 19.3 19.3
bns$IA_PRO <- bns$CHAT2_1_CORR |> 
 fct_recode( 
    NULL = "Non réponse",
    NULL = "NA" 
    ) |>  
    fct_relevel("Oui","Non")
freq(bns$IA_PRO)
       n    % val%
Oui  786 19.3 19.4
Non 3265 80.3 80.6
NA    15  0.4   NA
  • Variable CHAT2_2_CORR : factorisation, recodage et réordonnancement
freq(bns$CHAT2_2_CORR)
               n    % val%
Non         3084 75.8 75.8
Non réponse   17  0.4  0.4
Oui          965 23.7 23.7
bns$IA_PERSO <- bns$CHAT2_2_CORR |>
  fct_recode(
    NULL = "Non réponse",
    NULL = "NA"
    ) |>
  fct_relevel("Oui","Non")
freq(bns$IA_PERSO)
       n    % val%
Oui  965 23.7 23.8
Non 3084 75.8 76.2
NA    17  0.4   NA
2.2.2.3.2 Variables socio-démographiques —-
  • Variable AGE6FUZ : factorisation
freq(bns$AGE6FUZ)
                  n    % val%
12-17 ans       208  5.1  5.1
18-24 ans       256  6.3  6.3
25-39 ans       686 16.9 16.9
40-59 ans      1399 34.4 34.4
60-69 ans       623 15.3 15.3
70 ans et plus  894 22.0 22.0
bns$CLAGE <- bns$AGE6FUZ |>
  fct_recode()
freq(bns$CLAGE)
                  n    % val%
12-17 ans       208  5.1  5.1
18-24 ans       256  6.3  6.3
25-39 ans       686 16.9 16.9
40-59 ans      1399 34.4 34.4
60-69 ans       623 15.3 15.3
70 ans et plus  894 22.0 22.0
  • Variable SEXE : factorisation
freq(bns$SEXE)
         n    % val%
Femme 2142 52.7 52.7
Homme 1924 47.3 47.3
bns$GENRE <- bns$SEXE |>
  fct_recode()
freq(bns$GENRE)
         n    % val%
Femme 2142 52.7 52.7
Homme 1924 47.3 47.3
  • Variable PCS8EGO : factorisation et réordonnancement
freq(bns$PCS8EGO)
                                                              n    % val%
Agri. exploitant, artisan, commerçant et chef d'entreprise  191  4.7  4.7
Autre inactif                                               452 11.1 11.1
Cadre et profession intellectuelle supérieure               383  9.4  9.4
Employé                                                     572 14.1 14.1
Ouvrier                                                     355  8.7  8.7
Personne au foyer                                           258  6.3  6.3
Profession Intermédiaire                                    459 11.3 11.3
Retraité                                                   1396 34.3 34.3
bns$PCS <- bns$PCS8EGO |>
  fct_recode(
    "Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise" = "Agri. exploitant, artisan, commerçant et chef d'entreprise",
    "Autre inactif·ve" = "Autre inactif",
    "Employé·e" = "Employé",
    "Ouvrier·ère" = "Ouvrier",
    "Retraité·e" = "Retraité"
  ) |>
  fct_relevel(
    "Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise",
    "Cadre et profession intellectuelle supérieure", "Profession Intermédiaire",
    "Employé·e", "Ouvrier·ère", "Personne au foyer", "Autre inactif·ve",
    "Retraité·e"
  )
freq(bns$PCS)
                                                                     n    %
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise  191  4.7
Cadre et profession intellectuelle supérieure                      383  9.4
Profession Intermédiaire                                           459 11.3
Employé·e                                                          572 14.1
Ouvrier·ère                                                        355  8.7
Personne au foyer                                                  258  6.3
Autre inactif·ve                                                   452 11.1
Retraité·e                                                        1396 34.3
                                                                  val%
Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise  4.7
Cadre et profession intellectuelle supérieure                      9.4
Profession Intermédiaire                                          11.3
Employé·e                                                         14.1
Ouvrier·ère                                                        8.7
Personne au foyer                                                  6.3
Autre inactif·ve                                                  11.1
Retraité·e                                                        34.3
  • Variable DIPL5 : factorisation et réordonnancement
freq(bns$DIPL5)
                        n    % val%
12-17 ans             208  5.1  5.1
BAC                   729 17.9 17.9
BEPC                 1254 30.8 30.8
Diplômé du supérieur 1512 37.2 37.2
Non diplômé           363  8.9  8.9
bns$DIPL <- bns$DIPL5 |>
  fct_recode(
    "Elèves" = "12-17 ans"
  ) |>
  fct_relevel("Elèves","Non diplômé","BEPC","BAC","Diplômé du supérieur")
freq(bns$DIPL)
                        n    % val%
Elèves                208  5.1  5.1
Non diplômé           363  8.9  8.9
BEPC                 1254 30.8 30.8
BAC                   729 17.9 17.9
Diplômé du supérieur 1512 37.2 37.2
  • Variable AGGLO5 : factorisation et réordonnancement
freq(bns$AGGLO5)
                             n    % val%
100 000 habitants et plus 1258 30.9 30.9
2 000 à 19 999 habitants   672 16.5 16.5
20 000 à 99 999 habitants  582 14.3 14.3
Agglomération parisienne   553 13.6 13.6
Communes rurales          1001 24.6 24.6
bns$AGGLO <- bns$AGGLO5 |>
  fct_recode() |>
  fct_relevel("Communes rurales","2 000 à 19 999 habitants","20 000 à 99 999 habitants","100 000 habitants et plus","Agglomération parisienne")
freq(bns$AGGLO)
                             n    % val%
Communes rurales          1001 24.6 24.6
2 000 à 19 999 habitants   672 16.5 16.5
20 000 à 99 999 habitants  582 14.3 14.3
100 000 habitants et plus 1258 30.9 30.9
Agglomération parisienne   553 13.6 13.6

2.3 Recodages

2.3.1 Recodages simples : à partir d’une variable

2.3.1.1 Exemple 1 : dichotomiser une variable

Variables MICROPERSO et MICROPRO distinguent la possession de plusieurs ou d’un seul ordinateur

On souhaite regrouper les deux modalités en une seule “Oui” et donc Aucun en “Non”

On aura ainsi les mêmes modalités de réponse pour les 4 variables d’équipements

  • Variable ORDIPERSO Tri à plat de la variable qui nous permet de prévoir les nouveaux effectifs (1073+2347=3420 “Oui”) et 637 “Non”)
freq(bns$ORDIPERSO)
             n    % val%
Plusieurs 1073 26.4 26.4
Un        2347 57.7 57.9
Aucun      637 15.7 15.7
NA           9  0.2   NA

Recodage en 2 modalités avec la fonction fct_recode

bns$ORDIPERSO_r <- bns$ORDIPERSO |>
  fct_recode(
    "Oui" = "Plusieurs",
    "Oui" = "Un",
    "Non" = "Aucun"
  )

Tri à plat de la nouvelle variable pour vérification

freq(bns$ORDIPERSO_r)
       n    % val%
Oui 3420 84.1 84.3
Non  637 15.7 15.7
NA     9  0.2   NA
  • Variable ORDIPRO
freq(bns$ORDIPRO)
             n    % val%
Plusieurs  224  5.5  5.6
Un         828 20.4 20.7
Aucun     2949 72.5 73.7
NA          65  1.6   NA
bns$ORDIPRO_r <- bns$ORDIPRO |>
  fct_recode(
    "Oui" = "Plusieurs",
    "Oui" = "Un",
    "Non" = "Aucun"
  )
freq(bns$ORDIPRO_r)
       n    % val%
Oui 1052 25.9 26.3
Non 2949 72.5 73.7
NA    65  1.6   NA

2.3.1.2 Exemple 2 : création de plusieurs variables avec des recodages différents

La variable UTILINT renseigne sur la fréquence d’utilisation d’internet

Elle comporte 4 modalités : Jamais, Rarement, Plusieurs fois par semaine et Tous les jours

Selon notre questionnement, on peut être amené à faire des regroupements différents

Si on s’intéresse à l’utilisation quotidienne, on va isoler les “tous les jours” et regrouper les autres modalités

  • Variable utiltlj : utilisation quotidienne d’internet
freq(bns$UTILINT)
                               n    % val%
Tous les jours              3316 81.6 81.6
Une à deux fois par semaine  249  6.1  6.1
Plus rarement                125  3.1  3.1
Jamais                       375  9.2  9.2
NA                             1  0.0   NA
bns$utiltlj <- bns$UTILINT |>
  fct_recode(
    "Utilise internet tous les jours" = "Tous les jours",
    "N'utilise pas internet tous les jours" = "Une à deux fois par semaine",
    "N'utilise pas internet tous les jours" = "Plus rarement",
    "N'utilise pas internet tous les jours" = "Jamais"
  )
freq(bns$utiltlj)
                                         n    % val%
Utilise internet tous les jours       3316 81.6 81.6
N'utilise pas internet tous les jours  749 18.4 18.4
NA                                       1  0.0   NA

On pourrait aussi s’intéresser aux enquêtés qui utilisent au moins une fois par semaine internet (3316+249)

  • Variable utilsvt : utilisation fréquente d’internet (au moins une fois par semaine)
freq(bns$UTILINT)
                               n    % val%
Tous les jours              3316 81.6 81.6
Une à deux fois par semaine  249  6.1  6.1
Plus rarement                125  3.1  3.1
Jamais                       375  9.2  9.2
NA                             1  0.0   NA
bns$utilsvt <- bns$UTILINT |> fct_recode( "Utilise internet au moins une fois par semaine" = "Tous les jours", "Utilise internet au moins une fois par semaine" = "Une à deux fois par semaine", "Utilise internet rarement ou jamais" = "Plus rarement", "Utilise internet rarement ou jamais" = "Jamais" )
freq(bns$utilsvt)
                                                  n    % val%
Utilise internet au moins une fois par semaine 3565 87.7 87.7
Utilise internet rarement ou jamais             500 12.3 12.3
NA                                                1  0.0   NA

2.3.2 Recodages complexes

Création d’une nouvelle variable à partir de plusieurs variables existantes

2.3.2.1 Exemple 1 : variable synthétique d’équipements

On souhaite avoir une variable synthétique des 4 types d’équipements (ordi perso, pro, tablette et smartphone)

Utilisation de la fonction interaction avec les 4 variables dichotomiques

bns$EQUIP <- interaction(bns$ORDIPERSO_r,bns$ORDIPRO_r,bns$TAB,bns$SMARTPHO_f)
freq(bns$EQUIP)
                   n    % val%
Oui.Oui.Oui.Oui  678 16.7 17.1
Non.Oui.Oui.Oui   25  0.6  0.6
Oui.Non.Oui.Oui 1147 28.2 28.9
Non.Non.Oui.Oui   79  1.9  2.0
Oui.Oui.Non.Oui  278  6.8  7.0
Non.Oui.Non.Oui   38  0.9  1.0
Oui.Non.Non.Oui 1072 26.4 27.0
Non.Non.Non.Oui  179  4.4  4.5
Oui.Oui.Oui.Non   13  0.3  0.3
Non.Oui.Oui.Non    2  0.0  0.1
Oui.Non.Oui.Non   33  0.8  0.8
Non.Non.Oui.Non   20  0.5  0.5
Oui.Oui.Non.Non    6  0.1  0.2
Non.Oui.Non.Non    2  0.0  0.1
Oui.Non.Non.Non  121  3.0  3.0
Non.Non.Non.Non  282  6.9  7.1
NA                91  2.2   NA

On a 16 (2^4) combinaisons possibles, ce qui disperse beaucoup les effectifs

Regroupements pour avoir au final en 5 modalités :

  • aucun des 4 équipements : 1 combinaison avec 4 non (282)
  • 1 seul : 4 combinaisons avec 1 seul oui (179+20+2+121)
  • 2 sur 4 : 6 combinaisons avec 2 oui (6+33+2+1072+38+79)
  • 3 sur 4 : 4 combinaisons avec 3 oui (25+1147+278+13)
  • les 4 : 1 combinaison avec 4 oui (678)
bns$EQUIP <- interaction(bns$ORDIPERSO_r,bns$ORDIPRO_r,bns$TAB,bns$SMARTPHO_f)|>
  fct_recode(
    "Les 4 équipements" = "Oui.Oui.Oui.Oui",
    "3 équipements" = "Non.Oui.Oui.Oui",
    "3 équipements" = "Oui.Non.Oui.Oui",
    "2 équipements" = "Non.Non.Oui.Oui",
    "3 équipements" = "Oui.Oui.Non.Oui",
    "2 équipements" = "Non.Oui.Non.Oui",
    "2 équipements" = "Oui.Non.Non.Oui",
    "1 seul équipement" = "Non.Non.Non.Oui",
    "3 équipements" = "Oui.Oui.Oui.Non",
    "2 équipements" = "Non.Oui.Oui.Non",
    "2 équipements" = "Oui.Non.Oui.Non",
    "1 seul équipement" = "Non.Non.Oui.Non",
    "2 équipements" = "Oui.Oui.Non.Non",
    "1 seul équipement" = "Non.Oui.Non.Non",
    "1 seul équipement" = "Oui.Non.Non.Non",
    "Aucun équipement" = "Non.Non.Non.Non"
  )
freq(bns$EQUIP)
                     n    % val%
Les 4 équipements  678 16.7 17.1
3 équipements     1463 36.0 36.8
2 équipements     1230 30.3 30.9
1 seul équipement  322  7.9  8.1
Aucun équipement   282  6.9  7.1
NA                  91  2.2   NA

2.3.2.2 Exemple 2 : variable sur l’utilisation de l’IA (perso et/ou pro)

bns$IA <- interaction (bns$IA_PERSO,bns$IA_PRO) |>
  fct_recode(
    "A déjà utilisé l'IA" = "Oui.Oui",
    "A déjà utilisé l'IA" = "Non.Oui",
    "A déjà utilisé l'IA" = "Oui.Non",
    "N'a jamais utilisé l'IA" = "Non.Non",
  )
freq(bns$IA)
                           n    % val%
A déjà utilisé l'IA     1185 29.1 29.3
N'a jamais utilisé l'IA 2856 70.2 70.7
NA                        25  0.6   NA

!! Nota Bene : il est important, au fur et à mesure des recodages effectués et des créations des nouvelles variables, de mettre à jours le dictionnaire de codage (cf. exemple DICO_QUANTI)

2.4 Sélections de sous-populations

On peut être amené à ne travailler que sur un sous-échantillon de la population. On va donc filtrer notre population en fonction de critères d’inclusion ou d’exclusion

Exemple : on veut garder que les enquêtés majeurs et donc ne pas prendre en compte les 12-17 ans. Le filtre se fera donc sur la variable CLAGE en excluant (pour aller plus vite) les 12-17 ans

  • Tri à plat de la variable du filtre pour savoir le nombre d’enquêtés qui seront décomptés
freq(bns$CLAGE)
                  n    % val%
12-17 ans       208  5.1  5.1
18-24 ans       256  6.3  6.3
25-39 ans       686 16.9 16.9
40-59 ans      1399 34.4 34.4
60-69 ans       623 15.3 15.3
70 ans et plus  894 22.0 22.0

208 enquêtés entre 12 et 17 ans donc base finale (4066-208 = 3858)

  • Utilisation de la fonction filter sur la variable CLAGE
bns<-filter(bns, CLAGE != "12-17 ans")
  • Vérification que la nouvelle base ne comporte que 3858 lignes
dim(bns)
[1] 3858   47

2.5 Derniers “nettoyages”

Suppressions des modalités 12-17 ans et Elèves des variables CLAGE et DIPL

On enlève la modalité 12-17 ans à la variable CLAGE

bns$CLAGE <- bns$CLAGE |>
  fct_recode(
    NULL = "12-17 ans"
  )

On enlève la modalité Elèves dans DIPL

bns$DIPL <- bns$DIPL |>
  fct_recode(
    NULL = "Elèves"
  )

2.6 Constitution et sauvegarde de la base finale

Sélection finale des variables (en enlevant les anciennes)

bns <- select(bns, -INTERNET, - FREQTOT, - MICROPERSO, - MICROPRO, -TABLETTE, - SMARTPHO, - ENCEINTE, - CONNEC1, -CONNEC2, -CONNEC3, -CONNEC4, -CHAT2_1_CORR,-CHAT2_2_CORR,-AGE6FUZ, -SEXE,-PCS8EGO,-DIPL5,-AGGLO5)

Sauvegarde finale de la base

Après avoir réalisé tous ces premiers recodages, créations de nouvelles variables et éventuelles sélections de populations, il est important de sauvegarder la base qui sera ensuite utilisée pour les analyses

save(bns,file = "../DATA/bns.RData") 

3 ANALYSES DES DONNEES

3.1 Sorties brutes

3.1.1 Tris à plat (sorties systématisées)

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

3.1.1.1 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")

3.1.2 Tris croisés : 5 étapes

3.1.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

3.1.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

3.1.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

3.1.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)

3.1.2.5 Etape 5 : conservation de l’info en commentaire

Effet significatif (*) de l’âge** sur l’utilisation quotidienne d’internet

3.1.3 Croisement de la même variable avec d’autres facteurs explicatifs

3.1.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

3.1.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)

3.1.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)

3.1.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.2 Sorties tabulaires synthétiques

Prealable : installation et chargement de de nouvelles extensions gtsummary et gt

library(gtsummary)
library(gt)

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
)

Utilisation de la fonction tbl_summary {gtsummary} et de ses options

3.2.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
Tableau 1. Situation par rapport aux objets connectés
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.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
  )
Tableau 2. Les équipements numériques
Type d’équipement Pourcentage1
Smartphone 87
Ordinateur personnel 84
Tablette 50
Enceinte connectée 30
Ordinateur professionnel 27
1 N = 3858

3.2.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 
Tableau 3. Déterminants de l’utilisation quotidienne d’internet(%)
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

3.3 Quelques représentations graphiques

3.3.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"         

3.3.2 Diagramme à bandes (ggplot)

Représentations graphiques des variables catégorielles

3.3.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
  )

3.3.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")

3.3.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 

3.3.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)

3.3.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")