Introduction au logiciel R 2018-2019
Introduction au logiciel R 2018-2019
Franck Piller
Julie Scholler
Table des matières
I Notes de cours 3
Présentation de l’enseignement 4
Thème 1 - Présentation générale du logiciel de R et de R Studio 5
1.1 Présentation de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Installation de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Installation de RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Thème 2 - Premières manipulations 6
2.1 Principes généraux du logiciel R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Données dans R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Première structure de données : vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Tableau de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Thème 3 - Importation et exportation de données 14
3.1 Répertoire de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Importation de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Exportation de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4 Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Thème 4 - Exportation de graphiques 18
4.1 Création d’un fichier contenant un graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Personnalisation du graphique créé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
II Travaux pratiques 19
Thème 1 - Présentation générale du logiciel R 20
1.1 Principes généraux du logiciel R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 Les facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Thème 2 - Data frames et statistiques univariées quantitatives 24
Thème 3 - Calcul matriciel et tableaux de contingence 27
Annexe - Exportation de graphiques 29
Thème 4 - Importation de données et variables qualitatives 30
Thème 5 - Manipulations avancées de data frame 32
Annexe - Exercices d’annales 34
2
Première partie
Notes de cours
3
Syllabus
Présentation de l'enseignement
Enseignants :
Objectifs :
Le but de cet enseignement est de se familiariser avec le logiciel R et d’apprendre à utiliser les outils de
gestion de données ainsi que les outils statistiques de base du logiciel R.
L’enseignement est composé de 2 séances d’une heure de cours magistral et de 5 séances de travaux pratiques
de 2h. Il n’y a pas de séances toutes les semaines, surveillez votre emploi du temps.
Les sujets de TP sont disponibles sur l’ENT, ainsi que des corrections partielles.
Modalités d'évaluation :
Présence :
Bibliographie :
Il s’agit de lectures complémentaires aux travaux pratiques. On trouve également de nombreuses ressources
sur internet :
• Statistiques avec R, Cornillon Pierre-André et Autres (519.5 STA) ;
• Le logiciel R, Lafaye de Micheaux Pierre et Autres (519.5 LAF) ;
• Comprendre et réaliser les tests statistiques à l’aide de R, Millot (519.5 MIL) ;
• Initiation à la statistique avec R, Frédéric Bertrand et Myriam Maumy-Bertrand (519.5 BER).
4
Thème 1
1. Présentation de R
R est un langage orienté vers le traitement de données et l’analyse statistique. Il s’agit également d’un logiciel
libre publié sous licence GNU GPL.
Il permet de réaliser des analyses statistiques telles que
• des statistiques descriptives : moyenne, médiane, variance, etc. ;
• des tests d’hypothèses et des intervalles de confiance ;
• des régressions linéaires ;
• de l’analyse factorielle ;
• du machine learning ;
• des graphiques.
Avantages
Inconvénients
• logiciel et documentation de base en anglais (mais de plus en plus de ressources en ligne en français)
• R s’apparente davantage à un langage de programmation qu’à un logiciel proprement dit
2. Installation de R
Sur le site http://www.r-project.org/, effectuer la démarche suivante :
• rubrique Download, cliquer sur CRAN ;
• choisir un site miroir en France ;
• choisir la version en fonction de votre système d’exploitation (pour Linux, il y a de fortes chances que R
soit directement disponible via le gestionnaire de paquets).
3. Installation de RStudio
Sur le site http://www.r-project.org/, effectuer la démarche suivante :
• cliquer sur Download RStudio dans le caroussel ;
• choisir la version free de RStudio Desktop ;
• choisir la version en fonction de votre système d’exploitation (pour Linux, il y a des chances que RStudio
soit directement disponible via le gestionnaire de paquets).
5
Thème 2
Premières manipulations
R possède en mémoire la valeur de quelques constantes mathématiques, comme la constante π qui est appelée
par la commande pi.
pi
## [1] 3.141593
R permet de faire des calculs plus élaborés. Il utilise pour cela des fonctions.
Exemples :
## [1] 0.6931472
On peut stocker en mémoire des données, des résultats, etc. Pour cela, on définit des objets R (on reviendra
sur les différents types d’objets), à l’aide du symbole <- qui permet d’assigner une valeur à un objet.
Exemples :
6
THÈME 2. PREMIÈRES MANIPULATIONS
## [1] 5 ## [1] 6
state.area
## [1] 51609 589757 113909 53104 158693 104247 5009 2057 58560 58876
## [11] 6450 83557 56400 36291 56290 82264 40395 48523 33215 10577
## [21] 8257 58216 84068 47716 69686 147138 77227 110540 9304 7836
## [31] 121666 49576 52586 70665 41222 69919 96981 45333 1214 31055
## [41] 77047 42244 267339 84916 9609 40815 68192 24181 56154 97914
Pour comprendre ces données, on peut faire appel à l’aide fournie dans R via la commande help(state.area).
1.3. Script
Afin de sauvegarder son travail ou de faire des rapports, il est utile de créer des scripts. Il s’agit d’un fichier
texte contenant une succession de commandes R.
Dans l’onglet File de RStudio, choisir New File puis R Script. Enregistrer votre fichier à l’emplacement de
votre choix.
Pour tout travail, je vous conseille de taper directement vos commandes dans le script, puis de les exécuter
dans la console en utilisant la fonction Run.
Il est possible d’insérer des commentaires dans vos scripts en les faisant précéder du caractère #.
2. Données dans R
R permet de manipuler des données organisées en structures de différentes formes (vecteurs, tableaux, etc.).
Toutes ces structures sont composées d’éléments de base, ces derniers pouvant être de différents types
(numériques, caractères, etc.).
is.logical(a)
## [1] FALSE
7
THÈME 2. PREMIÈRES MANIPULATIONS
is.numeric(a)
## [1] TRUE
is.character(a)
## [1] FALSE
Il faut être prudent dans les conversions et bien vérifier comment R convertit.
Pour différentes raisons, il se peut que certaines données ne soient pas récoltées pendant une étude. On parle
alors de données ou valeurs manquantes. Elles sont notées NA, pour Not Available. Ce n’est pas un véritable
mode et il possède ses propres règles de calcul (il faudra être vigilant quand on traitera des données).
Pour savoir s’il existe une donnée manquante dans un objet x, il faut poser la question is.na(x) (sum(is.na(x))
pour avoir le nombre de données manquantes).
C’est un objet composé d’un ensemble de valeurs toutes du même mode (numérique, logique, etc.). Le nombre
d’éléments constitue l’attribut longueur.
Construction
v<-c(10,4,5,8,3,2.1,15,789,63,-2)
v
## [1] 10.0 4.0 5.0 8.0 3.0 2.1 15.0 789.0 63.0 -2.0
c(v,12)
## [1] 10.0 4.0 5.0 8.0 3.0 2.1 15.0 789.0 63.0 -2.0 12.0
c(TRUE,TRUE,FALSE)
8
THÈME 2. PREMIÈRES MANIPULATIONS
c(1>0,1==1, T, 1<0.5)
seq(1,8,by=0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0
seq(1,2,length=5)
rep(1,4)
## [1] 1 1 1 1
rep("A",10)
## [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A"
• encore une :
1:5
## [1] 1 2 3 4 5
Calculs
v0<- 1:5
v0 > 4
sqrt(v0)
sum(v0) v1<-c(-3,1.2,NA,5,NA)
mode(v1)
## [1] 15
## [1] "numeric"
sum(v0>=4)
is.na(v1)
## [1] 2
## [1] FALSE FALSE TRUE FALSE TRUE
cumsum(v0)
## [1] 1 3 6 10 15
9
THÈME 2. PREMIÈRES MANIPULATIONS
sum(is.na(v1)) sort(v2)
## [1] 2 ## [1] 7 8 10 11 12
sum(v1) v0+v2
## [1] NA ## [1] 11 10 14 11 17
v1^2 v1+v2
v2<-c(10,8,11,7,12) v0*v2
## [1] 10 16 33 28 60
On peut sélectionner une partie des éléments d’un vecteur en spécifiant les indices des termes nous intéressant.
Voici quelques exemples de sélection d’une partie d’un vecteur.
v3<-seq(0.1,1,0.1)
v3[6] # 6ème élément du vecteur
## [1] 0.6
v3[c(1,8,3,1)]
## [1] 0.1 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
v3[-c(2,3,5:8)]
On peut également sélectionner une partie d’un vecteur à l’aide d’un vecteur de valeurs logiques.
v3[(v3>0.5)&(v3<1)]
10
THÈME 2. PREMIÈRES MANIPULATIONS
Autres manipulations
v4<-c(5,1,9,7,3,4,2.5,6.32,8) which(v4>6)
which(v4==9)
## [1] 3 4 8 9
## [1] 3
which(is.na(v1))
## [1] 3 5
Substitution :
v0[1:2]<--3
v0
## [1] -3 -3 3 4 5
v3[v3<0.5]<-0
v3
## [1] 0.0 0.0 0.0 0.0 0.5 0.6 0.7 0.8 0.9 1.0
v1[is.na(v1)]<-1000
v1
v2[v2>=10]<-v2[v2>=10]/10
v2
4. Matrices
Comme les vecteurs, une matrice est un objet composé d’un ensemble de valeurs toutes du même mode
(numérique, logique, etc.). Mais les éléments sont organisés en lignes et en colonnes. Elles possèdent donc
l’attribut de dimension (dim).
La création peut se faire à l’aide de la fonction matrix.
Exemples de création de matrices :
matrix(0,2,4) matrix(1:6,ncol=2)
cbind(1:3,2:4) rbind(1:3,2:4)
5. Facteurs
Les facteurs sont des vecteurs particuliers permettant le traitement des données qualitatives. Les facteurs
sont de 2 types (comme les variables qualitatives) :
• non ordonnés, par exemple mâle et femelle, appelés factor ;
• ordonnés, par exemple grand, moyen, petit, appelés ordered.
Création :
• directement par la fonction factor :
factor(c(1,22,1,1,2,2))
## [1] 1 22 1 1 2 2
## Levels: 1 2 22
s<-factor(c("m","f","f","m","m",NA,"f","f"))
s
## [1] m f f m m <NA> f f
## Levels: f m
as.factor(c(1,22,1,1,2,2))
## [1] 1 22 1 1 2 2
## Levels: 1 2 22
levels(s) s2<-factor(c(1,0,0,2,1,0,NA,1,1,2))
levels(s2)
## [1] "f" "m"
## [1] "0" "1" "2"
table(s)
nlevels(s2)
## s
## f m ## [1] 3
## 4 3
table(s2)
prop.table(table(s))
## s2
## s ## 0 1 2
## f m ## 3 4 2
## 0.5714286 0.4285714
12
THÈME 2. PREMIÈRES MANIPULATIONS
6. Tableau de données
Un data frame est un tableau de données dont toutes les colonnes doivent avoir la même longueur, mais
peuvent être de modes différents. C’est la structure de base de R pour le traitement des données statistiques.
La création d’un data frame peut s’effectuer en combinant des vecteurs.
Création d’un data frame concernant 5 étudiants de L2 Économie contenant leurs choix de module 4 et leur
moyenne en L1 :
mod<-c("Eco","Eco","MCI","Eco","MCI")
moy<-c(14.2,11.8,12.5,10.4,13)
df<-data.frame(module=mod,moyL1=moy)
df
## module moyL1
## 1 Eco 14.2
## 2 Eco 11.8
## 3 MCI 12.5
## 4 Eco 10.4
## 5 MCI 13.0
str(df)
dim(df) ncol(df)
## [1] 5 2 ## [1] 2
nrow(df) colnames(df)
13
Thème 3
1. Répertoire de travail
On peut également le faire visuellement de la façon suivante : aller dans l’onglet file de la partie en bas à
droite de RStudio, choisir le nouveau répertoire de travail en naviguant dans les dossiers, une fois dans le
dossier, cliquer sur More et sélectionner Setting As Working Directory.
En pratique les données d’une expérience statistique sont enregistrées dans un fichier texte ou csv sous la
forme d’un tableau.
2. Importation de données
On peut créer un tableau de données en utilisant la fonction data.frame, mais le plus souvent on obtient un
tableau en important des données à partir d’un fichier existant car en pratique les données d’une expérience
statistique sont enregistrées dans un fichier texte ou csv sous la forme d’un tableau.
Plusieurs options permettent de paramétrer précisément l’importation de données afin de pouvoir gérer
différents formats de tableau.
Souvent la première ligne indique les noms des colonnes. Pour le prendre en compte lors de l’importation de
données, on rajoute l’option header=TRUE (cette option est par défaut codée FALSE). La première ligne n’est
alors pas considérée comme des valeurs de mesure, mais comme des noms de variables.
La première colonne peut parfois contenir les noms ou numéros des individus. Pour prendre en compte cela,
on utilise l’option row.names=1.
Séparateur de champs
Plusieurs caractères peuvent être utilisés pour séparer les données. Par défaut, la fonction read.table()
suppose que le séparateur est un espace (incluant plusieurs espaces ou des tabulations). Mais d’autres
caractères peuvent être utilisés comme séparateur afin de pouvoir distinguer les valeurs entre elles.
Exemple :
14
THÈME 3. IMPORTATION ET EXPORTATION DE DONNÉES
Séparateur décimal
On peut spécifier le caractère utilisé dans le document comme séparateur décimal classiquement une virgule
ou un point à l’aide de l’option dec.
Quand on souhaite utiliser des données provenant d’un tableur, on commence par les enregistrer au format
csv, puis on les importe à l’aide de la fonction read.csv ou de la fonctions read.csv2. Ces deux fonctions
sont identiques à read.table sauf pour les options par défaut.
• Pour read.csv(), le séparateur de champs est une virgule, le séparateur décimal est un point et par
défaut, header=TRUE.
• Pour read.csv2(), le séparateur de champ est un point-virgule, le séparateur décimal est une virgule et
par défaut, header=TRUE.
Au lieu de taper à la main la ligne de commande permettant l’importation, on peut se faire assister par R.
Pour cela, on clique sur l’onglet Tools, puis Import Dataset, on choisit From Text File... Là une fenêtre s’ouvre
pour choisir le fichier. Une fois le fichier choisi, une fenêtre permet de choisir visuellement les différents
critères d’importation. Cependant il peut parfois y avoir des problèmes, donc il faut aussi savoir importer à
la main.
3. Exportation de données
Après avoir travailler sur des données dans R, on peut souhaiter les exporter/enregistrer dans un fichier. Pour
cela, on utilise la fonction write.table.
write.table(objet, file="nomfichierdesortie", options)
Par défaut, write.table crée un document avec comme séparateur de colonnes des espaces, comme séparateur
décimal le point et il conservent les noms des lignes et des colonnes. Généralement, on utilise
write.table(objet, file="nomfichierdesortie.csv", sep = ";", dec = ".", row.names = FALSE,
col.names = TRUE)
On ne conserve pas les nom de lignes car très souvent dans les data frames, il s’agit simplement de numéro
de ligne.
4. Mise en pratique
1. Télécharger les trois fichiers de données présents sur Celene et les mettre dans un répertoire appelé TP4
et spécifier ce répertoire comme répertoire de travail.
setwd("TP4")
Le chemin dépend de l’emplacement du dossier TP4.
2. Créer un data frame appelé euc0 à partir du fichier euc0 à l’aide de la commande suivante.
euc0<-read.table("euc0.txt")
Vérifier le data frame obtenu à l’aide des commandes head et str.
head(euc0,3)
## V1 V2 V3 V4
## 1 18.25 36 1 L
## 2 19.75 42 1 L
## 3 16.50 33 1 L
15
THÈME 3. IMPORTATION ET EXPORTATION DE DONNÉES
str(euc0)
3. Même chose avec le fichier euc1 qui contient en plus les noms des colonnes. Trouver le bon argument
pour importer correctement les données.
euc1<-read.table("euc1.txt")
head(euc1,3)
## V1 V2 V3 V4
## 1 hauteur circ bloc clone
## 2 18.25 36 1 L
## 3 19.75 42 1 L
Les titres de colonnes ne sont pas pris en compte. Pour que ce soit le cas, il faut utiliser l’argument
scriptheader.
euc1<-read.table("euc1.txt",header=TRUE)
head(euc1,3)
str(euc1)
euc2<-read.table("euc2.txt",header=TRUE)
head(euc2,3)
## hauteur.circ.bloc.clone
## 1 18.25;36;1;L
## 2 19.75;42;1;L
## 3 16.5;33;1;L
str(euc2)
On ne constate qu’une seule variable. Cela est dû au séparateur de champs qui est ici un point-virgule. Il
faut donc le spécifier avec l’argument sep.
16
THÈME 3. IMPORTATION ET EXPORTATION DE DONNÉES
euc2<-read.table("euc2.txt",header=TRUE,sep=";")
head(euc2,3)
str(euc2)
17
Thème 4
Exportation de graphiques
On peut créer différents types de document contenant une image créer avec R. Les formats les plus courants
sont : pdf, jpeg et png.
La syntaxe de base pour la crétion d’un pdf est la suivante.
pdf(file="nom_souhaité_du_fichier_du_graphique.pdf")
#code de construction du graphique
dev.off()
Pour faire une image au format jpeg, respectivement png, il suffit de remplacer la commande pdf par la
commande jpeg, respectivement png, et adapter l’extension du nom de fichier.
jpeg(file="nom_souhaité_du_fichier_du_graphique.jpg")
#code de construction du graphique
dev.off()
#
png(file="nom_souhaité_du_fichier_du_graphique.png")
#code de construction du graphique
dev.off()
Les plus importantes sont height et width qui permettent de spécifier la hauteur et la largeur de l’image
créée. Pour la commande pdf, l’unité par défaut est le pouce alors que pour les autres commandes, il s’agit
du pixel.
La taille de l’écriture est controlée avec l’option pointsize qui par défaut vaut 12.
jpeg(file="nom_souhaité_du_fichier_du_graphique.jpg",width=1920,height=1080,quality=90)
#code de construction du graphique
dev.off()
18
Deuxième partie
Travaux pratiques
19
TP 1
Démarrage :
• lancer R avec RStudio ;
• créer un script qui contiendra vos commandes ;
• penser à structurer votre script en mettant les numéros des parties et des exercices en commentaire.
Si vous ne comprenez pas bien les commandes, utilisez l’aide en tapant help(sqrt), help(log) ou
help(round). Vous pouvez également accéder à l’aide par l’onglet help de la partie en bas à droite de
RStudio.
Exercice 1.
sin (π/2)
Calculer avec R l’expression e0 + √ .
4
On peut stocker en mémoire des données, des résultats, etc. Pour cela, on définit des objets R (on reviendra
sur les différents types d’objets), à l’aide du symbole <- qui permet d’assigner une valeur à un objet.
Par exemple, taper les commandes suivantes.
Exercice 2.
Affecter la valeur 27 à l’objet nommé x.
Affecter la valeur 9 à l’objet nommé X.
Visualiser les valeurs de x et de X.
Que constatez-vous ?
Affecter la valeur 5 à l’objet x. Que constatez-vous ?
Certains objets existent déjà dans R. Taper state.area.
Pour comprendre ces données, utiliser l’aide help(state.area).
2. Les vecteurs
C’est un objet composé d’un ensemble de valeurs toutes du même mode (numérique, logique, etc.). Le nombre
d’éléments constitue l’attribut longueur.
20
TP 1. PRÉSENTATION GÉNÉRALE DU LOGICIEL R
Construction
• encore une :
1:5
Calculs
On peut sélectionner une partie des éléments d’un vecteur en spécifiant les indices des termes nous intéressant.
Voici quelques exemples de sélection d’une partie d’un vecteur. Les exécuter et les commenter dans le script.
On peut également sélectionner une partie d’un vecteur à l’aide d’un vecteur de valeurs logiques.
Autres manipulations
v4<-c(5,1,9,7,3,4,2.5,6.32,8) which(v4>6)
which(v4==9) which(is.na(v1))
Substitution :
v0[1:2]<--3 v1[is.na(v1)]<-1000
v0 v1
v3[v3<0.5]<-0 v2[v2>=10]<-v2[v2>=10]/10
v3 v2
21
TP 1. PRÉSENTATION GÉNÉRALE DU LOGICIEL R
Exercice 3.
Dans le script, noter les commandes répondant aux questions.
1. Créer le vecteur u composé de 5000 uns.
2. Créer le vecteur v suivant : (1.3, 2, 5.2, 4.3, 2).
3. Créer le vecteur A = (−10, −9, . . . , 9, 10) que vous nommerez vecA, à l’aide de la commande :.
Donner sa longueur directement à partir d’une commande sans calcul.
4. Créer le vecteur B = (−1.5, −1.4, . . . , 0.5) que vous nommerez vecB, à l’aide de la commande seq().
5. Créer le vecteur C = (c1 , . . . , cn ) à partir de vecA tel que ci = 1si ai < 0 et ci = ai si ai > 0,
Exercice 4.
Dans le script, noter les commandes répondant aux questions. Pour la dernière question, répondre sous forme
de commentaires.
1. Créer un vecteur à 20 éléments, nommé alea, composé de nombres aléatoires extraits d’une loi normale
d’espérance 3 et d’écart type 1, en tapant la commande rnorm(20,mean=3,sd=1) (consulter l’aide
help(rnorm).
2. Afficher la valeur du cinquième élément.
3. Afficher les valeurs des 5 derniers éléments.
4. Afficher les valeurs des éléments 1, 4, 8, 12 et 18.
5. Afficher les valeurs inférieures à 2.
6. Créer un nouveau vecteur aleabis qui est une copie du vecteur alea, puis affecter la valeur 0 aux
éléments inférieurs à 3 et la valeur 1 aux éléments supérieurs à 3.
7. Proposer une autre façon de répondre à la question précédente à l’aide de la fonction ifelse() (utiliser
l’aide help(ifelse)).
8. Combien d’éléments de alea sont supérieurs à 3 ? Répéter la commande création du vecteur alea.
Avez-vous obtenu le même nombre d’éléments supérieurs à 3 ? Pourquoi ?
3. Les facteurs
Création :
Exemples de commandes :
levels(s) s2<-factor(c(1,0,0,2,1,0,NA,1,1,2))
table(s) levels(s2)
prop.table(table(s)) nlevels(s2)
table(s2)
22
TP 1. PRÉSENTATION GÉNÉRALE DU LOGICIEL R
Exercice 5.
On collecte la couleur des yeux de 12 personnes.
1. Créer un facteur couleurs regroupant les 12 valeurs obtenues qui sont les suivantes : bleu, marron, vert,
marron, marron, bleu, marron, marron, vert, vert, marron, vert.
2. Donner les commandes renvoyant le nombre de modalités de la variable étudiée et l’effectif total.
3. Donner le tableau des effectifs correspondant aux données.
4. Donner une commande renvoyant le tableau des fréquences, à l’aide des fonctions précédentes et d’un
calcul.
5. Donner la commande arrondissant le tableau des fréquences au centième.
23
TP 2
Objectifs du TP :
• découvrir la classe data.frame ;
• réaliser des graphiques simples ;
• soigner la présentation de graphiques ;
• déterminer les paramètres d’une série statistique.
Exercice 6.
La création d’un data frame peut s’effectuer en combinant des vecteurs.
1. Créer le data frame concernant 4 individus contenant leur sexe, leur taille en cm et leur poids en pounds
avec les commandes suivantes :
s<-c("M","F","F","F") p<-c(164,115,140,147)
t<-c(182,165,159,171) df<-data.frame(sexe=s,taille=t,poids=p)
3. Construire un tableau de données nommé data concernant les individus précédents contenant leur sexe,
leur taille en m, leur poids en kg et leur IMC (arrondi à un chiffre après la virgule). L’indice corporel
s’obtient de la façon suivante :
Poids en kg
IMC =
Taille en m2
Exercice 7.
On va travailler sur l’objet InsectSprays déjà existant dans R. Il contient une variable quantitative discrète
que nous allons étudier.
1. Avant de manipuler cet objet, observons différentes façons d’appeler l’aide et utilisons l’aide pour
comprendre le contenu de l’objet InsectSprays.
help(insectspray) help(InsectSprays)
??insectspray ?InsectSprays
4. Tableaux des effectifs, des fréquences et des fréquences cumulées de la variable quantitative discrète
count.
(a) Réaliser le tableau des effectifs de la variable count avec la commande suivante.
24
TP 2. DATA FRAMES ET STATISTIQUES UNIVARIÉES QUANTITATIVES
table(df$count)
(b) Réaliser le tableau des fréquences en consultant l’aide de la fonction prop.table. Pour plus de
lisibilité, arrondir à 3 chiffres après la virgule.
(c) Construire le tableau des fréquences cumulées.
5. Représentations graphiques.
(a) Réaliser un premier graphique grâce à la commande suivante.
plot(df$count)
Essayer la commande suivante. Que permet l’argument pch ?
plot(df$count,pch=4)
(b) Représenter graphiquement les effectifs par modalité avec la commande suivante.
plot(table(df$count),main="Effectifs",xlab="Nombre d'insectes sur chaque parcelle",
ylab="Nombre de parcelles")
(c) Représenter la courbe des fréquences cumulées. Utiliser l’argument type afin d’obtenir le graphique
approprié. Faire attention aux abcisses.
(d) On peut ajouter des droites et du texte sur un graphique. Essayer les commandes suivantes.
plot(df$count,pch=4,main="Nombre d'insectes sur chaque parcelle",
xlab="Numéro de parcelle",ylab="Effectif")
abline(h=10,col="red")
text(x=30,y=10,"seuil")
(e) Consulter l’aide de la commande text et utiliser l’argument adéquat pour que le mot seuil ne soit
plus placé sur la droite sans modifier les coordonnées (30, 10).
(f) On peut tracer plusieurs droites d’un coup avec la commande abline. Effectuer les commandes
suivantes et essayer de les comprendre.
plot(df$count,pch=4,main="Nombre d'insectes sur chaque parcelle",
xlab="Numéro de parcelle",ylab="Effectif")
abline(h=10,col="red")
text(x=30,y=10,pos=3,"seuil",col="darkred")
abline(v=12*1:5+0.5,col="blue")
text(x=12*0:5+5.25,y=rep(25,6),c("A","B","C","D","E","F"),col="blue")
Exercice 8.
Dans cet exercice, nous allons travailler avec le tableau de données trees concernant des cerisiers noirs.
Il contient les informations suivantes : Girth (circonférence), Height (hauteur) et Volume. Les unités sont
anglo-saxonnes, mais cela n’a aucune incidence pour la suite.
1. Commencer par affecter trees dans un nouvel objet nommé data et observer son contenu à l’aide de
commandes déjà rencontrées.
2. Effectuer les commandes ci-dessous et les décrire en commentaire.
summary(data)
mean(data)
mean(data$Height)
quantile(data$Height,0.25)
IQR(data$Girth)
3. Trouver une commande permettant d’obtenir d’un coup tous les quartiles, puis une autre permettant
d’obtenir tous les déciles.
4. Réaliser un histogramme avec la commande suivante.
25
TP 2. DATA FRAMES ET STATISTIQUES UNIVARIÉES QUANTITATIVES
hist(data$Height)
Histo<-hist(data$Height,plot=FALSE)
Histo
0.06
0.04
Densité
0.02
0.00
60 65 70 75 80 85 90
Hauteur
7. Effectuer les commandes ci-dessous et ajouter le bon titre pour l’axe des ordonnées.
bornes<-c(60,70,75,80,90)
hist(data$Height,main="Répartition des arbres \n en fonction de leur hauteur",
xlab="Hauteur",ylab="",breaks=bornes)
26
TP 3
Objectifs du TP :
• découverte de la classe matrix ;
• calcul matriciel ;
• manipulation de tableaux de contingence ;
• représentations graphiques de la distribution d’une variable qualitative.
Exercice 10.
Comme un vecteur, une matrice est un objet composé d’un ensemble de valeurs toutes du même mode
(numérique, logique, etc.). Mais les éléments sont organisés en lignes et en colonnes.
1. La création peut se faire à l’aide de la fonction matrix.
Créer et observer les matrices A, B et C avec les commandes suivantes.
A<-matrix(1:6,nrow=2) C<-matrix(1:6,ncol=2,byrow=T)
A C
<-matrix(1:6,ncol=2)
MB
length(A) length(B)
dim(A) dim(B)
3. On peut également construire des matrices en combinant des vecteurs. Tester les commandes suivantes.
v1<-c(25,-12,8)
v2<-c(4.5,87,-3.2)
cbind(v1,v2)
4.5 87 −3.2
4. Trouver la commande permettant de combiner v1 et v2 afin d’obtenir la matrice .
25 −12 8
5. Réaliser les calculs suivants et noter en commentaire leurs actions.
2. Vérifier que la matrice A est inversible en calculant son déterminant. Calculer son inverse à l’aide de la
commande solve().
3. Vérifier que le produit A × A−1 est égal à la matrice identité.
27
TP 3. CALCUL MATRICIEL ET TABLEAUX DE CONTINGENCE
3 4 2
1 3 2 et calculer le produit de B avec son inverse. Commenter.
4. Créer la matrice B égale à
1 2 1
23x + 31y
=1
5. À l’aide des commandes vues précédemment, résoudre le système suivant .
34x + 46y
=2
6. Résoudre directement l’équation de la question précédente en une seule commande à l’aide de la fonction
solve (consulter l’aide).
2. Sélection de parties.
(a) Tester les deux commandes suivantes.
tab[2,1] tab[1,2]
(b) Extraire de tab un vecteur contant les effectifs des garçons roux et bruns et un autre contenant les
effectifs des roux et des rousses.
3. Utiliser la commande margin.table pour fournir les distributions marginales en effectifs.
margin.table(tab,1) margin.table(tab,2)
(b) On peut également utiliser la commande barplot pour ce type de graphique. L’utiliser pour la
répartition des couleurs de cheveux des filles, faire intervenir l’argument space pour espacer un peu
plus les rectangles produits.
(c) Quel est le principal avantage de la commande barplot ?
(d) Une autre représentation graphique est le diagramme circulaire. Essayer la commande suivante.
pie(tab[1,])
Travailler ce graphique en modifiant les couleurs. Essayer de trouver une façon d’ajouter les pourcen-
tage sur le graphique.
28
Annexe
Exportation de graphique
29
TP 4
Objectifs du TP :
• manipulation des objets de type factor ;
• construction et exportation de graphiques adaptés aux données qualitatives.
Exercice 14.
1. Créer et manipuler les facteurs suivants (levels, tableaux d’effectifs).
f1<-factor(c(1,22,1,1,2,2))
f2<-factor(c("m","f","f","m","m",NA,"f","f"))
Exercice 15.
Dans cet exercice, on va travailler les représentations graphiques adaptées aux situations où des variables
qualitatives interviennent.
On va utiliser les données euc2. Les données contiennent la hauteur (hauteur) et la circonférence (circ) de
différents types d’eucalyptus (clone) plantés dans différents sols (bloc).
1. Donner la structure et un résumé (moyenne, etc.) des différentes données. Commenter.
2. Attacher le data frame.
3. Représenter la hauteur en fonction du sol avec la commande plot(hauteur~bloc). Que pensez-vous de
cette représentation graphique ?
4. Les variables type de sol et clone sont-elles qualitatives ou quantitatives ? Quel est leur mode dans R ?
5. Quand on souhaite représenter une variable quantitative en fonction d’une variable qualitative, une série
de diagrammes en boîte est bien adaptée. Cela se fait automatiquement avec la fonction plot quand la
variable explicative est considérée comme un facteur. Effectuer la commande suivante.
plot(hauteur~clone)
On peut forcer la représentation en diagramme en boîte avec la fonction boxplot ou faire en sorte que R
considère la variable en tant que facteur.
(a) Effectuer des diagrammes en boîte de la hauteur en fonction du type de sol à l’aide de la fonction
boxplot.
(b) Rajouter à la commande boxplot précédente les options suivantes : range=0 et boxwex=0.5.
Que font ces deux options ?
(c) Changer le type de la variable bloc de numeric à factor avec la commande suivante.
bloc<-as.factor(bloc)
(d) Renommer les levels de la nouvelle variable bloc avec la commande suivante.
30
TP 4. IMPORTATION DE DONNÉES ET VARIABLES QUALITATIVES
levels(bloc)<-c("sol_A","sol_B","sol_C")
8. Représenter uniquement les hauteurs pour les clones qui ne sont pas du type DH avec les commandes
suivantes.
filtre_autre<-clone=="autres"
plot(hauteur[filtre_autre]~bloc[filtre_autre], xlab="Type de sol",
ylab="Hauteur des clones de type non DH")
9. Enregistrer dans le data frame euc2 les modifications apportées à bloc et clone avec les commandes
suivantes.
euc2$bloc<-bloc
euc2$clone<-clone
10. Créer un nouveau data frame intitulé eucAB ne contenant que les individus des sols A et B et observer le
nombre de levels de la variable bloc ainsi que son tableau d’effectifs.
11. Utiliser la commande droplevels pour améliorer la variable bloc.
12. Utiliser la commande table pour construire le tableau de contingence des types de sols en fonction des
différents clones.
31
TP 5
Objectifs du TP :
• extraire des individus et/ou des variables ;
• modifier/créer des variables ;
• déterminer les paramètres de sous-groupes.
Exercice 17.
Les données étudiées sont issues d’une enquête réalisée au début des années 80, concernant les étudiants
américains. Elles ont été utilisées pour étudier l’effet des universités communautaires sur le niveau scolaire.
Les données sont contenues dans le fichier student.txt qui contient les informations suivantes :
• female : 1 = female / 0 = male ;
• black : 1 = black / 0 = not black ;
• hispanic : 1 = hispanic / 0 = not hispanic ;
• dadcoll : 1 = père diplômé du supérieur / 0 = père non diplômé du supérieur ;
• momcoll : 1 = mère diplômée du supérieur / 0 = mère non diplômée du supérieur ;
• ownhome : 1= famille propriétaire de son logement / 0 = famille non propriétaire ;
• urban : 1 = école en zone urbaine / 0 = école en zone rurale ;
• dist : distance université-domicile en dizaine de miles ;
• tuition : frais de scolarité en milliers de $ ;
• ed : nombre d’années de scolarisation ;
• incomehi : 1 = revenu familial annuel > $25,000 / 0 = revenu familial annuel 6 $25,000 ;
• county : numéro de code du comté ;
• state : numéro de code de l’état.
1. Importer les données du fichier student.txt dans un data frame du même nom et l’observer.
2. Effectuer les commandes ci-dessous et les décrire.
attach(student)
mean(tuition)
mean(tuition[female==1])
mean(tuition[ed>=14])
mean(tuition[!(ed<14)])
quantile(dist[urban==1],0.25)
sd(dist[hispanic=1&tuition>1])
3. Déterminer la médiane du nombre d’années d’étude des femmes dont la mère est diplômée du supérieur
ainsi que le troisième quartile du nombre d’années d’étude des hispaniques dont les frais de scolarité sont
supérieurs à 1000 $.
4. Créer une commande qui permet de vérifier qu’aucun étudiant n’ait été codé simultanément black et
hispanic.
5. Effectuer les commandes suivantes et expliquer ce qu’elles produisent.
32
TP 5. MANIPULATIONS AVANCÉES DE DATA FRAME
tab1<-student[,c(8:10)]
head(tab1)
tab2<-student[-c(1,3),]
head(tab2)
tab3<-student[female==1,]
head(tab3)
tab4<-tab3[,-1]
head(tab4)
tab5<-student[female==1,-1]
head(tab5)
tab6<-student[county==28&tuition>=1.2,-(1:3)]
head(tab6)
6. Extraire dans un data frame intitulé tab7 les étudiants hispaniques dont le revenu familial est supérieur
à 25.000 $ et supprimer les variables hispanic, black et incomehi. Combien y a-t-il d’individus ?
7. À partir de cette question on va créer et transformer des variables du data frame. Pour éviter toute
confusion entre création et transformation d’une variable, il est préférable d’annuler la commande attach.
On effectue ceci avec la commande suivante.
detach(student)
by(studentbis$score,commu,mean)
13. En utilisant la commande by et son aide, renvoyer les quartiles des bytest par sexe.
14. On souhaite obtenir les écarts type des bytest par sexe. Cependant la commande sd renvoie l’écart type
corrigé. On peut créer la fonction et calculant l’écart type avec le commande suivante.
et<-function(x) {(length(x)-1)/length(x)*sd(x)}
et(studentbis$score)
L’utiliser pour renvoyer les écarts type des bytest par sexe.
15. Construire une nouvelle variable intitulée par.sup qui vaut 0 si aucun parent n’est diplômé du supérieur
et 1 sinon. Renvoyer les déciles du bytest pour ces deux groupes.
33
Annexe
Exercices d'annales
Voici trois extraits de contrôle sur poste ou de session 2. Il n’y a et n’aura pas de correction. Par contre, vous
avez bien sûr le droit de nous poser des questions et de nous montrer votre travail sur ces exercices d’annales
pour voir si cela correspond bien à ce qui est attendu.
34
Annexe. Exercices d’annales
35
Annexe. Exercices d’annales
36