
Exemple de base de données individuelles pour R
Je présente dans cet article une procédure pour créer une base de données individuelles contenant un peu plus de 8000 individus à partir des fichiers issus de l’enquête Histoire de vie - Construction des identités menée par l’INSEE en 2003. Je m’inspire des transformations que Julien Barnier a apporté à ces données telles qu’elles sont visibles dans le package questionr. Je repars néanmoins ici de zéro à partir des fichiers originaux, afin de produire un échantillon de plus grande taille (celui-ci étant limité à 2000 individus dans le package questionr). Cet article est le préalable d’autres articles sur ce site qui montrent divers exemples de traitements avec R, puisque je me sers dans ces derniers des données dont la construction est présentée ici. Cet article est également utile pour toute personne qui voudrait créer une base de données individuelles sur R et adaptée aux sciences sociales à destination d’étudiant-es, pour s’exercer ou pour créer des scripts à diffuser sur internet. Un script directement exécutable est téléchargeable en fin d’article.
Import des données
Nous devons d’abord charger les données de l’enquête Histoire de vie de INSEE dans un objet R (ici nommé d). Pour ce faire, nous devons utiliser le package foreign pour importer les fichiers téléchargeables sur le site de l’INSEE, puisque ceux-ci sont au format dBase. La base de données est coupée en quatre fichiers, que nous réunissons avec la clé d$IDENT grâce à la fonction left_join du tidyverse. Nous sélectionnons pour finir quelques variables adaptées pour l’analyse en sciences sociales.
library(foreign)
library(tidyverse)
options(encoding = "UTF-8") # Je définis l'encodages des caractères en UTF-8
# Je charge les 4 fichiers dBase
hdv1 <- read.dbf("hdv1.dbf")
hdv2 <- read.dbf("hdv2.dbf")
hdv3 <- read.dbf("hdv3.dbf")
hdv4 <- read.dbf("hdv4.dbf")
# Je les joins avec la clé IDENT (voir doc du jeu de données)
d <- hdv1 %>%
left_join(hdv2, by = "IDENT") %>%
left_join(hdv3, by = "IDENT") %>%
left_join(hdv4, by = "IDENT") %>%
select(IDENT, POIDSF.x, POIDLOG.y, AGEE, SEXEE, NIVE2TE, NIVE2TCJ, OCCUPAE, QUALIFE, VCLSO, A8B, ASATIS, LMUS5, LLIRE4, LOIS18, LOIS17, LOIS14, LOIS3, LOIS8, LT1FREQ, LT2FREQ, LL1FREQ, LL2FREQ)
rm(list = c("hdv1", "hdv2", "hdv3", "hdv4")) # J'efface les 4 objets hdvx chargés
Recodage des variables
Nous recodons ensuite les modalités de ces variables et changeons leurs noms. Il s’agit principalement de changements d’appellation des variables et de leurs modalités. Il n’y a que les heures journalières consacrées à la lecture, les heures journalières à regarder la télévision et les catégories d’âge qui sont des variables transformées.
## Recodage de d$SEXEE
d$SEXEE <- fct_recode(d$SEXEE,
"Homme" = "1",
"Femme" = "2"
)
## Recodage de d$AGEE
d$AGEE_rec <- cut(d$AGEE,
include.lowest = FALSE,
right = FALSE,
dig.lab = 4,
breaks = c(17, 35, 50, 65, 97)
)
## Recodage de d$NIVE2TE
d$NIVE2TE <- fct_recode(d$NIVE2TE,
"Aucun ou primaire" = "00",
"Aucun ou primaire" = "03",
"Aucun ou primaire" = "04",
"Collège ou Lycée" = "15",
"Collège ou Lycée" = "17",
"Enseignement professionnel" = "20",
"Enseignement professionnel" = "30",
"Enseignement supérieur" = "40"
)
## Recodage de d$NIVE2TCJ
d$NIVE2TCJ <- fct_recode(d$NIVE2TCJ,
"Aucun ou primaire" = "00",
"Aucun ou primaire" = "03",
"Aucun ou primaire" = "04",
"Collège ou Lycée" = "15",
"Collège ou Lycée" = "17",
"Enseignement professionnel" = "20",
"Enseignement professionnel" = "30",
"Enseignement supérieur" = "40",
NULL = "99"
)
## Recodage de d$OCCUPAE
d$OCCUPAE <- fct_recode(d$OCCUPAE,
"Exerce une profession" = "1",
"Chômeur" = "2",
"Etudiant" = "3",
"Exerce une profession" = "4",
"Retraité" = "5",
"Retraité" = "6",
"Au foyer" = "7",
"Autre inactif" = "8"
)
## Recodage de d$QUALIFE
d$QUALIFE <- fct_recode(d$QUALIFE,
"Ouvrier specialise" = "1",
"Ouvrier qualifie" = "2",
"Technicien" = "3",
"Agent de maitrise" = "4",
"Cadre" = "5",
"Employe" = "6",
"Autre" = "7"
)
## Recodage de d$VCLSO
d$VCLSO <- fct_recode(d$VCLSO,
"Appartient à une classe sociale" = "1",
"N'appartient pas à une classe sociale" = "2",
NULL = "9"
)
## Recodage de d$A8B
d$A8B <- fct_recode(d$A8B,
"Plus important que le reste" = "1",
"Aussi important que le reste" = "2",
"Moins important que le reste" = "3",
"Peu important" = "4"
)
## Recodage de d$ASATIS
d$ASATIS <- fct_recode(d$ASATIS,
"Satisfaction" = "1",
"Insatisfaction" = "2",
"Equilibre" = "3"
)
## Recodage de d$LMUS5
d$LMUS5 <- fct_recode(d$LMUS5,
"Ecoute du Rap" = "1",
"N'écoute pas de rap" = "0"
)
## Recodage de d$LLIRE4
d$LLIRE4 <- fct_recode(d$LLIRE4,
"Lit des BD" = "1",
"Ne lit pas des BD" = "0"
)
## Recodage de d$LOIS18
d$LOIS18 <- fct_recode(d$LOIS18,
"Va à la pêche/chasse" = "1",
"Ne va pas à la pêche/chasse" = "0"
)
## Recodage de d$LOIS17
d$LOIS17 <- fct_recode(d$LOIS17,
"Fait la cuisine par plaisir" = "1",
"Ne fait pas la cuisine par plaisir" = "0"
)
## Recodage de d$LOIS14
d$LOIS14 <- fct_recode(d$LOIS14,
"Fait du bricolage" = "1",
"Ne fait pas du bricolage" = "0"
)
## Recodage de d$LOIS3
d$LOIS3 <- fct_recode(d$LOIS3,
"Va au cinéma" = "1",
"Ne va pas au cinéma" = "0"
)
## Recodage de d$LOIS8
d$LOIS8 <- fct_recode(d$LOIS8,
"Fait du sport" = "1",
"Ne fait pas de sport" = "0"
)
## Création des heures journalières à regarder la télévision
d$LT1FREQ <- as.numeric(d$LT1FREQ)
d$LT1FREQ_JOUR <- case_when(
d$LT2FREQ == 1 & !is.na(d$LT1FREQ) ~ d$LT1FREQ,
d$LT2FREQ == 2 & !is.na(d$LT1FREQ) ~ d$LT1FREQ/7,
d$LT2FREQ == 3 & !is.na(d$LT1FREQ) ~ d$LT1FREQ/30.5
)
## Création des heures journalières de lecture
d$LL1FREQ <- as.numeric(d$LL1FREQ)
d$LL1FREQ_JOUR <- case_when(
d$LL2FREQ == 1 & !is.na(d$LL1FREQ) ~ d$LL1FREQ,
d$LL2FREQ == 2 & !is.na(d$LL1FREQ) ~ d$LL1FREQ/7,
d$LL2FREQ == 3 & !is.na(d$LL1FREQ) ~ d$LL1FREQ/30.5
)
## Je renomme les variables et ne sélectionne pas celles qui ont servi à la construction des variables définitives
d <- rename(d, id = IDENT, poidsf = POIDSF.x, poidlog = POIDLOG.y, age = AGEE, age_rec = AGEE_rec, sexe = SEXEE, nivetud = NIVE2TE, nivetud_cj = NIVE2TCJ, occup = OCCUPAE, qualif = QUALIFE, clso = VCLSO, trav.imp = A8B, trav.satisf = ASATIS, rap.hiphop = LMUS5, lecture.bd = LLIRE4, peche.chasse = LOIS18, cuisine = LOIS17, bricolage = LOIS14, cinema = LOIS3, sport = LOIS8, heures.tv = LT1FREQ_JOUR, heures.lecture = LL1FREQ_JOUR) %>%
select(-LT1FREQ, -LT2FREQ, -LL1FREQ, -LL2FREQ)
Synthèse des variables
La base de données est ainsi prête et formatée dans l’objet d. Dans le tableau suivant, on trouve un récapitulatif des variables retenues, leurs noms actuels tels que recodés, leurs noms originaux dans les fichiers de l’INSEE (notamment pour voir quelles sont les questions qui en sont à l’origine dans la documentation) et leurs différentes modalités.
Nom actuel | Type | Nom original | Modalités |
---|---|---|---|
id | factor | IDENT | Identifiant unique |
poidsf | numeric | POIDSF | Variable de pondération individuelle |
poidlog | numeric | POIDLOG | Pondération individuelle relative (poidsf divisé par moyenne de poidsf) |
age | integer | AGEE | Âge exact en années |
sexe | factor | SEXEE | 1. Homme
2. Femme |
nivetud | factor | NIVE2TE | 1. Aucun ou primaire
2. Collège ou Lycée 3. Enseignement professionnel 4. Enseignement supérieur |
nivetud_cj | factor | NIVE2TCJ | 1. Aucun ou primaire
2. Collège ou Lycée 3. Enseignement professionnel 4. Enseignement supérieur |
occup | factor | OCCUPAE | 1. Exerce une profession
2. Chômeur 3. Etudiant 4. Retraité 5. Au foyer 6. Autre inactif |
qualif | factor | QUALIFE | 1. Ouvrier specialise
2. Ouvrier qualifie 3. Technicien 4. Agent de maitrise 5. Cadre 6. Employe 7. Autre |
clso | factor | VCLSO | 1. Appartient à une classe sociale
2. N’appartient pas à une classe sociale |
trav.imp | factor | A8B | 1. Plus important que le reste
2. Aussi important que le reste 3. Moins important que le reste 4. Peu important |
trav.satisf | factor | ASATIS | 1. Satisfaction
2. Insatisfaction 3. Equilibre |
rap.hiphop | factor | LMUS5 | 1. N’écoute pas de rap
2. Ecoute du Rap |
lecture.bd | factor | LLIRE4 | 1. Ne lit pas des BD
2. Lit des BD |
peche.chasse | factor | LOIS18 | 1. Ne va pas à la pêche/chasse
2. Va à la pêche/chasse |
cuisine | factor | LOIS17 | 1. Ne fait pas la cuisine par plaisir
2. Fait la cuisine par plaisir |
bricolage | factor | LOIS14 | 1. Ne fait pas du bricolage
2. Fait du bricolage |
cinema | factor | LOIS3 | 1. Ne va pas au cinéma
2. Va au cinéma |
sport | factor | LOIS8 | 1. Ne fait pas de sport
2. Fait du sport |
age_rec | factor | Variable créée à partir de AGEE | 1. [17,35)
2. [35,50) 3. [50,65) 4. [65,97) |
heures.tv | numeric | Variable créée à partir de LT1FREQ & LT2FREQ | Heures passées par jour à regarder la télévision |
heures.lecture | numeric | Variable créée à partir de LL1FREQ & LL2FREQ | Heures passées par jour à la lecture |