R basics

Minimum vital pour traiter des données avec R

A télécharger

Importation des données

On peut importer des données EXCEL à l'aide de RStudio (File > Import Dataset > From Excel) ou via le code

install.packages("readxl") # Uniquement si le package n'est pas déjà installé
library(readxl)
<data_frame> <- read_excel("<fichier.xlsx>")

Préparation des données

Une fois les données importées (avec RStudio), il est nécessaire de les vérifier et des les préparer.

Pour afficher un descriptif rapide des variables, on utilise

str(<data_frame>)

Pour afficher les premières observations, on utilise

head(<data_frame>)

Les variables qualitatives demandent un traitement préliminaire pour les transformer en facteur. Lorsqu'une variable contient directement les valeurs (non codées), il suffit d'indiquer (pour chaque variable quali) :

<data_frame$variable> <- factor(<data_frame$variable>)

Lorsqu'une variable a été codée (par exemple, 1 pour Homme et 2 pour Femme), il faut alors préciser le codage et les étiquettes :

<data_frame$variable> <- factor(<data_frame$variable>, level=c(1,2), labels=c('Homme','Femme'))

Packages supplémentaires

On installe les packages utilisés dans la suite. Cette opération est à faire une seule fois.

install.packages(c("DescTools", "psych"))

Il est ensuite nécessaire de les activer (opération à faire à chaque session) :

library(DescTools)
library(psych)
options(scipen=999)

Analyses univariées

Afin de simplifier les notations des variables (var_name vs data_frame$var_name), on attache le dataframe :

attach(<data_frame>)

Variables quantitatives

On peut utiliser les fonctions de base de R pour obtenir les principaux résumés statistiques. Lorsqu'il y a des données manquantes, il est nécessaire de rajouter l'option na.rm=TRUE.

mean(<variable>)
sd(<variable>, na.rm = TRUE)
var(<variable>)
min(<variable>)
max(<variable>)

En complément, la fonction describe du package psych permet d'obtenir les principaux résumés statistiques :

describe(<variable>)
describe(<variable>, fast=TRUE)
describe(<data_frame>[c('var1','var2')])

Les fonctions hist et boxplot permettent d'obtenir les représentations graphiques d'une variable. Des options permettent d'améliorer l'apparence du graphique.

hist(<variable>)
hist(<variable>, col='lightgreen', ylim=c(0,10), 
    main='Titre graphique', xlab='label horizontal', ylab='label vertical')

boxplot(<variable>)
boxplot(<variable>, col='lightblue', ylim=c(0,10), 
    main='Titre graphique', xlab='label horizontal', ylab='label vertical')

Variables qualitatives

La fonction table permet d'obtenir les effectifs de chaque modalité d'une variable qualitative. Pour obtenir les pourcentages, il faut rajouter prop.table. On peut aussi utiliser la fonction Freq du package Desctools qui est plus pratique

table(<variable>)
prop.table(table(<variable>))
Freq(<variable>)

La représentation graphique s'obtient avec la fonction barplot ou pie (en complément de table).

barplot(table(<variable>), col='red')
barplot(sort(table(<variable>), decreasing = TRUE), col='purple ')
barplot(sort(prop.table(table(<variable>))*100, decreasing = TRUE), 
    ylab='Pourcentages', ylim=c(0,60), col=c('red','green','yellow'))
pie(<variable>),col=c('lightblue','pink','seagreen3','gray'))

Analyses bivariées

Variables quantitatives

Covariance et corrélation entre deux variables se calculent avec les fonctions cov et cor.

cov(<variable 1> ,<variable 2>, use="complete.obs")
cor(<variable 1> ,<variable 2>, use="complete.obs")

Pour obtenir la matrice des corrélations (entre plus de deux variables), il faut utiliser rajouter la fonction data.frame :

cor(data.frame(<var 1>, <var 2>, <var 3>), use="pairwise.complete.obs")

Lorsqu'il y a des données manquantes, il faut préciser use="pairwise.complete.obs ou use="complete.obs".

La représentation graphique s'obtient a avec la fonction plot. La fonction abline permet de rajouter des lignes de référence (axes). La fonction text permet d'utiliser une troisième variable (qualitative) comme étiquette des points.

plot(<var 1>, <var 2>, xlab='Axe 1', ylab='Axe 2')
abline(h=2000) ; abline(v=35)
text(<var 1>, <var 2>, <var 3>, pos=4)

Il est possible d'utiliser une couleur différente pour chaque point selon les valeurs d'une variable qualitative (factor), par exemple avec un factor (var 3) à deux levels.

plot(<var 1>, <var 2>, xlab='Axe 1', ylab='Axe 2', pch= 16, col = c('red','blue')[<var 3>] )
legend('topleft', legend = levels(<var 3>), cex=0.8, pch=16, col=c('red','blue') )

Variables qualitatives

On obtient le tri croisé de deux variables qualitatives à l'aide des mêmes fonctions que pour les tris à plat :

table(<var 1>, <var 2>)     # Effectif
prop.table(table(<var 1>, <var 2>))*100     # Pourcentage / total
prop.table(table(<var 1>, <var 2>), margin=1)*100   # Pourcent. / ligne
prop.table(table(<var 1>, <var 2>), margin=2)*100   # Pourcent. / colonne

La fonction PercTable du package DescTools est plus pratique (freq=F supprime l'affichage des effectifs, rfrq="010" donne les pourcentages en ligne et rfreq="001" ceux en colonne)

PercTable(< var 1>, <var2> , freq=F, rfrq="010", margins=2, digits =2)

Pour les graphiques, on utilise encore la fonction barplot.

# barres superposés
barplot(table(<var 1>, <var 2>), col=c('blue ','green ') , 
        legend = c("val 1", "val 2"))
# barres juxtaposés
barplot(table(<var 1>, <var 2>), col=c('blue ','green ') , 
        legend = c("val 1", "val 2"), beside = TRUE)
# barres à 100 %
barplot(prop.table(table(<var 1> ,<var 2>),margin=2)*100, 
        col=c('blue ','green ') , legend = c("val 1", "val 2"), 
        cex.names=0.8,xlim=c (0,6))

Variables quantitative et qualitative

La fonction describeBy du package psych permet d'obtenir les statistiques descrives d'une variable quantitative selon les modalités d'une variable qualitative.

describeBy(<var quanti> , <var quali>)

La boite à moustaches permet de visualiser la variable quantitative sur chaque groupe.

boxplot(<var quanti> ~ <var quali> , col='lightgreen ', horizontal=TRUE)

Normalité

On peut vérifier la normalité d'une variable (quantitative) à l'aide d'un test :

shapiro.test(<variable>)

ou via un diagramme QQ :

qqnorm(<variable>)
qqline(<variable>,col='red')

ou encore un histogramme :

hist(<variable> , freq = F)
curve(dnorm(x, mean(<variable>,na.rm=T), sd(<variable>,na.rm=T)),add=TRUE)

Question à réponses multiples

Ces questions sont codées dans plusieurs (autant que de réponses possibles) variables dichotomiques (0/1). La fonction multipleResponse permet de les étudier (et de les représenter) facilement :

multipleResponse(<data_frame>, c('var1','var2'...),
    order='decreasing', # ou 'increasing'
    plot='percentage', # ou 'frequency'
    names.arg=c('valeur 1','valeur 2...), 
    <options graphiques : col, main, ylab, ylim...  
)

Pour utiliser cette fonction, il faut télécharger le script source MultipleResponse.R puis le charger avec l'instruction :

source('MultipleResponse.R')

Strates

Il est parfois utile d'étudier une ou plusieurs variables uniquement sur une partie de l'échantillon (appelée strate), par exemple celle des hommes ou des individus de moins de 30 ans. Pour cela, on utilise la syntaxe < variable >[condition] :

revenu[sexe=='H']
hist(revenu[sexe=='H'])
revenu[age <= 30] -> revenuJeunes
hist(revenuJeunes)

Lorsqu'on souhaite travailler sur une strate pour l'ensemble des variables, on utilise la fonction subset :

subset( <data_frame>, sexe=='H' & age <=30 ) -> StrateHommesJeunes
mean(StrateHommesJeunes$revenu)