Le logiciel R est un langage très puissant orienté vers l’analyse statistique et traitement des données. Il est développé depuis une vingtaine d’années par un groupe de volontaires de différents pays. C’est un logiciel libre, disponible gratuitement pour Windows, Mac OS X et Linux. Il est à noter que le développement autour de R a été particulièrement actif ces dernières années. R est très utilisé dans le monde academique et dans l’industrie.
R regorge des developpeurs de talent, des packages assez interessants ont vu le jour recemment. Toute personne interessée en R peut trouver la documentation en ligne.
http://www.ehess.fr/fr/enseignement/enseignements/2014/ue/562/
alt text
L’objectif ce cpremier TP est de présenter comment réaliser des analyses statistiques et diverses opérations courantes (comme la manipulation de données ou la production de graphiques) avec R.Il est important de remarquer que cet atelier n’est pas un cours de statistiques. Nous supposons que vous avez déjà une connaissance des certains méthodes présentées ici. Si vous souhaitez des précisions théoriques/méthodologiques à propos d’un certain type d’analyses, nous vous conseillons de voir la doc !
Avant de commencer ce TP, il est nécessaire de s’assurer que le logiciel R est installé sur votre machine. Le logiciel R est gratuit et téléchargeable sur internet à l’adresse http://cran.r-project.org.
Pour une installation sous Windows, on se rendra sur cette page : http://cran.r-project.org/bin/windows/ base/ et l’on suivra le premier lien pour télécharger le programme d’installation. Une fois le programme d’installation lancé, il suffira d’installer R avec les options par défaut.
Pour Mac OS X, les fichiers d’installation sont disponibles à http://cran.r-project.org/bin/macosx/.
Une fois R correctement installé,vous pouvez également télécharger le logiciel RStudio (une interface de développement pour R) à l’adresse suivante : rendez-vous sur http://www.rstudio.com/products/rstudio/download/
Création d’un script R : Le logiciel R utilise des lignes de commandes. Il faut donc taper les commandes dans la console pour les exécuter. Plutôt que de saisir les commandes directement dans la console, on vous conseille de les enregistrer directement dans un script de commandes R, ce qui permet de reproduire les analyses ultérieurement. A chaque séance de TP créer un fichier scrip R pour enregistrer les commandes et codes.
Aide en ligne : R possède un système d’aide en ligne, incluant un moteur de recherche et un index des commandes associées. Pour accéder à l’aide pour n’importe quelle fonction, on utilise la commande . Le logiciel R ouvre une fenêtre avec les informations relatives à la fonction demandée.
Packages (commande library) : R dispose d’un certain nombre de packages de base qui sont installés lors de l’installation de R. Il est possible d’installer des packages additionnels. Le chargement d’un package s’effectue à l’aide de la commande , en indiquant le nom du package.
Doc sur initiation à R : A vous de regarder la doc ! Par exemple vous pouvez aller sur la site
http://www.math.univ-toulouse.fr/~besse/Wikistat/pdf/st-tutor2-R-init.pdf
Visualiser sur la console de R les commandes suivaNtes. Vous remarquerez que R est anglo-saxon. Les nombres sont donc saisies à l’anglaise, c’est-à-dire en utilisant le point ( . ) comme séparateur pour les décimales.
#Assignation
a <- 2 #(ou a=2)
a
## [1] 2
#Operations algebraiques
2*4 + 2^2 + sqrt(4) + exp(0) +log(1)
## [1] 15
#Création d'un vecteur
#La fonction c() combine des valeurs dans un vecteur
x1=c(10,16,12,11,14);x1
## [1] 10 16 12 11 14
#Quelques calcules simples : moyenne et ecart-type de x1
mean(x1); sd(x1)
## [1] 12.6
## [1] 2.408319
#un autre vecteur
x2=c(6,8,10,11,12.5)
#Combitation de deux vecteurs
x3=c(x1,x2);x3
## [1] 10.0 16.0 12.0 11.0 14.0 6.0 8.0 10.0 11.0 12.5
#Creation d'autres vecteurs :
#Suite de 3 nombres consécutifs (1 à 3)
1:3
## [1] 1 2 3
#A vous de jouer !
#Regarder l'aide. Taper sur la console help(rep) puis help(seq)
rep(1,times=5)
## [1] 1 1 1 1 1
rep(1:3,times=5)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
seq(from=1,to=5,by=0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq(from=1,to=5,length=10)
## [1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667
## [8] 4.111111 4.555556 5.000000
#Generation d'un vecetur de taille 100 selon une loi normale
#de moyenne 0 et écar-type 1 par defaut.
x=rnorm(100,mean=0,sd=1)
#A vous de jouer ! Taper help(rnorm) sur la console de R.
#Afficher x sur la console.
#Calculer la moyenne, la variance et l'ecart-type de x.
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 sociales et plus particulièrement le traitement d’enquêtes.
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
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 l’extension questionr3
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
Il est tout à fait possible de croiser trois variables ou plus. A vous de jouer !
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.
#Tableu de pourcentages lignes
lprop(tableau)
## sex
## minority H F Total
## Non 52.4 47.6 100.0
## Oui 61.5 38.5 100.0
## Ensemble 54.4 45.6 100.0
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%
Les profils colonnes (pourcentage en colonnes) s’obtiennent avec cprop.
#Tableu de pourcentages colonnes
cprop(tableau)
## sex
## minority H F Ensemble
## Non 75.2 81.5 78.1
## Oui 24.8 18.5 21.9
## Total 100.0 100.0 100.0
Il est important de remarquer qu’on peut personnaliser l’affichage de ces tableaux de profil lignes et profil colonnes à l’aide de différentes options, dont digits qui règle le nombre de décimales à afficher et percent qui indique si on souhaite ou non rajouter un symbole % dans chaque case du tableau. Cette personnalisation peut se faire directement au moment de la génération du tableau et dans ce cas elle sera utilisée par défaut. A vous de jouer !
Représentation graphique d’un tableau de contingence
On peut obtenir une représentation graphique synthétisant l’ensemble des résultats obtenus sous la forme d’un graphique en mosaïque grâce à la fonction mosaicplot. Ici chaque rectangle représente une case de tableau. Sa largeur correspond aux pourcentages en colonnes. Sa hauteur correspond aux pourcentages en lignes.
mosaicplot(t(tableau), data = Salaire, main = "Graphe en mosaïque")
Remarque : Les graphiques en mosaïque permettent notamment de représenter des tableaux croisés à 3 ou 4 dimensions, voire plus. La librarie vcd fournie une fonction mosaic fournissant plus d’options pour la création d’un graphique en mosaïque, permettant par exemple d’indiquer quelles variables doivent être affichées horizontalement ou verticalement, ou encore de colorier le contenu des rectangles en fonction d’une variable donnée. A vous de jouer !
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")
#Nuage de points et pleusiuers droités dans une même fênetre
plot(salbegin,salary,main="Nuage de points")
abline(2000,1.5,col="red",lwd=2)
abline(2000,1.9,col="blue",lwd=2)
abline(2000,2.5,col="green",lwd=2)
Graphiques plus complexes avec R (l’affichage est plus jolie)
qplot(data = Salaire, sex)
qplot(data = Salaire, minority)
ggplot(data = Salaire, aes(x=salary,y= ..density..))+geom_histogram(colour="white")
ggplot(data = Salaire, aes(x=salbegin,y= ..density..))+geom_histogram(colour="white")
ggplot(data = Salaire, aes(x=salary,y= ..density..))+geom_histogram(colour="white")+
geom_line(stat="density",col="red",size=1.2)
ggplot(data = Salaire, aes(x=salbegin,y= ..density..))+geom_histogram(colour="white")+
geom_line(stat="density",col="red",size=1.2)
ggplot(data = Salaire, aes(x=salbegin,y=salary)) +
geom_point()
ggplot(data = Salaire, aes(x=salbegin,y=salary)) + geom_point() +
geom_abline(intercept = 2000, slope = 1.5, col="red", lwd=1)+
geom_abline(intercept = 2500, slope = 1.9, col="blue", lwd=1)+
geom_abline(intercept = 5000, slope = 2.5, col="green", lwd=1)+
geom_abline(intercept = 10000, slope = 1.5, col="cyan", lwd=1)
A vous de jouer avec les graphiques !
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
pairs(Salaire[,1:5])