Exercice 1

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 :

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 

Les données

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 tri à plat et tableaux de contingence

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 univariés et bivariés

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