ESCT/ISAMM 2e LBDAD
Chapitre 4 : Analyses univariées
Les analyses univariées consistent à étudier les variables séparément via des techniques
descriptives ou probabilistes.
Les objectifs de ces études sont :
Décrire et résumer chaque variable ;
Généraliser les informations à la population entière ;
Tester des hypothèses faites a priori ;
Comparer deux variables ou une variable sur plusieurs groupes.
Selon l’échelle utilisée, on peut classer les variables en quatre types :
Variables qualitatives :
➢ Nominales ;
➢ Ordinales.
Variables quantitatives :
➢ Discrètes ;
➢ Continues.
I. Lecture des données
Les données étudiées concernent les résultats d’un sondage virtuel réalisé dans une
entreprise européenne.
I.1) Définition du répertoire de travail
On commence tout d’abord par définir un répertoire de travail qui sera utilisé par R. Pour
cela, on se propose de créer un répertoire appelé « R » sur la racine du disque, ainsi, le
chemin de notre répertoire sera « C:\R ».
> setwd ("c:/R")
Statistiques Descriptives et inférentielles avec R 48
ESCT/ISAMM 2e LBDAD
> getwd()
[1] "c:/R"
I.2) Importation du fichier
Ensuite, il suffit d’importer le fichier texte appelé « sondage.csv » déjà placé dans le
répertoire de travail mentionné plus haut.
> data = read.csv ("sondage.csv",sep=";",dec=".",header=TRUE,
stringsAsFactors=TRUE)
Rappel :
read.csv() permet d’importer des fichiers csv ;
Puisque la première ligne du fichier contient les noms des variables, on utilise la
commande « header=TRUE » ;
Le séparateur entre les données est un « ; » ;
Le séparateur des décimales est « . » ;
stringsAsFactors : Permet de convertir les chaînes de caractères en facteurs.
I.3) Opérations élémentaires sur la dataframe
Il est possible d’avoir une idée sur le contenu du tableau de données avec les commandes
suivantes :
> dim (data)
[1] 2000 20
→ On a 2000 individus et 20 observations.
La commande names() permet d’afficher les noms des colonnes du dataframe data :
> names (data)
[1] "Sport" "Pays" "Tourisme"
"Cinema"
Statistiques Descriptives et inférentielles avec R 49
ESCT/ISAMM 2e LBDAD
[5] "Sexe" "Musique" "ChassePeche"
"Fumer"
[9] "ReseauSocial" "Activité" "Satisfaction"
"Cuisine"
[13] "Age" "Poids" "NbFreresSoeurs"
"NbAnimaux"
[17] "NbEnfants" "Taille" "HeuresTV"
"Nblivres"
Il est possible d’avoir une idée plus approfondie sur la dataframe grâce à la commande str() :
> str (data)
'data.frame': 2000 obs. of 20 variables:
$ Sport : Factor w/ 11 levels
"Escrime","Football",..: 4 4 8 5 11 8 11 1 5 6 ...
$ Pays : Factor w/ 20 levels
"Allemagne","Autriche",..: 3 11 19 11 1 4 4 6 4 10 ...
$ Tourisme : Factor w/ 22 levels
"Australie","Bresil",..: 11 2 9 12 5 14 3 9 2 1 ...
$ Cinema : Factor w/ 3 levels
"Non","Occasionnellement",..: 2 1 3 2 1 3 2 3 3 3 ...
$ Sexe : Factor w/ 2 levels "Femme","Homme": 1 1 2
2 1 1 1 2 1 2 ...
$ Musique : Factor w/ 10 levels "Classique","Hard
Rock",..: 3 10 10 4 1 1 9 9 8 5 ...
$ ChassePeche : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1
1 1 1 1 1 ...
Statistiques Descriptives et inférentielles avec R 50
ESCT/ISAMM 2e LBDAD
$ Fumer : Factor w/ 2 levels "Non","Oui": 2 2 1 2 2
1 1 1 2 2 ...
$ ReseauSocial : Factor w/ 8 levels "Aucun","Facebook",..:
3 5 2 3 1 7 3 2 5 2 ...
$ Activité : Factor w/ 10 levels "Administration",..: 1
9 8 5 10 8 7 7 4 4 ...
$ Satisfaction : Factor w/ 3 levels "Pas de réponse",..: 3
3 1 3 2 2 2 2 1 2 ...
$ Cuisine : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1
1 2 2 1 1 ...
$ Age : int 31 48 38 38 45 37 37 29 35 30 ...
$ Poids : int 103 63 110 81 76 126 63 72 85 88 ...
$ NbFreresSoeurs: int 2 2 9 10 0 5 2 3 7 9 ...
$ NbAnimaux : int 3 3 0 3 6 1 7 0 4 4 ...
$ NbEnfants : int 7 1 1 4 4 5 2 4 1 4 ...
$ Taille : int 170 181 157 199 183 191 168 158 151
169 ...
$ HeuresTV : int 8 8 5 5 12 6 5 12 5 12 ...
$ Nblivres : int 4 4 12 10 15 2 17 12 14 23 ...
Le tableau suivant permet de décrire les variables observées :
OBSERVATION DESCRIPTION
Sport Le sport favori
Statistiques Descriptives et inférentielles avec R 51
ESCT/ISAMM 2e LBDAD
Pays Le pays d’origine de chaque personne
interrogée
Tourisme La destination touristique favorite
Cinema Passion pour aller au cinéma
Sexe Le sexe
Musique Le style de la musique préférée
ChassePeche Passion pour la chasse/pêche
Fumer Fumeur : oui/non
ReseauSocial Le réseau social favori
Activité Le secteur d’activité
Satisfaction Le degré de satisfaction au travail
Cuisine Passion pour cuisiner : oui/non
Age Age de la personne en question
Poids Le poids (Kg)
NbFreresSoeurs Le nombre des frères et des sœurs
NbAnimaux Nombre des animaux à la maison
NbEnfants Le nombre d’enfants
Taille La taille (en cm)
HeuresTV Nombre d’heures moyen passé devant la
télévision quotidiennement
Nblivres Nombre moyen de livres lues annuellement
Table 3: Description du dataframe utilisé
On constate ainsi la présence d’un mélange de variables quantitatives (représentées par int
en R) et des variables qualitatives (représentées par factor).
Statistiques Descriptives et inférentielles avec R 52
ESCT/ISAMM 2e LBDAD
La commande head() permet d’afficher un aperçu du dataframe :
Figure 12: Aperçu du contenu de la dataframe « data »
II. Manipulation du dataframe
On commencera par revoir les bases de la manipulation d’une dataframe :
Afficher uniquement la colonne âge :
> data$Age
Afficher le nombre d’enfants de la 8e personne :
> data[8,]$NbEnfants
Afficher le pays d’origine de tous les employés :
> data$Pays
Statistiques Descriptives et inférentielles avec R 53
ESCT/ISAMM 2e LBDAD
III. Distribution d’une variable
Il est important d’avoir une idée sur la distribution des différentes variables. La commande
summary() :
Figure 13: Distribution des différentes variables du dataframe
Statistiques Descriptives et inférentielles avec R 54
ESCT/ISAMM 2e LBDAD
III.1) Variable continue
Il est souvent intéressant, avant de commencer une étude statistique, de tracer la
distribution des variables. Cela permet de regarder notamment si les valeurs sont groupées
autour de la moyenne ou très étalées, si elles se répartissent en plusieurs groupes, etc.
Plusieurs fonctions existent pour cela : ici on n’abordera que le tracé des histogrammes ainsi
que la densité.
Si la variable est continue, on peut tracer un histogramme, comme ceci :
> hist (data$Taille, col= "blue", border= "white",ylim = c(0,
250), labels=TRUE, xlab="Taille en cm", ylab= "Nombre
d'observations")
Statistiques Descriptives et inférentielles avec R 55
ESCT/ISAMM 2e LBDAD
On obtient le graphique suivant :
Figure 14: Histogramme des tailles de la population
étudiée
Il est possible d’ajouter aussi un estimateur de la densité si l’on spécifie l’argument
prob=TRUE dans la fonction hist().
Notons aussi qu’on changera la mesure en ordonnées (ylab) afin de pouvoir visualiser
correctement le graphique.
> hist (data$Taille, col= "blue", border= "white",ylim =
c(0,0.0250), labels=TRUE, xlab="Taille en cm", ylab= "Nombre
d'observations", prob=TRUE)
Statistiques Descriptives et inférentielles avec R 56
ESCT/ISAMM 2e LBDAD
> lines(density(data$Taille), lwd=3, col = "red" )
NB :
L’attribut lwd de la fonction lines() permet de spécifier la largeur de la ligne de traçage (la
ligne rouge).
On obtient donc :
Figure 15: La densité des tailles de la population
étudiée
Statistiques Descriptives et inférentielles avec R 57
ESCT/ISAMM 2e LBDAD
Remarque :
Une densité de probabilité peut être définie comme suit : (Source :
https://lewebpedagogique.com)
Figure 16: Définition de la densité de probabilité
Statistiques Descriptives et inférentielles avec R 58
ESCT/ISAMM 2e LBDAD
Un estimateur à noyau de la densité de la variable data$Taille peut être obtenu grâce à la
fonction density(). Sa représentation graphique s’obtient comme suit :
> plot (density(data$Taille), main="Estimateur à noyau",
xlab="Taille en cm")
Figure 17: Un estimateur à noyau de la densité de la
variable data$Taille
III.2) Variable discrète
Quand on veut étudier la répartition d’une variable discrète, on ne peut pas employer les
fonctions précédentes. On va utiliser une fonction prévue pour ce type de variables.
Le fait que la variable soit discrète crée une catégorisation naturelle : on va représenter le
nombre d’individus ayant chaque valeur (par exemple la taille), sans avoir besoin de
regrouper les classes, ou de définir à la main le nombre d’intervalles que l’on veut.
La fonction table() joue ce rôle : elle compte le nombre d’individus ayant chaque valeur. On
peut ensuite représenter ce nombre avec la fonction barplot().
Statistiques Descriptives et inférentielles avec R 59
ESCT/ISAMM 2e LBDAD
Exemple :
> table (data$ChassePeche)
Non Oui
1953 47
> barplot (table(data$ChassePeche))
Figure 18: Répartition de la variable discrète
"Passion pour la chasse ou la pêche"
Il est possible aussi de tracer des diagrammes en secteurs grâce à la fonction pie().
Statistiques Descriptives et inférentielles avec R 60
ESCT/ISAMM 2e LBDAD
Exemple :
Étude de la répartition des réseaux sociaux favoris utilisés :
> table (data$ReseauSocial)
Figure 19: Répartition des réseaux sociaux favoris
On utilisera les facteurs : il s’agit d’un vecteur particulier facilitant la manipulation des
données qualitatives.
En effet, en plus de stocker les différents éléments comme un vecteur classique, un facteur
stocke également l’ensemble des différentes modalités possibles dans un attribut.
Rappel :
Pour connaître les différentes modalités d’un facteur, la fonction levels() peut être utilisée.
Ainsi, on aura besoin d’une autre information : Le nombre des différents réseaux sociaux
mentionnés dans notre fichier.
La fonction levels() fournit cette information.
> q=(levels(factor(data$ReseauSocial)))
> q
[1] "Aucun" "Facebook" "Instagram" "Linkedin"
"Pinterest" "Quora"
[7] "Reddit" "Twitter"
On aura donc :
> pie (table (data$ReseauSocial), col = rainbow(length (q)))
L’option col permet de choisir la palette de couleurs (length (q) =8).
Statistiques Descriptives et inférentielles avec R 61
ESCT/ISAMM 2e LBDAD
Figure 20: Diagramme en secteurs de la
répartition des réseaux sociaux favoris
On peut aussi afficher le pourcentage relatif à chaque portion afin de rendre le diagramme
plus lisible. Ainsi, la variable r utilisée ci-dessous sera un vecteur contenant les valeurs
relatives au nombre d’utilisateurs de chaque réseau social :
> r = c (table (factor (data$ReseauSocial)))
La variable prc permet d’obtenir le pourcentage d’utilisateurs :
NB :
La fonction nrow() permet de renvoyer la taille de la population (nombre de lignes du
dataframe)
> prc= (r/nrow (data))*100
Statistiques Descriptives et inférentielles avec R 62
ESCT/ISAMM 2e LBDAD
> prc
Aucun Facebook Instagram Linkedin Pinterest Quora
11.15 10.90 11.35 10.80 12.05 11.15
Reddit Twitter
10.55 22.05
Ainsi, on aura :
> pie (table (data$ReseauSocial), col = rainbow(length (q)),
labels = paste(q,prc,"%"))
Figure 21: Diagramme en secteurs de la répartition en
pourcentages des réseaux sociaux favoris
Statistiques Descriptives et inférentielles avec R 63
ESCT/ISAMM 2e LBDAD
NB :
La fonction paste() permet de concaténer des variables.
Il est aussi possible d’obtenir des diagrammes en secteurs en 3D. On aura besoin d’une
information facultative, mais très importante : Les labels représentés ici par la variable d.
La fonction pie3D() permet d’avoir ce diagramme.
NB :
Il faut commencer, d’abord, par télécharger et installer la bibliothèque plotrix.
> library(plotrix)
> x=table (data$ReseauSocial)
> d=levels(factor (data$ReseauSocial))
> d
[1] "Aucun" "Facebook" "Instagram" "Linkedin"
"Pinterest" "Quora"
[7] "Reddit" "Twitter"
> pie3D(x,explode = 0.1, main = "Utilisation des réseaux
sociaux ", labels = paste(q,"-",prc,"%"))
Statistiques Descriptives et inférentielles avec R 64
ESCT/ISAMM 2e LBDAD
Figure 22: Version 3D du diagramme en secteurs de la
répartition de l'utilisation des réseaux sociaux
Statistiques Descriptives et inférentielles avec R 65