Cet exercice porte sur les données observées sur un échantillon de 474 employés tirés au sort dans une entreprise canadienne. Les variables étudiées ici sont les suivantes :
salary : salaire brut actuel en $ par an
salbegin : salaire de départ en $ par an
minority : appartenance à une minorité (Non, Oui)
jobtime : nombre de mois depuis l’entrée dans l’entreprise
prevexp : nombre de mois de travail avant l’entrée dans l’entreprise
educ : nombre d’années d’étude
sex : sexe
Libraries nécessaire
Dans cet attelier on utilisera beaucoup le package dplyr. Ce package est plutôt indiqué dans la manipulation des données, surtout de grande taille. Ce package dispose des fonctions assez interessantes pour la manipulation des données comme filter, select, mutate, et des fonctions pour la fusion des bases des données. On utilisera ces fonctions au fur et à messure de cettes series de TP.
Le package questionr dispose des fonctions utiles pour pour la manipulation des tableaux en sciences humaines et sociales.
library(dplyr) #dplyr ne s'utilise qu'avec des dataframes
library(questionr) # pour des tableaux
library(ggfortify) # pour des plots
library(ggplot2) # très utilisé dans les représentations grahiques sophistiquées
library(tidyverse) # plusieurs libraries
Lecture des données
Salaire= read.table('salaires.txt',header=TRUE)
attach(Salaire)
On peut lister les noms des variables d’un tableau de données à l’aide de la fonction names :
names(Salaire)
## [1] "salary" "salbegin" "jobtime" "prevexp" "educ" "minority"
## [7] "sex"
Il faut maintenant bien déterminer la nature des variables. Certains fonctions de R sont ici très utiles.
Visualisation des données
Tout d’abord, jetons un apercu des données grace à la fonction glimpse de la librarie dplyr. Vous pouvez utiliser également la fonction str. Avec cettes fonctions on voit rapidement si les variables sont quantitatives ou qualitatives. A vous de choisir votre fonction préferée.
glimpse(Salaire)
## Observations: 474
## Variables: 7
## $ salary <int> 57000, 40200, 21450, 21900, 45000, 32100, 36000, 2190...
## $ salbegin <int> 27000, 18750, 12000, 13200, 21000, 13500, 18750, 9750...
## $ jobtime <int> 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 9...
## $ prevexp <int> 144, 36, 381, 190, 138, 67, 114, 0, 115, 244, 143, 26...
## $ educ <int> 15, 16, 12, 8, 15, 15, 15, 12, 15, 12, 16, 8, 15, 15,...
## $ minority <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,...
## $ sex <int> 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0,...
str(Salaire)
## 'data.frame': 474 obs. of 7 variables:
## $ salary : int 57000 40200 21450 21900 45000 32100 36000 21900 27900 24000 ...
## $ salbegin: int 27000 18750 12000 13200 21000 13500 18750 9750 12750 13500 ...
## $ jobtime : int 98 98 98 98 98 98 98 98 98 98 ...
## $ prevexp : int 144 36 381 190 138 67 114 0 115 244 ...
## $ educ : int 15 16 12 8 15 15 15 12 15 12 ...
## $ minority: int 0 0 0 0 0 0 0 0 0 0 ...
## $ sex : int 0 0 1 1 0 0 0 1 1 1 ...
Que peut-on remarquer sur les variables ?
head(Salaire)
## salary salbegin jobtime prevexp educ minority sex
## 1 57000 27000 98 144 15 0 0
## 2 40200 18750 98 36 16 0 0
## 3 21450 12000 98 381 12 0 1
## 4 21900 13200 98 190 8 0 1
## 5 45000 21000 98 138 15 0 0
## 6 32100 13500 98 67 15 0 0
Résumés numériques
summary(Salaire)
## salary salbegin jobtime prevexp
## Min. : 15750 Min. : 9000 Min. :63.00 Min. : 0.00
## 1st Qu.: 24000 1st Qu.:12488 1st Qu.:72.00 1st Qu.: 19.25
## Median : 28875 Median :15000 Median :81.00 Median : 55.00
## Mean : 34420 Mean :17016 Mean :81.11 Mean : 95.86
## 3rd Qu.: 36938 3rd Qu.:17490 3rd Qu.:90.00 3rd Qu.:138.75
## Max. :135000 Max. :79980 Max. :98.00 Max. :476.00
## educ minority sex
## Min. : 8.00 Min. :0.0000 Min. :0.0000
## 1st Qu.:12.00 1st Qu.:0.0000 1st Qu.:0.0000
## Median :12.00 Median :0.0000 Median :0.0000
## Mean :13.49 Mean :0.2194 Mean :0.4557
## 3rd Qu.:15.00 3rd Qu.:0.0000 3rd Qu.:1.0000
## Max. :21.00 Max. :1.0000 Max. :1.0000
Codage
Le recodage de variables est une opération extrêmement fréquente lors du traitement d’enquête.
Salaire$minority <- factor(minority,labels=c("Non","Oui"))
Salaire$sex <- factor(sex,labels=c("H","F"))
attach(Salaire)
Re-regardons les résumés numériques. Que peut-on remarquer ?
summary(Salaire)
## salary salbegin jobtime prevexp
## Min. : 15750 Min. : 9000 Min. :63.00 Min. : 0.00
## 1st Qu.: 24000 1st Qu.:12488 1st Qu.:72.00 1st Qu.: 19.25
## Median : 28875 Median :15000 Median :81.00 Median : 55.00
## Mean : 34420 Mean :17016 Mean :81.11 Mean : 95.86
## 3rd Qu.: 36938 3rd Qu.:17490 3rd Qu.:90.00 3rd Qu.:138.75
## Max. :135000 Max. :79980 Max. :98.00 Max. :476.00
## educ minority sex
## Min. : 8.00 Non:370 H:258
## 1st Qu.:12.00 Oui:104 F:216
## Median :12.00
## Mean :13.49
## 3rd Qu.:15.00
## Max. :21.00
Tableau d’une varible qualitative (tri à plat)
La fonction la plus utilisée pour le traitement et l’analyse des variables qualitatives (variable prenant ses valeurs dans un ensemble de modalités) est sans aucun doute la fonction table, qui donne les effectifs de chaque modalité de la variable, ce qu’on appelle un tri à plat.
table(sex)
## sex
## H F
## 258 216
Pour obtenir un tableau avec la répartition en pourcentages, on peut utiliser la fonction freq de la librarie questionr
freq(sex, cum = TRUE, total = TRUE, sort = "inc",digits = 2, exclude = NA)
## n % %cum
## F 216 45.57 45.57
## H 258 54.43 100.00
## Total 474 100.00 100.00
Tableau de deux variables (tableu croisé)
Le tableau croisé des deux variables s’obtient de la manière suivante
tableau <- table(minority,sex); tableau
## sex
## minority H F
## Non 194 176
## Oui 64 40
La librarie questionr fournit des fonctions permettant de calculer facilement les profils lignes (pourcentage en lignes), colonnes et totaux d’un tableau croisé (en pourcentage). Les profils lignes s’obtiennent avec la fonction lprop . Celle-ci s’applique au tableau croisé généré par la fonction table.
lprop(tableau,digits = 2, percent = TRUE)
## sex
## minority H F Total
## Non 52.43% 47.57% 100.00%
## Oui 61.54% 38.46% 100.00%
## Ensemble 54.43% 45.57% 100.00%
Graphiques simples avec R
#Diagramme en Tuyaux d'orgue
barplot(table(sex))
barplot(table(minority))
#Boites à moustaches
boxplot(salary,col = grey(0.8), main="Boîte à moustache de la variable salary")
#Boites à moustaches paralleles (2 variables)
boxplot(salary ~ sex,col = grey(0.8),main="Boîte à moustache de la variable salary en fonction du sexe")
#Histogramme
hist(salary,col = grey(0.8),probability = T,main="Histogramme de la variable salary")
#Histogramme et densité estimée dans une même fênetre
hist(salary,col = grey(0.8),probability = T,main="Histogramme et densité estimée de la variable salary ")
ptx = seq(min(salary),max(salary), length=100)
lines(ptx, dnorm(ptx, mean=mean(salary), sd=sd(salary)),lty=1,lwd=2,col="red")
lines(density(salary), col='blue',lty=2, lwd=3)
legend(par('usr')[2], par('usr')[4], xjust=1,
c('loi estimé', 'loi theorique'),
lwd=2, lty=c(2,1),
col=c('blue','red'))
#Nuage de points
plot(salbegin,salary,main="Nuage de points")
Coefficient de correlation entre deux variables
cor(salary,salbegin)
## [1] 0.8801175
Matrice de correlation
cor(Salaire[,1:5])
## salary salbegin jobtime prevexp educ
## salary 1.00000000 0.88011747 0.084092267 -0.097466926 0.66055891
## salbegin 0.88011747 1.00000000 -0.019753475 0.045135627 0.63319565
## jobtime 0.08409227 -0.01975347 1.000000000 0.002978134 0.04737878
## prevexp -0.09746693 0.04513563 0.002978134 1.000000000 -0.25235252
## educ 0.66055891 0.63319565 0.047378777 -0.252352521 1.00000000
Graphiques plus complexes avec R (l’affichage est plus joli)
On verra ca après … si vous êtes motivés