install.packages("questionr")
library(questionr)
Premières analyses de données
L3 économie-finance
Premier travail avec les données
Données d’exemple
Nous utiliserons dans ce cours des données issues de l’INSEE : la base “Histoires de vie 2003”
La base est disponible dans la librairie questionr
. Il faut donc d’abord installer la librairie questionr
, puis la charger à l’aide de la commande library(questionr)
.
Pour dire à R de l’utiliser, on utilise la fonction data
:
data(hdv2003)
Visualiser les données
Vous pouvez voir dans l’onglet “Environment” que la base de donnée comprend 2000 observations, et 21 variables.
Si vous souhaitez voir le contenu de la base, vous pouvez utiliser la commande View()
:
View(hdv2003)
Cette base de donnée est un data.frame
: un tableau de valeurs
Assignation
Un data.frame
est une valeur comme une autre, on peut donc l’assigner :
<- hdv2003 d
Exploration des données
Structure du tableau
Un tableau étant un objet comme un autre, on peut lui appliquer des fonctions. Par exemple, nrow()
et ncol()
retournent le nombre de lignes et de colonnes du tableau. dim()
renvoie les deux :
nrow(d)
[1] 2000
ncol(d)
[1] 20
dim(d)
[1] 2000 20
Nom des colonnes
La fonction names()
retourne les noms des colonnes du tableau, c’est-à-dire la liste des variables.
names(d)
[1] "id" "age" "sexe" "nivetud"
[5] "poids" "occup" "qualif" "freres.soeurs"
[9] "clso" "relig" "trav.imp" "trav.satisf"
[13] "hard.rock" "lecture.bd" "peche.chasse" "cuisine"
[17] "bricol" "cinema" "sport" "heures.tv"
Enfin, la fonction str()
renvoie un descriptif plus détaillé de la structure du tableau. Elle liste les différentes variables, indique leur type et affiche les premières valeurs.
str(d)
'data.frame': 2000 obs. of 20 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ age : int 28 23 59 34 71 35 60 47 20 28 ...
$ sexe : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
$ nivetud : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ...
$ poids : num 2634 9738 3994 5732 4329 ...
$ occup : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
$ qualif : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
$ freres.soeurs: int 8 2 2 1 0 5 1 5 4 2 ...
$ clso : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
$ relig : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
$ trav.imp : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
$ trav.satisf : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
$ hard.rock : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
$ lecture.bd : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
$ peche.chasse : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
$ cuisine : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
$ bricol : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
$ cinema : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
$ sport : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
$ heures.tv : num 0 1 0 2 3 2 2.9 1 2 2 ...
Accéder aux variables
On se réfère aux variables (au sein du tableau) à l’aide de l’opérateur $
, qui permet d’accéder aux colonnes du tableau. On utilisera la syntaxe nom_de_la_base$nom_de_la_variable
pour désigner une variable particulière d’une base de données.
Par exemple, on peut utiliser la fonction head()
pour afficher les premières valeurs de la variable age
de la base stockée dans l’objet hdv2003
.
head(d$age)
[1] 28 23 59 34 71 35
head(d$age, 10)
[1] 28 23 59 34 71 35 60 47 20 28
Le deuxième argument, permet d’indiquer le nombre de valeurs à afficher.
Création de variables
On peut aussi utiliser l’opérateur $
pour créer une nouvelle variable dans notre base : pour cela, il suffit de lui assigner une valeur.
Par exemple, la variable heures.tv
contient le nombre d’heures passées quotidiennement devant la télé.
head(d$heures.tv)
[1] 0 1 0 2 3 2
On peut vouloir créer une nouvelle variable dans notre tableau qui contienne la même durée convertie en minutes.
On va donc créer une nouvelle variables minutes.tv
de la manière suivante :
$minutes.tv <- d$heures.tv * 60 d
On peut alors constater, qu’une nouvelle variable (une nouvelle colonne) a bien été ajoutée à la base de données.
head(d$minutes.tv)
[1] 0 60 0 120 180 120
Analyse univariée
Variable quantitative
Une variable quantitative est une variable de type numérique (un nombre) qui peut prendre un grand nombre de valeurs. On en a plusieurs dans notre jeu de données, notamment l’âge (variable age
) ou le nombre d’heures passées devant la télé (heures.tv
).
Indicateurs simples de centralités
On peut obtenir (et, si on le souhaite, sauver dans un objet) les valeurs de chaque élément avec les fonction min()
, max()
, median()
, mean()
et quantile()
:
min(d$age)
[1] 18
max(d$age)
[1] 97
mean(d$age)
[1] 48.157
median(d$age)
[1] 48
Indicateurs de dispersion
Les indicateurs de dispersion permettent de mesurer si les valeurs sont plutôt regroupées ou au contraire plutôt dispersées.
L’indicateur le plus simple est l’étendue de la distribution, qui décrit l’écart maximal observé entre les observations :
max(d$age) - min(d$age)
[1] 79
Les indicateurs de dispersion les plus utilisés sont la variance ou, de manière équivalente, l’écart-type. On obtient la première avec la fonction var
, et le second avec sd
(abréviation de standard deviation).
var(d$age)
[1] 287.0249
sd(d$age)
[1] 16.94181
Quartiles
Une autre manière de mesurer la dispersion est de calculer les quartiles :
- le premier quartile est la valeur pour laquelle on a 25% des observations en dessous et 75% au dessus ;
- le deuxième quartile est la valeur pour laquelle on a 50% des observations en dessous et 50% au dessus (c’est donc la médiane) ;
- le troisième quartile est la valeur pour laquelle on a 75% des observations en dessous et 25% au dessus.
On peut les calculer avec la fonction quantile
:
## Premier quartile
quantile(d$age, prob = 0.25)
25%
35
## Troisième quartile
quantile(d$age, prob = 0.75)
75%
60
quantile
prend deux arguments principaux : le vecteur dont on veut calculer le quantile, et un argument prob
qui indique quel quantile on souhaite obtenir. prob
prend une valeur entre 0 et 1 : 0.5 est la médiane, 0.25 le premier quartile, 0.1 le premier décile, etc.
Indicateurs numériques
Pour obtenir un résumé concis d’une variable, on peut utiliser la commande summary()
:
summary(d$heures.tv)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.000 1.000 2.000 2.247 3.000 12.000 5
summary(d$age)
Min. 1st Qu. Median Mean 3rd Qu. Max.
18.00 35.00 48.00 48.16 60.00 97.00
summary()
donne le minimum, le maximum, la moyenne, les premier second (médiane) et troisième quartile de la distribution. La dernière valeur donne, s’il y en a, le nombre de valeurs manquantes (NA
) pour la variable.
Valeurs manquantes
Si la variable examinée contient des valeurs manquante, il convient d’inclure l’option na.rm=TRUE
dans l’appel de la fonction :
mean(d$heures.tv)
[1] NA
mean(d$heures.tv, na.rm=TRUE)
[1] 2.246566
Variables qualitatives
Variable qualitative
Une variable qualitative est une variable qui ne peut prendre qu’un nombre limité de valeurs, appelées modalités. Dans notre jeu de données on trouvera par exemple le sexe (sexe
), le niveau d’études (nivetud
), la catégorie socio-professionnelle (qualif
)…
À noter qu’une variable qualitative peut tout-à-fait être numérique, et que certaines variables peuvent être traitées soit comme quantitatives, soit comme qualitatives : c’est le cas par exemple du nombre d’enfants ou du nombre de frères et sœurs.
Tri à plat
L’outil le plus utilisé pour représenter la répartition des valeurs d’une variable qualitative est le tri à plat : il s’agit simplement de compter, pour chacune des valeurs possibles de la variable (pour chacune des modalités), le nombre d’observations ayant cette valeur. Un tri à plat s’obtient sous R à l’aide de la fonction table
.
table(d$sexe)
Homme Femme
899 1101
Ce tableau nous indique donc que parmi nos enquêtés on trouve 899 hommes et 1101 femmes.
table(d$qualif)
Ouvrier specialise Ouvrier qualifie Technicien
203 292 86
Profession intermediaire Cadre Employe
160 260 594
Autre
58
Tri
Un tableau de ce type peut être affiché ou stocké dans un objet, et on peut à son tour lui appliquer des fonctions. Par exemple, la fonction sort
permet de trier le tableau selon la valeur de l’effectif.
<- table(d$qualif)
tab sort(tab)
Autre Technicien Profession intermediaire
58 86 160
Ouvrier specialise Cadre Ouvrier qualifie
203 260 292
Employe
594
Attention, par défaut la fonction table
n’affiche pas les valeurs manquantes (NA
). Si on souhaite les inclure il faut utiliser l’argument useNA = "always"
, soit : table(d$qualif, useNA = "always")
.
Summary
À noter qu’on peut aussi appliquer summary
à une variable qualitative. Le résultat est également le tri à plat de la variable, avec en plus le nombre de valeurs manquantes éventuelles.
summary(d$qualif)
Ouvrier specialise Ouvrier qualifie Technicien
203 292 86
Profession intermediaire Cadre Employe
160 260 594
Autre NA's
58 347
Analyse bivariée
Croisement de deux variables qualitatives
Faire une analyse bivariée, c’est étudier la relation entre deux variables : sont-elles liées ? les valeurs de l’une influencent-elles les valeurs de l’autre ? ou sont-elles au contraire indépendantes ?
On étudie les corrélations entre variables.
Tableaux croisés
Quand on veut croiser deux variables qualitatives, on fait un tableau croisé. Comme pour un tri à plat ceci s’obtient avec la fonction table
de R, mais à laquelle on passe cette fois deux variables en argument. Par exemple, si on veut croiser la catégorie socio-professionnelle et le sexe des enquêtés :
table(d$qualif, d$sexe)
Homme Femme
Ouvrier specialise 96 107
Ouvrier qualifie 229 63
Technicien 66 20
Profession intermediaire 88 72
Cadre 145 115
Employe 96 498
Autre 21 37
Pour pouvoir interpréter ce tableau on doit passer du tableau en effectifs au tableau en pourcentages ligne ou colonne. Pour cela, on peut utiliser les fonctions lprop
et cprop
de l’extension questionr
, qu’on applique au tableau croisé précédent.
Pour calculer les pourcentages ligne :
<- table(d$qualif, d$sexe)
tab lprop(tab)
Homme Femme Total
Ouvrier specialise 47.3 52.7 100.0
Ouvrier qualifie 78.4 21.6 100.0
Technicien 76.7 23.3 100.0
Profession intermediaire 55.0 45.0 100.0
Cadre 55.8 44.2 100.0
Employe 16.2 83.8 100.0
Autre 36.2 63.8 100.0
All 44.8 55.2 100.0
Et pour les pourcentages colonne :
cprop(tab)
Homme Femme All
Ouvrier specialise 13.0 11.7 12.3
Ouvrier qualifie 30.9 6.9 17.7
Technicien 8.9 2.2 5.2
Profession intermediaire 11.9 7.9 9.7
Cadre 19.6 12.6 15.7
Employe 13.0 54.6 35.9
Autre 2.8 4.1 3.5
Total 100.0 100.0 100.0