DLST L1-IMA 2020-21
TP 1 - MAP201
Prise en main de R – Description d’une variable qualitative
Le but des TPs de MAP201 est que vous soyez capable de mener une étude statistique sur des données
expérimentales, qu’elles soient qualitatives, quantitatives discrètes ou continues.
Il est important que vous compreniez les commandes, les concepts statistiques qu’elles impliquent et que
vous sachiez interpréter les résultats.
Objectifs du TP :
— apprendre les commandes de base du logiciel R
— savoir charger un jeu de données
— trier des données
— décrire une variable qualitative,
— produire des graphiques
— calculer des proportions et des proportions conditionnelles
1 Introduction à R et RStudio
R est un langage de programmation et un logiciel libre de statistique. Nous utiliserons dans les TP l’interface
RStudio de ce logiciel, que l’on peut télécharger gratuitement. R et RStudio sont déjà installés sur les machines
des salles de TP.
Pour les installer sur votre propre machine, il faut d’abord installer le logiciel R lui même, disponible sur le
site www.r-project.org, puis installer l’interface RStudio depuis le site www.rstudio.com.
RStudio est séparé en 4 fenêtres graphiques :
— Console (en bas à gauche) : permet d’exécuter les instructions avec la touche Entrée ←-.
— Script (en haut à gauche) : permet d’écrire l’ensemble des commandes (ou instructions) que l’on veut
exécuter et de pouvoir les sauvegarder dans un fichier. Une instruction s’exécute dans la fenêtre en
bas à gauche en appuyant sur Ctrl+Entrée. Pour ne pas perdre de temps, vous pouvez copier-coller les
commandes qui sont données dans les énoncés de TP directement dans votre script.
— Files/Plots/Packages/Help (en bas à droite) : permet entre autres de visualiser les graphiques ou l’aide.
— Workspace/History (en haut à droite) : permet de voir l’ensemble des objets en mémoire et l’historique
de toutes les instructions réalisées.
Exercice 1. (Mise en place d’un projet sous RStudio)
1. Créer un répertoire MAP201 dans votre dossier “documents”, et un sous-répertoire TPMAP201 dans
lequel vous rangerez tous vos documents de Tps : fiches de Tps .pdf, scripts .R, graphiques .pdf, ....
Enregistrer l’énoncé du TP1 dans ce répertoire.
Ce répertoire servira pour toutes les séances de TP. On créera un ’script’ au début de chaque séance de
TP.
2. Nous vous suggérons de créer une arborescence qui vous permettra d’organiser votre travail de façon
claire :
— les feuilles de TP .pdf et les fichiers scripts .R seront sauvegardés dans le répertoire TPMAP201,
— télécharger le dossier “data” sur Chamilo et le copier dans votre répertoire TPMAP201,
— créer un sous-répertoire “plots” dans lequel vous enregistrerez les graphiques produits via le logiciel
R.
3. Pour se simplifier la vie, nous allons travailler dans RStudio dans le répertoire de travail TPMAP201.
Pour cela, aller dans l’onglet Session de la barre supérieure du menu, choisir Set Working Directory
(Répertoire de Travail) et sélectionner le répertoire TPMAP201 nouvellement créé.
4. La deuxième étape est de créer un projet sous RStudio, qui nous permettra dans les autres TP d’arriver
directement dans le bon répertoire et d’ouvrir directement tous les fichiers scripts
Pour cela, créer un nouveau projet en cliquant sur File/New Project/ puis à partir d’un répertoire existant
(Existing Directory) et sélectionner le répertoire existant (Existing Directory) TPMAP201.
Ensuite, créer un nouveau script (File/New File/R script) et le sauvegarder dans le répertoire TP-
MAP201. Vérifier que le script est sauvegardé sous le nom “TP1.R”.
Pour les prochains TPs, vous démarrerez la séance en double cliquant sur le fichier TPMAP201.Rproj.
Cela ouvrira automatiquement RStudio dans le bon répertoire.
Exercice 2. (Prise en main de R)
Dans R, les paramètres d’une fonction sont précisés entre parenthèses juste après le nom de la fonction.
Pour connaitre l’utilité et les paramètres d’une fonction, vous pouvez vous reporter à l’aide (cf. question 7).
Les fonctions de bases sont listées dans le document “Commandes-R.pdf” que vous trouverez sur Chamilo.
N’hésitez pas à vous y reporter lorsque vous cherchez une fonction. Votre moteur de recherche préféré est
également d’une bonne aide.
Dans la suite, nous allons voir quelques commandes de base dans le langage R. Nous vous conseillons de
copier ces commandes dans votre fichier script avant de les exécuter (via Ctrl+Entrée ou le bouton Run). Le
résultat de l’exécution s’affiche dans la console (fenêtre en bas à gauche).
1. On peut faire afficher le vecteur (1, 2, 3, 4, 5) avec l’instruction :
c(1,2,3,4,5)
2. Pour sauvegarder le vecteur, il faut l’affecter à un objet (les “variables” informatiques seront appelées
objets pour ne pas confondre avec les variables aléatoires ou variables statistiques). Pour définir l’objet
x, on utilisera :
x = c(1,2,3,4,5)
On remarque que la console ne renvoie rien, mais qu’un nouvel objet est visible dans la fenêtre en haut
à droite. Pour afficher le contenu de l’objet x, il suffit d’exécuter la commande :
x
Prenez l’habitude de vérifier que les objets que vous créez contiennent bien ce que vous voulez.
3. Créer le vecteur y contenant les valeurs (2, 4, 6, 8, 10).
4. Prenez l’habitude de sauvegarder votre script au fur et à mesure ! (cliquer sur le script et appuyer
sur Ctrl+S).
5. Pour vérifier que les vecteurs x et y ont la même longueur, on utilisera :
length(x); length(y)
6. Pour tracer sur un graphique les points définis par les deux vecteurs x et y, on utilisera :
plot(x,y)
7. Pour personnaliser votre graphique, il faut ajouter des options à la fonction plot. Par exemple :
plot(x,y, pch=3) # change les symboles
plot(x,y, type="b") # ajoute une ligne
plot(x,y, col="red") # change la couleur
plot(x,y, main="y selon x", type="p", xlab="abscisse", ylab="ordonnée")
# ajoute un titre et des légendes sur chaque axe
On remarque qu’à chaque exécution de la fonction plot, un nouveau graphique est généré. Si vous
souhaitez utiliser plusieurs options graphiques, il faut donc toutes les préciser au sein d’un seul appel
de la fonction plot.
Créer votre propre graphique en changeant les couleurs, les symboles et les titres. Pour connaitre les
différentes options graphiques disponibles, vous pouvez regarder l’aide, par exemple via la commande :
help(plot)
La syntaxe des différentes options sont décrites dans la section “Arguments”.
8. Retourner sur la fenêtre graphique (Plots) et sauvegarder votre graphique dans un fichier pdf en cliquant
sur “Export”.
9. Pour connaitre l’ensemble des objets en mémoire, on peut utiliser la commande ls(), ou bien regarder
la fenêtre Environnement (en haut à droite).
Exercice 3. (Premières opérations)
1. Opérations basiques : comprendre les opérations suivantes
x/5
x+5
sum(x)
cumsum(x)
sqrt(x)
x^3
2. La fonction c vue plus tôt est en fait l’opérateur de concaténation. Regarder ce que renvoie la com-
mande :
c(x,6)
Attention : x n’a pas été modifié (vous pouvez le vérifier). Pour ajouter la valeur 6 au vecteur x, on
utilisera :
x = c(x,6)
Vérifier que x a bien été modifié.
Pour la suite, on reprendra la première définition de x en exécutant :
x = c(1,2,3,4,5)
3. Comprendre les commandes suivantes :
c(y,x)
rep(1,5)
seq(from=1, to=10, by=2)
6:15
Créer l’objet z qui contient le vecteur (1, 4, 7, 10, . . . , 61, 2, 2, 2, . . . , 2, 1, 2, 3, . . . , 20) où le nombre 2 a
été répété 20 fois au milieu de la suite.
4. Dans R, on peut faire des tests logiques sur les éléments d’un vecteur. Comprendre les instructions
suivantes :
y>4
x!=2
x==4
(y>4) & (y<=6)
(x<2) | (x>3)
5. Dans R, l’extraction d’éléments d’un vecteur x se fait grâce aux crochets [.]. Deux méthodes princi-
pales sont disponibles :
— sélectionner par des entiers compris entre 1 et la longueur du vecteur x,
— sélectionner par un vecteur booléen de même taille que x.
Comprendre les instructions suivantes :
x[c(2,4)]
x[1:3]
x[-1] # le signe moins indique les coordonnées à ne pas extraire
x[x>3]
Extraire la dernière valeur de z.
Extraire les valeurs de z supérieures à 3.
Extraire les valeurs de y plus grandes strictement que 2 et plus petites ou égales à 8.
6. Comprendre les opérations de base avec deux vecteurs :
x+y
x*y
x/y
7. On peut simplement créer une matrice avec les deux vecteurs x et y :
cbind(x,y) # matrice avec 5 lignes et 2 colonnes
rbind(x,y) # matrice avec 2 lignes et 5 colonnes
8. L’extraction d’éléments d’un vecteur se généralise à l’extraction d’une matrice (ou même d’un tableau
de plus grande dimension). Dans le cas d’une matrice, il y deux sélections à faire (séparées par une
virgule) : lignes et colonnes. Si rien n’est précisé avant la virgule, cela signifie que l’on prend toutes les
lignes. Si rien n’est précisé après la virgule, cela signifie que l’on prend toutes les colonnes.
M = rbind(x,y,y,x) # matrice avec 4 lignes et 5 colonnes
M # affiche toute la matrice
M[1,2:4] # affiche les éléments de la 1ere ligne et des colonnes 2 à 4
M[ ,c(1,4)] # affiche les éléments des colonnes 1 et 4
9. Afficher les éléments des lignes 2 à 4 et des colonnes 1 et 5.
10. Construire l’objet N qui est une matrice 2x5 dont la première ligne est la première de M et la seconde est
la dernière ligne de M.
Exercice programmation. (Bases de la programmation avec R)
A la fin de chaque section, il y aura un exercice pour faire un peu de programmation avec R. Cette
compétence ne sera pas évaluée dans cette UE.
Voici la syntaxe des structures de base en R.
— La boucle if :
if (condition){
... instructions
} else
{
... instructions
}
avec un exemple :
if (x[1]==1){
x = x+1
} else { x = x-1 }
— la boucle for :
for (indice in séquence){
... instructions
}
avec un exemple :
for (i in 1:5){
x[i] = x[i]+1
}
— la boucle while :
while (condition){
... instructions
}
avec un exemple :
i=1
while (i <=length(x)){
x[i] = x[i]+1; i = i+1
}
— une fonction :
mafunc <- function(arguments){
... instructions
return(résultats)
}
avec un exemple :
petit <- function(a, b){
if (a<b){ return(a) } else
{ return(b) }
}
que l’on exécute, par exemple, via la commande :
petit(1,2)
1. Créer une fonction qui prend en entrée un vecteur et renvoie en sortie la moyenne arithmétique de ses
éléments.
2. Créer une fonction qui prend en entrée un vecteur et renvoie en sortie la moyenne géométrique de ses
éléments.
2 Statistique pour une variable qualitative
Exercice 4. (Premier jeu de données construit)
Dans l’ensemble des centres de transfusion sanguine de la région Rhône-Alpes on a observé sur un échantillon
de n patients choisis au hasard parmi ceux ayant donné leur sang en 2013 les deux variables suivantes : Groupe
sanguin et Rhésus. Les effectifs observés sont donnés dans la table de contingence suivante :
1. Quelles sont les variables d’intérêt ? Quels sont leurs types (continu/discret, qualitatif/quantitatif) ?
2. Rentrer les effectifs des Rhésus + dans un vecteur avec la commande :
Rp = c(40, 38, 6, 1)
Groupe O A B AB
Facteur
Rhésus + 40 38 6 1
Rhésus - 7 7 1 0
Faire de même avec les effectifs des Rhésus -, stockés dans un vecteur Rm.
3. Créer une matrice S rassemblant les deux vecteurs comme le tableau ci-dessus.
Lorsque l’on affiche la matrice S, on remarque que les lignes sont nommées : Rp et Rm. On peut
également donner un nom aux colonnes avec la commande :
colnames(S) = c("O", "A", "B", "AB")
4. Quelle est la valeur de n, l’effectif total de l’échantillon ? Quelle fonction vous permet de calculer cette
taille d’échantillon ?
5. Quels sont les effectifs de chaque Rhesus (rowSums(S)) ? Quelles sont les proportions (fréquences) des
deux Rhesus ?
Exercice 5. (Premier jeu de données brut)
On travaille dans cet exercice sur la base de données brutes titanic.csv. La description du jeu de données
est disponible via le fichier description.pdf qui se trouve dans le répertoire “data”.
1. Pour charger la base de données dans RStudio, on utilise la commande :
TI = read.table(file="data/titanic.csv", header=TRUE, sep=";")
Si l’importation a fonctionné, un nouvel objet nommé TI doit apparaitre dans la fenêtre en haut à droite.
Dans toutes les bases de données que nous utiliserons, la première ligne est toujours un en-tête (d’où
header=TRUE) et les valeurs sont toujours séparées par des points-virgules (d’où sep=";").
2. Afficher les 6 premières lignes de la base. Ceci permet de vérifier que la base a bien été importée (nom
des colonnes et format des variables) et d’en donner un premier aperçu.
Cette vérification est souvent très pratique et la fonction head permet de faire ça : essayer head(TI).
3. Nous allons traiter les quatre colonnes du jeu de données comme quatre vecteurs séparés. Par exemple,
les commandes suivantes permettent d’affecter la colonne pclass à l’objet P :
P = TI[, 1]
P = TI[, "pclass"]
P = TI$pclass
De même, affectez la colonne survived à l’objet S, la colonne gender à l’objet G et la colonne age à
l’objet A.
Quels sont les types de ces 4 variables ?
4. Afficher les lignes 3, 45 et 73 de TI. Afficher les colonnes 1 et 3 de TI. Afficher les colonnes 2 et 4 des
lignes 67, 83 et 101 de TI.
5. Pour afficher les données des passagers de première classe, on peut sélectionner les individus (en ligne)
qui correspondent à la condition P==1, i.e. :
TI[P==1, ]
Afficher les données des passagers de deuxième et troisième classe.
6. Pour afficher les données des femmes de première classe, on utilise la commande :
TI[P==1 & G=="F", ]
Afficher les données des hommes de deuxieme classe.
7. Pour afficher les données des bébés (moins de 1 an), on utilise la commande :
TI[A<1, ]
Afficher les données des enfants (moins de 18 ans). Afficher les données des adolescents (12-18 ans).
8. Pour calculer la table d’effectifs des 3 classes de passagers, on utilise la commande :
table(P)
Calculer l’effectif total de l’échantillon (c’est le nombre de valeurs dans P) et en déduire les proportions
(fréquences) des 3 classes.
Comparer votre résultat avec celui de :
prop.table(table(P))
Quelle est la proportion des passagers en première classe ? On peut représenter cette répartition avec un
diagramme en bâtons :
barplot(table(P))
9. Calculer les effectifs des survivants et des décédés. Combien de personnes ont-elles survécues ? Calculer
les proportions d’hommes et femmes. Quelle est la proportion de femmes ? Représenter graphiquement
ces 2 variables.
10. On peut également faire des tables d’effectifs croisés (ou table de contingence, voir exo. 4). On peut cal-
culer les effectifs (et les proportions) des classes de passagers en fonction de la survie avec la commande
suivante :
table(P, S)
prop.table(table(P,S))
11. Parmi les survivants, quelle est la proportion de passagers de première classe ? Parmi les passagers de
première classe, quelle est la proportion de survivants ?
12. Comparez vos résultats de la question précédente avec les commandes suivantes :
prop.table(table(P,S), 1)
prop.table(table(P,S), 2)
Répondez aux questions suivantes :
(a) Combien de passagers de première classe ont survécu ?
(b) Parmi tous les passagers, quelle est la proportion des survivants ?
(c) Parmi les passagers de deuxième classe, quelle est la proportion des décédés ?
(d) Parmi les décédés, quelle est la proportion des passagers de deuxième classe ?
Le diagramme en bâtons s’adapte bien aux tables de contingence. Par exemple :
barplot(table(P, S), beside=TRUE)
barplot(table(S, P), beside=TRUE)
Commenter.
13. Calculer la table de contingence de la classe et du genre des passagers. Répondez aux questions sui-
vantes en calculant la table adéquate :
(a) Combien de passagers de première classe sont des femmes ?
(b) Parmi tous les passagers, quelle est la proportion de femmes ?
(c) Parmi les passagers de première classe, quelle est la proportion de femmes ?
(d) Parmi les femmes, quelle est la proportion de passagères de première classe ?
Exercice 6. (Approfondissement)
On travaille dans cet exercice sur la base de données bosson.csv (fournie par le Professeur Jean-Luc
Bosson). La description du jeu de données est disponible via le fichier description.pdf qui se trouve dans
le répertoire “data”.
1. Charger la base de données dans RStudio.
2. Afficher les 6 premieres lignes de la base.
3. Affecter la colonne country à la variable C, la colonne gender à la variable G, la colonne aneurysm à
la variable A, et la colonne risk à la variable R.
Quels sont les types de ces quatre variables ?
4. Afficher les lignes 120 à 123. Afficher les colonnes 1 et 3 des lignes 67, 83, 101. Afficher les données
des patients vietnamiens. Afficher le nombre de facteurs de risque des hommes.
5. Calculer les effectifs et proportions des 2 pays. Quelle est la proportion de vietnamiens ? Calculer les
effectifs et les proportions d’hommes et femmes. Quelle est la proportion de femmes ? Représenter
graphiquement ces 2 variables.
6. Calculer la répartition des pays selon le genre et le genre selon le pays. Combien de français sont
des hommes ? Quelle proportion parmi tous les patients sont des hommes francais ? Quelle proportion,
parmi les patients vietnamiens, sont des femmes ? Quelle proportion de femmes sont vietnamiennes ?
Représenter graphiquement la répartition de ces deux variables.
7. Calculer la répartition des pays selon le nombre de facteurs de risque et le nombre de facteurs de risque
selon le pays. Combien de vietnamiens ont 0 facteur de risque ? Quelle proportion parmi tous les patients
sont des vietnamiens sans facteur de risque ? Quelle proportion, parmi les patients vietnamiens, ont 0
facteur de risque ? Quelle proportion de patients sans facteur de risque sont vietnamiens ? Représenter
graphiquement la répartition de ces deux variables.
8. Calculer la répartition des genres selon le nombre de facteurs de risque et le nombre de facteurs de
risque selon le genre. Combien de femmes ont 0 facteur de risque ? Quelle proportion parmi tous les
patients sont des femmes sans facteur de risque ? Quelle proportion, parmi les patients femmes, ont 0
facteur de risque ? Quelle proportion de patients sans facteur de risque sont des femmes ? Représenter
graphiquement la répartition de ces deux variables.
Exercice programmation. (Fonctions avec R)
Pour faire une fonction qui renvoie plusieurs valeurs de types différents, on utilise la structure de liste (la
plupart des fonctions natives de R l’utilise) :
liste = list(nom1 = var1, nom2 = var2, ...)
avec un exemple :
bosson = list(pays = C, genre = G, anevrisme = A, risque = R)
1. Créer une fonction qui prend en entrée deux nombres et renvoie une liste avec la plus petite valeur sous
l’étiquette min et la plus grande sous l’étiquette max.
2. Créer une fonction qui prend un entrée un vecteur et renvoie en sortie la moyenne arithmétique et la
moyenne géométrique de ses éléments.
3. Créer une fonction qui prend un entrée deux vecteurs de même longueur et renvoie leur table de contin-
gence (exactement comme la fonction table à la question 10 de l’exercice 5). On peut se servir de la
fonction unique.