2+2[1] 4
Ce script est une prise en main du logiciel R, via l’interface RStudio
Avant de démarrer :
Puis créer un projet RStudio à partir de ce répertoire existant (QUANTI)
Tout commentaire doit être précédé d’un #
Structurer le script en titrant avec les —-
Les quatre cadrans principaux :
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
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<-2Calcul 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-agesAffichage 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
Valeur minimale (min)
min(ages)[1] 19
min(genre)[1] "femme"
Valeur maximale (max)
max(ages)[1] 21
max(genre)[1] "homme"
Valeurs minimale et maximale
range(annais)[1] 2004 2006
range(ages)[1] 19 21
Quelques indicateurs sur les variables numériques
mean(ages) [1] 19.75
median(ages) [1] 20
summary(ages) Min. 1st Qu. Median Mean 3rd Qu. Max.
19.00 19.00 20.00 19.75 20.00 21.00
Nouvelles fonctionnalités utiles aux différentes étapes de préparation, d’analyse et de valorisation
Deux étapes :
install.packages(“tidyverse”)
library(tidyverse)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
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
bn1 <- read_delim("../DATA/barometre-du-numerique-2024.csv",
delim = ";", escape_double = FALSE, locale = locale(),
trim_ws = TRUE)Exemple 2 : fichier .xls
library(readxl)bn2 <- read_excel("../DATA/barometre-du-numerique-2024.xlsx")View(bn2) dim(bn2) [1] 4066 236
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"
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
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
Installation et chargement d’une nouvelle extension questionr
library(questionr)load("../DATA/bns.RData")!! Astuce : il est également possible de le faire en cliquant sur le fichier dans la fenêtre Fichiers (bas à droite)
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
Pour chaque variable catégorielle, il faudra donc procéder en trois étapes :
!! Nota Bene : il est important de créer une nouvelle variable (nouveau nom) afin de ne pas écraser la variable initiale brute
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
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"
)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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
Création d’une nouvelle variable à partir de plusieurs variables existantes
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 :
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
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)
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
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)
bns<-filter(bns, CLAGE != "12-17 ans")dim(bns)[1] 3858 47
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"
)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") 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 :
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
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")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
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
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
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² :
Effet significatif (*) de l’âge** sur l’utilisation quotidienne d’internet
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
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)
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)
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)
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
conn <- select (bns, CONN_SANTE, CONN_SECURITE, CONN_DOMOTIQUE, CONN_MENAGER) # Sélection des variables du tableau dans un objet sur lequel on appliquera ensuite la fonction tbl_summary
conn %>%
tbl_summary(
statistic = everything() ~ "{p}", # Choix de la statistique (pourcentage)
missing = "no", # N'affiche pas les valeurs manquantes
label = list( # Intitulés plus explicites des variables
CONN_SANTE ~ "la santé",
CONN_SECURITE ~ "la sécurité",
CONN_DOMOTIQUE ~ "la domotique",
CONN_MENAGER ~ "l'électroménager"
)
) %>%
bold_labels() %>% # Met en gras les labels
modify_header(
label ~ "**Objet connecté relatif à**", # Modifie l'intitulé de la colonne Characteristic
stat_0 ~ "**Pourcentage**" # Modifie l'intitulé de la colonne N=
) %>%
modify_caption("**Tableau 1. Situation par rapport aux objets connectés**") %>%
modify_footnote(everything() ~ NA) %>% # Pour supprimer les notes automatiques
modify_footnote(
stat_0 ~ paste0("N = ", nrow(conn)), # Ajout d'une note avec l'effectif total
label ~ "Quelle est votre situation par rapport aux objets connectés relatifs à ?" # Ajout d'une 2ème note qui explicite la question posée
) %>%
as_gt() # Pour un affichage conforme dans le Viewer et en tant qu'image| Objet connecté relatif à1 | Pourcentage2 |
|---|---|
| la santé | |
| Vous en possédez déjà | 28 |
| Vous en utiliserez probablement un à l'avenir | 18 |
| Vous n'en utiliserez probablement pas à l'avenir | 54 |
| la sécurité | |
| Vous en possédez déjà | 23 |
| Vous en utiliserez probablement un à l'avenir | 27 |
| Vous n'en utiliserez probablement pas à l'avenir | 50 |
| la domotique | |
| Vous en possédez déjà | 20 |
| Vous en utiliserez probablement un à l'avenir | 26 |
| Vous n'en utiliserez probablement pas à l'avenir | 54 |
| l'électroménager | |
| Vous en possédez déjà | 17 |
| Vous en utiliserez probablement un à l'avenir | 22 |
| Vous n'en utiliserez probablement pas à l'avenir | 60 |
| 1 Quelle est votre situation par rapport aux objets connectés relatifs à ? | |
| 2 N = 3858 | |
Toutes les variables sont dichotomiques ==> affichage d’une seule modalité (car les deux modalités sont complémentaires l’une de l’autre)
equip <- select (bns, SMARTPHO_f, ORDIPERSO_r, TAB, ENCEINTE_f, ORDIPRO_r) # Selection des variables du tableau dans un nouvel objet sur lequel on appliquera ensuite la fonction tb_summary
equip %>%
tbl_summary(
type = everything() ~ "dichotomous",
value = everything() ~ "Oui", # modalité retenue : uniquement les oui
statistic = everything() ~ "{p}", # on affiche la proportion en %
missing = "no", # pas d'affichage des NA
label = list(
SMARTPHO_f ~ "Smartphone",
ORDIPERSO_r ~ "Ordinateur personnel",
TAB ~ "Tablette",
ENCEINTE_f ~ "Enceinte connectée",
ORDIPRO_r ~ "Ordinateur professionnel"
)
) %>%
modify_header(
label ~ "**Type d'équipement**", # Pour afficher Equipement plutôt que Caractéristique
stat_0 ~ "**Pourcentage**" # Pour afficher Pourcentage plutôt que N=4 066
) %>%
modify_caption("**Tableau 2. Les équipements numériques**") %>%
modify_footnote(everything() ~ NA) %>% # Pour supprimer les notes automatiques
modify_footnote(
update = list(
stat_0 ~ paste0("N = ", nrow(equip))) # Ajout d'une note avec l'effectif total
)| Type d’équipement | Pourcentage1 |
|---|---|
| Smartphone | 87 |
| Ordinateur personnel | 84 |
| Tablette | 50 |
| Enceinte connectée | 30 |
| Ordinateur professionnel | 27 |
| 1 N = 3858 | |
tlj <- select(bns, utiltlj, CLAGE, GENRE, PCS, DIPL, AGGLO)
tlj %>%
tbl_summary(
by = utiltlj, # Variable d'intérêt ou variable de tri
percent = "row", # Calcul des % lignes
missing = "no", # Pas d'affichage des NA (non pris en compte dans le calcul des %)
statistic = everything() ~ "{p}", # Affichage des % uniquement
digits = everything() ~ 0, # pas de décimale
label = list( # Renomme les noms des modalités
CLAGE ~ "Classes d'âges",
GENRE ~ "Genre",
PCS ~ "Catégorie socio-professionnelle",
DIPL ~ "Diplôme",
AGGLO ~ "Taille de l'agglomération")
) %>%
add_overall(last=TRUE) %>% # Ajoute la colonne Total (=100%)
modify_header(
label ~ "**Facteur explicatif**", # Affiche Facteur explicatif au lieu de caractéristique (par défaut)
stat_1 ~ "Utilisation quotidienne d'internet (81%)", # Intitulé de la stat1 (modalité 1 de la variable d'intérêt)
stat_2 ~ "Utilisation non quotidienne d'internet (19%)", # Intitulé de la stat2 (modalité 1 de la variable d'intérêt)
stat_0 ~ "Total (100%)" # Intitulé de la stat_0 (colonne Total)
) %>%
add_p () %>% # Affichage des p-value (par défaut, test du Khi²)
bold_labels () %>% # Mise en gras des labels des variables
modify_caption("**Tableau 3. Déterminants de l'utilisation quotidienne d'internet(%)**") %>% # Titre du tableau
modify_footnote(everything() ~ NA) %>% # Pour supprimer les notes automatiques
modify_footnote(
p.value ~ "Test du Khi² d'indépendance") # Pour expliciter le test utilisé pour les p-values | Facteur explicatif | Utilisation quotidienne d’internet (81%) | Utilisation non quotidienne d’internet (19%) | Total (100%) | p-valeur1 |
|---|---|---|---|---|
| Classes d'âges | <0,001 | |||
| 18-24 ans | 70 | 30 | 100 | |
| 25-39 ans | 83 | 17 | 100 | |
| 40-59 ans | 90 | 10 | 100 | |
| 60-69 ans | 87 | 13 | 100 | |
| 70 ans et plus | 63 | 37 | 100 | |
| Genre | 0,3 | |||
| Femme | 80 | 20 | 100 | |
| Homme | 82 | 18 | 100 | |
| Catégorie socio-professionnelle | <0,001 | |||
| Agri. exploitant, artisan·e, commerçant·e et chef·fe d'entreprise | 85 | 15 | 100 | |
| Cadre et profession intellectuelle supérieure | 87 | 13 | 100 | |
| Profession Intermédiaire | 91 | 9 | 100 | |
| Employé·e | 88 | 12 | 100 | |
| Ouvrier·ère | 83 | 17 | 100 | |
| Personne au foyer | 88 | 12 | 100 | |
| Autre inactif·ve | 71 | 29 | 100 | |
| Retraité·e | 72 | 28 | 100 | |
| Diplôme | <0,001 | |||
| Non diplômé | 49 | 51 | 100 | |
| BEPC | 80 | 20 | 100 | |
| BAC | 85 | 15 | 100 | |
| Diplômé du supérieur | 88 | 12 | 100 | |
| Taille de l'agglomération | <0,001 | |||
| Communes rurales | 73 | 27 | 100 | |
| 2 000 à 19 999 habitants | 81 | 19 | 100 | |
| 20 000 à 99 999 habitants | 83 | 17 | 100 | |
| 100 000 habitants et plus | 85 | 15 | 100 | |
| Agglomération parisienne | 84 | 16 | 100 | |
| 1 Test du Khi² d’indépendance | ||||
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"
Représentations graphiques des variables catégorielles
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
)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")Représentations graphiques des variables numériques
Exemples : HR_PHONE et HR_ECRAN2
Vérification du type et recodages des NA
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
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
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)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")