1 Introduction à R 3
1.1 Données utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Installation de R et RStudio . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Installation de R . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Installation de RStudio . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.3 Comment executer un code . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Architecture de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Utilisation de packages existants . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 A propos de l’aide . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Emplacement des packages . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Information sur les packages . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Notions de base 8
2.1 Prise en main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Environnement de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Créer un document RMarkdown . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Les commandes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.1 Caractères spéciaux : . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.2 Les entrées/sorties . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Les objets dans R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5.1 Les commandes de base . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.2 Classes et attributs . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.3 Les valeurs manquantes . . . . . . . . . . . . . . . . . . . . . . . 10
2.6 Créer et manipuler des objets . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6.1 Les structures de base . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6.2 Les nombres et les vecteurs . . . . . . . . . . . . . . . . . . . . . 11
2.6.3 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.4 Les facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6.5 Matrices et tableaux . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6.6 Les arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.7 Tables de données . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.8 Tables statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.6.9 Les ts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.10 Notion d’objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1
2.7 Lire et enregistrer des données dans un fichier . . . . . . . . . . . . . . . . 28
2.7.1 Lire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7.2 Le package data.table . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7.3 Enregistrer des données . . . . . . . . . . . . . . . . . . . . . . . 29
2.7.4 Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.7.5 Solution de l’exercice . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.8 Statistique descriptive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.8.1 Indicateurs statistiques . . . . . . . . . . . . . . . . . . . . . . . . 30
2.8.2 Quantiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.8.3 Résumés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.8.4 Statistiques bidimensionnelles . . . . . . . . . . . . . . . . . . . . 33
2.9 Les graphiques avec R . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.9.1 Les principales commandes graphiques . . . . . . . . . . . . . . . 35
2.10 Graphiques statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.10.1 Diagramme en bâtons . . . . . . . . . . . . . . . . . . . . . . . . 38
2.10.2 Diagrammes circulaires . . . . . . . . . . . . . . . . . . . . . . . 40
2.10.3 Diagrammes à moustaches . . . . . . . . . . . . . . . . . . . . . . 42
2.10.4 Histogrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.10.5 Diagrammes matriciels . . . . . . . . . . . . . . . . . . . . . . . . 46
2
Chapitre 1
Introduction à R
3
1.2 Installation de R et RStudio
1.2.1 Installation de R
R est un logiciel open source et gratuit. Son code source est public : il est accessible à tout
le monde et peut être modifié. Il est diffusé selon le principe de licence GNU et accessible :
http ://cran.r-project.org.
Sur cette page, on trouve une section appelée Download qui comporte un lien vers le site
de téléchargement appelé CRAN (Comprehensive R Archive Network ). L’installation de R
varie selon le système d’exploitation (Windows, Mac OS X ou Linux) mais les fonctionnali-
tés sont les mêmes et les programmes sont portables d’un système à l’autre.
Il existe des sites miroirs du CRAN dans de nombreux pays. En particulier en France,
voici trois miroirs actuellement disponibles :
— http ://cran.univ-lyon1.fr/ hébergé par le département de Biométrie de l’Université
de Lyon ;
— http ://mirror.ibcp.fr/pub/CRAN/ hébergé par l’institut de Biologie et de Chimie des
protéines (IBCP) de Lyon ;
— http ://ftp.igh.cnrs.fr/pub/CRAN/ hébérgé par l’institut de Génétique humaine de Mont-
pellier.
1.3 Architecture de R
Le logiciel R est entièrement modulaire. Le programme R est construit autour d’un noyau
central qui définit principalement un analyseur syntaxique (appelé parser en anglais) et un
interpréteur de commandes. Il comporte aussi la définition de quelques commandes de base
4
dites primitives. R est en effet un ensemble de commandes servant à exécuter des tâches
statistiques : l’interpréteur du noyau sert principalement à comprendre et à exécuter les com-
mandes.
Autour du noyau central qui assure le fonctionnement de l’ensemble, les fonctionnali-
tés sont définies dans des modules extérieurs appelés des packages qui sont chargés à la
demande.
Ces packages contiennent de nouvelles fonctions et des jeux de données. Nous expli-
quons ci-dessous l’utilisation de base des packages : comment les charger et comment en
installer de nouveaux.
5
La fonction .libPaths peut aussi être utilisée pour définir un nouvel emplacement :
.libPaths("/home/xxx/R/local/library")
Il existe, d’autre part, deux variables globales définissant des chemins d’accès :
> (.packages())
Sous cette forme, la fonction indique seulement les packages installés sur la machine. Il faut
ajouter l’argument all qui prend une valeur logique (TRUE ou FALSE) :
.packages(all=TRUE)
Nom Description
base fonctions de base
compiler génération de code machine
datasets jeux de données classiques
graphics fonctions graphiques simples
stats fonctions statistiques ordinaires
1.7 Objectifs
Savoir :
— se servir de l’aide en ligne de R ;
— manipuler les objets de base de R : vecteur, matrice, liste, data.frame ;
— programmer une fonction élémentaire.
6
De nombreux tutoriels sont accessibles en ligne, comme par exemples :
Venables W. and Smith D. An introduction to R. Distribué avec R.
Paradis E. R pour les débutants.
http://edutechwiki.unige.ch/fr/Tutoriels_R
https://larmarange.github.io/analyse-R/analyse-R.pdf
7
Chapitre 2
Notions de base
8
2.4 Les commandes de base
R Appeller R. > s’affiche, indiquant que R est prêt à
fonctionner.
q() Quitter R. Save workspace image ? [y/n/c] s’affiche
−→ Sauvegarder ou non l’espace de travail.
INTERRUPT (e.g. C-c ou esc) Arrêter la commande en cours.
9
2.5.1 Les commandes de base
objects() ou ls() Afficher la liste des objets en mémoire.
ls(pat="a") Afficher la liste des objets contenant le caractère
"a".
ls(pat=".a") Afficher la liste des objets commençant par "a".
ls.str() Afficher la liste des objets en mémoire avec des
details sur ces objets.
rm(x), rm(x,y) Effacer les objets x ou x et y de la mémoire.
rm(list=ls()), rm(list=ls(pat=".a")) Effacer tous les objets ou certains objets de la
mémoire.
10
R > x<-15
R > 15->x
R > x=15
R > x="blabla"
On peut convertir la classe des objets à l’aide de commandes comme as.matrix, as.data.frame,
as.ts..., leur mode à l’aide de as.numeric, as.logical, as.character, as.complex, leurs attri-
buts à l’aide de attr(x,"dim")<-.
11
numeric(n) Créer un vecteur de taille n de mode numérique ne
contenant que des 0.
logical(n) Créer un vecteur de taille n de mode logique ne conte-
nant que des FALSE.
character(n) Créer un vecteur de taille n de mode caractère ne
contenant que des " ".
x <- c(1,2,3,4,5,6,7,8,9,10) Créer un vecteur contenant les valeurs
1,2,3,4,5,6,7,8,9,10.
x <- 1 :10 Créer un vecteur contenant une sequence régulère de
nombres entiers de 1 a 10.
x <- seq(1,5,by=0.5) Créer un vecteur contenant une séquence de nombres
réels dont le premier est 1, le dernier 5, l’incrément
utilise dans la progression de la sequence 0.5.
x <- seq(1,5,length=100) Créer un vecteur contenant une sequence régulière de
taille 100 de nombres reels dont le premier est 1, le
dernier 5.
x <- rep(1,100) Créer un vecteur contenant 100 fois le nombre 1.
x <- rep(1 :4,25) Créer un vecteur contenant 25 fois la suite 1,2,3,4.
x <- sequence(c(10,5)) Créer un vecteur contenant une suite de séquences
de nombres entiers qui chacune se termine par les
nombres 10 et 5.
x <- c("a","b","c") Créer un vecteur contenant les caractères a, b et c.
x <- rep("a",100) Créer un vecteur contenant 100 fois le caractère a.
noms <- paste("A",1 :5,sep=" ") Créer un vecteur contenant les caractères A1, A2, A3,
A4, A5.
cit <- "Elle dit : " blablabla"" Créer une chaîne de caractères des guillemets.
cat(cit) Afficher une chaîne de caractères contenant des guille-
mets.
x <- c(y,z) Créer un vecteur qui concatène les vecteurs y et z.
On peut générer des vecteurs contenant des données aléatoires à l’aide de la commande
rfun(n, p1 , p2 , . . .), ou fun indique la loi de probabilité, n le nombre de données générées,
p1 , p2 , . . . les paramètres de la loi de probabilité.
Exemples : rnorm(n,0,1), rexp(n,1), rpois(n,2), rchisq(n,100), rt(n,100), rf(n,100,50),
rbinom(n,100,0.5), runif(n,0,1)...
Remarque : On peut remplacer dans ces fonctions la lettre r par d, p ou q pour obtenir la
densité de probabilité, la fonction de répartition ou la valeur des quantiles.
12
Les opérateurs de comparaison sont donnés par < (inférieur à), > (supérieur à),<=
(inférieur ou égal à), >= (supérieur ou égal à), == (égal à), ! = (différent de).
Ces opérateurs agissent sur les vecteurs élément par élément. Pour effectuer une com-
paraison globale de deux objets, on peut utiliser identical.
Les opérateurs logiques sont donnés par !x (non logique), x&y (et logique opérant
sur tous les éléments de x et y),
x&&y (et logique opérant sur le premier élément de x et y), x|y (ou logique opérant
sur tous les éléments de x et y), x||y (ou logique opérant sur le premier élément),
xor(x,y) (ou exclusif).
On code l’inégalité 0 < x < 1 par x > 0 & x < 1.
• Extraire une partie d’un vecteur
La śelection d’une partie d’un vecteur x s’opère à l’aide de la commande x[vecteur],
ou vecteur est soit un vecteur d’entiers positifs, soit un vecteur d’entiers négatifs, soit
un vecteur logique.
13
sum(x) Calculer la somme des éléments de x.
prod(x) Calculer le produit des éléments de x.
diff(x) Calculer la différence entre les éléments consécutifs
de x.
max(x) Donner le maximum des éléments de x.
min(x) Donner le minimum des éléments de x.
which.max(x) Donner l’indice du maximum des éléments de x.
which.min(x) Donner l’indice du minimum des éléments de x.
range(x) Donner le minimum et le maximum des éléments de
x.
length(x) Donner le nombre d’éléments dans x.
mean(x) Calculer la moyenne des éléments de x.
median(x) Calculer la médiane des éléments de x.
var(x), cov(x) Calculer la variance empirique des éléments de x.
var(x,y), cov(x,y) Calculer la covariance entre x et y.
corr(x,y) Calculer la corrélation linéaire entre x et y.
sd(x) Calculer l’écart type empirique de x.
quantile(x) Calculer le quantile empirique de x.
round(x,n) Arrondir les éléments de x a n chiffres après la virgule.
rev(x) Inverser l’ordre des éléments de x.
sort(x) Ordonner les éléments de x.
rev(sort(x)) Ordonner les éléments de x dans l’ordre descendant.
rank(x) Donner les rangs des éléments de x.
order(x) Donner les coordonnées du plus petit élément de x, du
deuxième plus petit élément de x, etc.
pmin(x,y), pmax(x,y) Donner un vecteur dont le ième élément est le mini-
mum ou le maximum entre x[i] et y[i].
cumsum(x), cumprod(x) Donner un vecteur dont le ième élément est la somme
ou le produit des éléments x[1] à x[i].
cummin(x), cummax(x) Donner un vecteur dont le ième élément est le mini-
mum ou le maximum des éléments x[1] à x[i].
match(x,y) Donner un vecteur de même longueur que x contenant
les éléments de x qui sont dans y (NA sinon).
which(x==2) Donner les indices des éléments de x égaux a 2.
choose(n,k) Calculer les combinaisons de paramètres n et k.
unique(x) Supprimer les éléments dupliqués de x.
table(x) Créer un tableau des effectifs des différentes valeurs
de x.
sample(x,k) Re-échantillonner aléatoirement et sans remise k élé-
ments dans x.
sample(x,k,REPLACE=TRUE) Re-échantillonner aléatoirement et avec remise k élé-
ments dans x.
• Manipuler des vecteurs logiques
all(x) Tester si tous les éléments de x sont TRUE.
any(x) Tester si au moins un des éléments de x est TRUE.
14
On peut utiliser les opérateurs arithmétiques, les FALSE étant transformés en 0, les
TRUE en 1.
Construction de listes
Les listes sont créées au moyen de la fonction list. Les arguments de cette fonction sont
les objets ou valeurs qui constituent les éléments de la liste. Ces éléments peuvent être nom-
més en utilisant une syntaxe de la forme nom=valeur pour les arguments. Si aucun nom
n’est spécifié, les éléments seront simplement identifiés par leur indice. Le premier élément
correspond à l’indice 1, comme pour les vecteurs.
Dans l’exemple qui suit, on crée une liste comportant une valeur numérique entière, une
valeur logique et un vecteur :
$b
[1] "abc" "def"
$c
[1] FALSE TRUE
15
> L1
[[1]]
[1] 12345
[[2]]
[1] TRUE
[[3]]
[1] 12.0 13.0 11.0 10.5 9.0
> L2
$ID
[1] 12345
$traitement
[1] TRUE
$taux
[1] 12.0 13.0 11.0 10.5 9.0
> names(L2)
[1] "ID" "traitement" "taux"
Indexation
> L1[3]
[[1]]
[1] 12.0 13.0 11.0 10.5 9.0
> L1[[3]]
16
> y <- c("B","C","B","C","B","B","A","A","B","A","A","C")
> y
[1] "B" "C" "B" "C" "B" "B" "A" "A" "B" "A" "A" "C"
Dans l’exemple précédent, les seuls niveaux présents sont A, B et C mais on peut ima-
giner que les valeurs possibles sont toutes les lettres de A à E et que simplement, dans le
vecteur y, les lettres D et E n’étaient pas représentées.
Dans ce cas, le facteur serait construit de la manière suivante :
> F <- factor(y,levels=LETTERS[1:5])
> F
[1] B C B C B B A A B A A C
Levels: A B C D E
Dans l’exemple suivant, on renomme automatiquement les niveaux avec une lettre N qui
est suffixé par un entier entre 1 et 5 :
> factor(y,levels=LETTERS[1:5],labels="N")
[1] N2 N3 N2 N3 N2 N2 N1 N1 N2 N1 N1 N3
Levels: N1 N2 N3 N4 N5
Les niveaux N1, N2, etc. correspondent aux lettres A, B, etc. de l’exemple précédent.
Il existe deux fonctions utiles concernant les niveaux d’un facteur :
— la fonction levels renvoie un vecteur contenant les niveaux du facteur ;
— la fonction nlevels renvoie le nombre de niveaux déclarés dans le facteur.
Par exemple :
> levels(F)
[1] "A" "B" "C" "D" "E"
> nlevels(F)
[1] 5
17
factor(c(1,2,3)), factor(1 :3) Créer un facteur de valeurs 1,2,3 et de ni-
veaux 1,2,3.
factor(1 :3,levels=1 :5) Créer un facteur de valeurs 1,2,3 et de ni-
veaux 1,2,3,4,5.
factor(1 :3,labels=c("A","B","C")), Créer un facteur de valeurs A,B,C, et de ni-
factor(c("A","B","C")) veaux A,B,C.
factor(1 :4,exclude=3) Créer un facteur de valeurs 1,2,NA,4 et de
niveaux 1,2,4.
gl(2,3) Créer un facteur de valeurs 1,1,1,2,2,2 et de
niveaux 1,2.
gl(2,3,length=30) Créer un facteur de valeurs 1,1,1,2,2,2, répé-
tées 5 fois (longueur totale=30) de niveaux
1,2.
gl(2,3, label=c("A","B")) Créer un facteur de valeurs A,A,A,B,B,B de
niveaux A,B.
18
L’attribut dimnames est stocké comme une liste comportant une composante pour chaque
dimension. Par exemple, pour une matrice de taille 3 × 4, l’attribut dimnames est une liste
à deux éléments : premier élément est un vecteur contenant les noms des 3 lignes, le second
est un vecteur contenant les noms des 4 colonnes.
Création de matrices
On fabrique une matrice au moyen de la fonction matrix.
> m<-matrix(1:12,nrow=3,ncol=4)
> m
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
matrix(1,nr=2,nc=2) Créer une matrice 2 × 2 ne contenant que des 1.
matrix(1 :6,2,3) Créer une matrice 2 × 3 remplie colonne par colonne
par les valeurs du vecteur 1 :6.
matrix (1 :6,2,3,byrow=TRUE) Créer une matrice 2 × 3 remplie ligne par ligne par les
valeurs du vecteur 1 :6.
x=1 :6 ;dim(x)=c(2,3) Idem a matrix(1 :6,2,3).
diag(3) Créer la matrice identité 3 × 3. La
diag(c(1,2,3)) Créer une matrice diagonale d’éléments diagonaux
1,2,3.
diag(c(1,2,3),nr=3,nc=5) Créer une matrice 3 × 5 dont la première sous-matrice
3 × 3 est diag(c(1,2,3)).
rbind(x,y), cbind(x,y) Juxtaposer les matrices x et y (cote à cote ou l’une au
dessous de l’autre).
fonction matrix possède aussi un argument optionnel dimnames pour déclarer des noms de
lignes et des noms de colonnes. En voici un exemple :
> n<-matrix(1:12,nr=3,dimnames=list(c("U","V","W"),c("A","B","C","D")))
> n
A B C D
U 1 4 7 10
V 2 5 8 11
W 3 6 9 12
On peut aussi créer un tableau à partir d’un vecteur simplement en lui attachant un attribut
dim. Les deux instructions suivantes commencent par créer un vecteur de longueur 12 puis
modifient sa dimension pour en faire une matrice de taille 3 × 4.
> v<-1:12
> dim(v)<-c(3,4)
> v
[,1] [,2] [,3] [,4]
19
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
Il est aussi une fonction dimnames qui permet de nommer les lignes et les colonnes
d’une matrice déjà existante. Par exemple :
> dimnames(n)<-list(c("X","Y","Z"),c("P","Q","R","S"))
> n
P Q R S
X 1 4 7 10
Y 2 5 8 11
Z 3 6 9 12
Alternativement, on peut utiliser les fonctions rownames et colnames pour déclarer séparé-
ment des noms de lignes ou des noms de colonnes.
La fonction scan permet aussi de saisir les éléments d’une matrice de manière interactive.
En voici un exemple où on construit une matrice à 2 lignes et 3 colonnes :
> matrix(scan(),nrow=2)
1: 1 2
3: -1 1
5: 0 3
7:
Read 6 items
[,1] [,2] [,3]
[1,] 1 -1 0
[2,] 2 1 3
> matrix(scan(),nrow=2,byrow=TRUE)
1: 1 2 3
4: 0 -1 -2
7:
Read 6 items
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 0 -1 -2
20
> m[2:3,3:4]
[,1] [,2]
[1,] 8 11
[2,] 9 12
> m[,4]
[1] 10 11 12
> m[,4,drop=FALSE]
[,1]
[1,] 10
[2,] 11
[3,] 12
On peut, comme pour les vecteurs, extraire des éléments d’une matrice x à l’aide de
vecteurs logiques.
• Les opérateurs et fonctions mathématiques
Les opérateurs disponibles pour les vecteurs sont également utilisables pour des matrices
de même dimension, tout comme la plupart des fonctions mathématiques. Ils agissent élé-
ment par élément.
On peut appliquer ces opérateurs ou fonctions mathématiques à certains éléments d’une
matrice seulement à l’aide de la commande apply() :
21
2.6.6 Les arrays
Les arrays sont des tableaux à k dimensions, généralisant les matrices qui sont en fait des
arrays avec k = 2.
> A<-array(1:24,dim=c(3,4,2))
> A
, , 1
, , 2
Beaucoup des commandes disponibles pour les matrices se généralisent naturellement aux
arrays.
22
> df<-data.frame(poids=c(53,82,75,56,95),
fumeur=c(TRUE,FALSE,TRUE,FALSE,FALSE),
sexe=c("F","H","H","F","H"),
row.names=c("Alice","Albert","Achille","Anne","Aristide"))
> df
poids fumeur sexe
Alice 53 TRUE F
Albert 82 FALSE H
Achille 75 TRUE H
Anne 56 FALSE F
Aristide 95 FALSE H
On peut aussi nommer les lignes d’un tableau de données déjà existant au moyen de la
fonction rownames comme ceci :
> rownames(df)<-c("Alice","Albert","Achille","Anne","Aristide")
> rownames(df)[5]<-"Aristode"
L’indexation des tableaux de données se fait exactement comme celle des matrices. La valeur
de la 2e variable pour le 4e individu du tableau est :
> df[4,2]
[1] FALSE
De même, toute la première colonne du tableau de données peut être désignée comme df [, 1]
ou, en utilisant le nom de la colonne plutôt que l’indice, comme df [, "poids"] :
> df[,"poids"]
[1] 53 82 75 56 95
23
> V <- c(-2,1,0,2,2,0,-1,1,-1,1,0,-2,2,2,2,2,-2,-2,1,-2)
> table(V)
V
-2 -1 0 1 2
5 2 3 4 6
La première ligne affichée est l’ensemble des valeurs présentes dans le vecteur et le deuxième
indique le nombre de fois que chaque valeur est rencontrée.
De manière générale, la fonction table s’applique aux colonnes d’un tableau de données.
Pour obtenir une table de contingence de dimension 2, il faut disposer de deux variables dans
un tableau de données.
A titre d’exemple, on va se donner un deuxième vecteur arbitraire W de 20 éléments
prenant les valeurs 1 et 2 :
24
données=data.frame(y,x) Créer un tableau de données contenant le vecteur y et
le facteur correspondant x.
summary(données) Afficher un résumé de données.
données=data.frame(taille=y,sexe=x) Changer les noms de x et y.
names(données) Afficher les noms des objets contenus dans données.
données=data.frame(taille=y,sexe=x, Donner des noms aux colonnes et aux lignes.
row.names=paste("Individu",1 :6,sep=""))
données$taille, données[["taille"]] Extraire l’objet taille du data.frame données.
données[[1]] Extraire le premier objet contenu dans données.
attach(données) Rajouter données dans la liste des répertoires de travail
en position 2. Enregistrer dans ce répertoire les objets
taille et sexe du data.frame données.
search() Vérifier la position de données.
taille Retourner les valeurs de données$taille.
find(taille) Trouver le répertoire dans lequel se trouve l’objet
taille.
ls(pos=2) Afficher la liste des objets du deuxième répertoire, ici
données.
taille[sexe=="M"] Extraire les éléments de taille correspondant aux indi-
vidus de sexe masculin.
mafonction(taille[sexe=="M"]) Appliquer mafonction aux éléments de taille corres-
pondant aux individus de sexe masculin.
detach(données) Détacher le répertoire données.
> paste("X",1:5,sep="-")
[1] "X-1" "X-2" "X-3" "X-4" "X-5"
> paste(c("X","Y"),1:5,"txt",sep=".")
[1] "X.1.txt" "Y.2.txt" "X.3.txt" "Y.4.txt" "X.5.txt"
> paste(c("X","Y"),1:5,sep=".",collapse="+")
[1] "X.1+Y.2+X.3+Y.4+X.5"
L’argument collapse rassemble tous les éléments dans un vecteur de longueur 1. Pour
l’extraction on utilise la fonction substr :
> substr("freerider",5,9)
[1] "rider"
25
2.6.9 Les ts
On ne détaillera pas ici les commandes propres aux séries temporelles. On précisera juste
la commande permettant de créer de telles séries temporelles :
ts(data,start=,end=,frequency=,deltat=,ts.eps=,class,names).
> T <-table(F)
> class(T)
[1] "table"
le mot vecteur est ici sous-entendu : il faut comprendre respectivement vecteur numérique,
vecteur entier, vecteur de chaînes de caractères.
26
Attributs et composantes d’un objet
Les objets, au sens qui a été expliqué dans la section précédente, possèdent des attributs
et parfois des composantes.
La fonction attributes permet de connaître les attributs attachés à un objet. En voici un
exemple dans le cas d’une matrice :
$dimnames
$dimnames[[1]]
[1] "X" "Y"
$dimnames[[2]]
[1] "A" "B"
La fonction attributes renvoie une liste de tous les attributs avec leur valeur. Pour connaître
seulement les noms des attributs, on peut appliquer la fonction names à la liste renvoyée,
comme ceci :
> names(attributes(M))
[1] "dim" "dimnames"
Il existe aussi une fonction attr pour obtenir la valeur d’un attribut particulier. Par exemple :
> attr(M,"dim")
[1] 2 2
Dans le cas d’une liste, il ne faut pas confondre les attributs avec les composantes. Les
attributs sont obtenus au moyen de la fonction attributes tandis que les composantes sont
obtenues au moyen de la fonction names. Voici un exemple simple pour faire la distinction :
27
> L <- list(x=1:5,y="abcde")
> names(L)
[1] "x" "y"
> attributes(L)
$names
[1] "x" "y"
read.table(file,header=F
ALSE,sep="",quote="\"f",dec=".",
row.names,col.names,
as.is=FALSE,
na.strings="NA",colClasses=NA,nrows=-1,skip=0,check.names=TRUE,
fill= !blank.lines.skip,
strip.white=FALSE,blank.lines.skip=TRUE,comment.char="\sharp").
La fonction scan est plus flexible que read.table dans le sens ou elle permet de spécifier
le mode des variables.
La fonction read.fwf sert a lire des fichiers ou les données sont dans un format de largeur
fixée. Les options sont les mêmes que pour read.table sauf widths qui spécifie la largeur des
champs.
28
Importation avec fread
fread permet la lecture de fichiers “plats” et permet aussi l’importation de données volu-
mineuses.
Prenons l’exemple du fichier listings.csv
#Importation avec fread
library(data.table)
system.time(read.table(file.choose(),header = TRUE,sep=";"))
cat("Taille en (MB):", round(file.info(file.choose())$size/1024^2),"\n")
system.time(fread(file =file.choose()))
2.7.4 Exercice
On cherche à étudier les données de Hoesmer et Lemeshow (1989) stockées dans la
library MASS de R sous le nom de birthwt. Le but de cet exercice n’est pas de mener cette
étude, mais d’apprendre à manipuler les données fournies. On verra l’étude complète dans
un TP ultérieur.
1. Importer les données. De quelle classe sont-elles ? Quelles sont les classes des objets
contenus dans birthwt ?
2. Transformer low, race, smoke en facteurs dans les données d’origine birthwt.
3. Transformer ptl en un facteur prenant la valeur 0 si ptl=0, 1 sinon. Faire la même
chose pour ht et ui.
Transformer ftv en un facteur dé niveaux "0", "1" et "2+".
4. Eliminer toutes les données correspondant aux mères âgées de moins de 20 ans et de
plus de 41 ans (compris).
5. Calculer la moyenne des poids de naissance pour chacun des différents facteurs (sauf
low).
6. Calculer la moyenne des poids de naissance pour les classes de femmes agées de 21
à 25 ans, de 26 à 30 ans, de 31 à 35 ans, de 36 à 40 ans.
7. Calculer la moyenne des poids de naissance pour 4 classes de femmes de même
cardinal (à un près), rangées par âge croissant.
8. Retransformer le facteur smoke en entier. Que remarque-t-on ?
29
2.7.5 Solution de l’exercice
Facteurs de risque associés aux nourrissons de faible poids
Nous commençons ainsi. Vous ne devez pas exécuter la bibliothèque commande ("MASS")
si vous utilisez toujours la même session de R. Essayez de taper search(), et si vous voyez
"package : MASS" parmi les paquets listés, il est déjà chargé.
> IQR(v)
[1] 9.9
> mad(v)
[1] 7.56126
30
D’autres fonctions renvoient un vecteur : c’est le des quantités cumulées (somme, pro-
duit, minimum, maximum). En voici quelques exemples :
> cumsum(v)
[1] 0.0 0.6 1.8 3.6 6.0 9.0 12.6 16.8 21.6 27.0
33.0 39.6
[13] 46.8 54.6 63.0 72.0 81.6 91.8 102.6 114.0 126.0 138.6
151.8 165.6
[25] 180.0 195.0 210.6 226.8 243.6 261.0 279.0 297.6 316.8 336.6
> cummax(v)
[1] 0.0 0.6 1.2 1.8 2.4 3.0 3.6 4.2 4.8 5.4 6.0 6.6
7.2 7.8 8.4
[16] 9.0 9.6 10.2 10.8 11.4 12.0 12.6 13.2 13.8 14.4 15.0 15.6
16.2 16.8 17.4
[31] 18.0 18.6 19.2 19.8
On a vu précédemment que les valeurs manquantes sont désignées par le symbole spécial
NA. Dans le calcul des indicateurs statistiques, la présence de ces valeurs est en général un
problème : on ne peut pas calculer, par exemple, la moyenne de valeurs qui n’existent pas.
On peut cependant décider de les ignorer en utilisant un argument appelé na.rm (rm est
l’abréviation de remove).
A titre d’exemple, on va augmenter la taille du vecteur v de 5 unités mais sans donner de
valeur aux nouveaux éléments. Ils recevront alors la valeur NA.
> length(v)<-length(v)+5
> mean(v)
[1] NA
> mean(v,na.rm=TRUE)
[1] 9.9
> sd(v)
[1] NA
> sd(v,na.rm=TRUE)
[1] 5.974948
La fonction cor calcule le cœfficient de corrélation linéaire entre deux vecteurs numé-
riques de même longueur. Elle prend en argument les deux vecteurs. Par exemple :
> w=v^2
> cor(v,w)
[1] 0.9665001
Les fonctions pmin et pmax calculent respectivement les minima et les maxima paral-
lèles entre plusieurs vecteurs.
> pmin(1:10,10:1)
[1] 1 2 3 4 5 5 4 3 2 1
> pmax(1:10,10:1)
[1] 10 9 8 7 6 6 7 8 9 10
31
La fonction weighted.mean calcule des moyennes pondérées. Elle prend en argument un
vecteur numérique et un vecteur de poids de même longueur. La somme des poids n’a pas né-
cessairement à être égale à 1 : la fonction se charge de normaliser le résultat. Dans l’exemple
suivant, on prend un vecteur de trois notes obtenues dans des matières ayant pour cœfficient
3, 1 et 1 respectivement et on calcule la moyenne pondérée :
> weighted.mean(c(8,12,13),c(3,1,1))
[1] 9.8
Il faut noter que les fonctions var et sd renvoient respectivement la variance et l’écart-type
non-biaisés de l’échantillon. Si on note N la taille de l’échantillon x, il s’agit pour la variance
de la quantité :
1 X
V ar(x) = N (xi − x̄)2 .
N − 1 i=1
Autrement dit, c’est la somme des carrés des écarts à la moyenne, divisée par N − 1 et non
pas par N . L’écart-type renvoyé par la fonction sd est la racine carrée de cette variance.
Il n’y a pas de fonction pour calculer directement la variance théorique mais on peut la
calculer directement comme ceci :
2.8.2 Quantiles
Les quantiles (ou fractiles) sont les quantités qui permettent de découper un échantillon
en intervalles contenant une certaine proportion de la taille totale. Les quantiles les plus
utilisés sont les trois quartiles qui découpent l’échantillon en quatre intervalles contenant
chacun 25 % de l’effectif total. Les déciles sont ceux qui définissent des intervalles contenant
chacun 10 % de l’effectif total.
La fonction quantile prend en premier argument le vecteur numérique présentant l’échan-
tillon et admet aussi un argument optionnel probs qui est un vecteur de probabilités indiquant
la proportion de l’effectif total que doit contenir approximativement chaque intervalle. par
défaut, si l’argument probs n’est pas spécifié, la fonction calcule les quartiles. Par exemple,
en reprenant le vecteur v de la section précédente :
> quantile(v)
0% 25% 50% 75% 100%
0.00 4.95 9.90 14.85 19.80
Pour calculer les déciles, on spécifie un vecteur de probabilités dont toutes les valeurs sont
égales à 0,1, c’est-à-dire 1/10. Par exemple :
> quantile(v,probs=0:10/10)
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.00 1.98 3.96 5.94 7.92 9.90 11.88 13.86 15.84 17.82 19.80
32
La fonction quantile supporte l’argument na.rm pour ignorer les valeurs manquantes et pos-
sède aussi un argument logique names pour indiquer si les valeurs renvoyées doivent être un
vecteur nommé. C’est le cas par défaut. Si on souhaite obtenir uniquement les valeurs, on
supprimera les noms comme ceci :
> quantile(v,probs=0:10/10,names=FALSE)
[1] 0.00 1.98 3.96 5.94 7.92 9.90 11.88 13.86 15.84 17.82 19.80
2.8.3 Résumés
Quelques fonctions permettent d’obtenir une vue résumée du contenu d’un objet.
La plus utilisée est la fonction summary. C’est une fonction générique qui calcule les
principales valeurs permettant de résumer les données contenues dans un objet.
Avec d’autres types d’objets, comme par exemple des séries temporelles ou des modèles
linéaires, la fonction summary fournit d’autres renseignements.
> summary(v)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 4.95 9.90 9.90 14.85 19.80
33
> colMeans(t)
[1] 2 5 8 11
Dans le cas d’une table de contingence, les sommes en ligne ou en colonne correspondent aux
distributions marginales en effectif. Il existe une fonction addmargins qui ajoute directement
ces sommes au tableau utilisé :
> addmargins(t)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 22
[2,] 2 5 8 11 26
[3,] 3 6 9 12 30
[4,] 6 15 24 33 78
La fonction prop.table transforme un tableau d’effectifs en proportions. Par exemple :
> prop.table(t)
[,1] [,2] [,3] [,4]
[1,] 0.01282051 0.05128205 0.08974359 0.1282051
[2,] 0.02564103 0.06410256 0.10256410 0.1410256
[3,] 0.03846154 0.07692308 0.11538462 0.1538462
Dans cet exemple, les proportions ont été calculées en divisant chaque valeur du tableau par
la somme totale de toutes les valeurs. Il est possible aussi d’indiquer un second argument,
appelé margin, qui indique une dimension par rapport à laquelle calculer les proportions :
dans le cas d’un tableau bidimensionnel, les valeurs possibles sont 1 et 2 selon qu’on souhaite
les proportions en ligne ou en colonne. Pour une table de contingence, cela permet de cal-
culer les distributions conditionnelles en ligne ou en colonne respectivement. Par exemple,
l’instruction suivante calcule les proportions ligne par ligne :
> prop.table(t,1)
[,1] [,2] [,3] [,4]
[1,] 0.04545455 0.1818182 0.3181818 0.4545455
[2,] 0.07692308 0.1923077 0.3076923 0.4230769
[3,] 0.10000000 0.2000000 0.3000000 0.4000000
On peut vérifier que la somme de chaque ligne est égale à 1 comme on peut s’y attendre :
> rowSums(prop.table(t,1))
[1] 1 1 1
La fonction margin.table fonctionne de manière analogue et calcule les sommes des élé-
ments selon la dimension indiquée dans le second argument (appelé margin). Par exemple :
> margin.table(t,1)
[1] 22 26 30
> margin.table(t,2)
[1] 6 15 24 33
Les résultats obtenus sont les mêmes qu’avec les fonctions rowSums et colSums respecti-
vement.L’intérêt de la fonction margin.table est qu’elle s’applique à des tableaux (objets de
classe array) de dimension quelconque et non pas uniquement aux matrices ou tableau de
contingence.
34
2.9 Les graphiques avec R
2.9.1 Les principales commandes graphiques
Les fenêtres graphiques sont nommées X11 sous UNIX et windows sous Windows. Dans
tous les cas, on peut ouvrir une fenêtre graphique avec la commande x11().
Un fichier graphique est ouvert à l’aide de postscript("mesgraphiques.eps")
ou pdf("mesgraphiques.pdf"). Pour afficher la liste des dispositifs graphiques ouverts, on
utilise dev.list().
Les graphiques seront traces dans le dispositif graphique actif. Pour connaître ce dispo-
sitif, on utilise dev.cur().
Pour le changer, on utilise dev.set(i) qui rend le ième dispositif actif. La fonction dev.off()
ferme le dispositif actif, dev.off(i) ferme le ìeme dispositif.
On peut partitionner la fenêtre graphique active à l’aide des commandes split.screen(x)
(x vecteur) ou layout(m,widths=w,heights=h) (m matrice, w vecteur, h vecteur).
Pour visualiser une fenêtre graphique partitionnée avec layout, on utilise layout.show(n)
où n est le nombre de sous-fenêtres.
Les principales commandes graphiques sont données dans le tableau suivant.
35
plot(x) Tracer le graphe des valeurs de x ordonnées sur l’axe
des abscisses.
plot(x,y) Tracer le graphe de y en fonction de x.
sunflowerplot(x,y) Idem mais les points superposés sont dessinés sous
forme de fleurs dont le nombre de petales correspond
au nombre de points.
pie(x) Tracer un graphe en camembert.
boxplot(x) Tracer le graphe en "boîtes et moustaches" de x.
stripplot(x) Tracer le graphe des valeurs de x sur une ligne.
interaction.plot(f1,f2,x,fun=mean) Tracer le graphe des moyennes de x en fonction des
valeurs des facteurs f1 (sur l’axe des abscisses) et f2
(plusieurs graphes).
coplot(xỹ|z) Tracer le graphe bivarié de x et y pour chaque valeur
de z.
matplot(x,y) Tracer le graphe bivarié de la 1ère colonne de x contre
la 1ère colonne de y, la 2ème colonne de x contre la
2ème colonne de y...
pairs(x) Si x est une matrice ou un data.frame, tracer tous les
graphes bivariés entre les colonnes de x.
plot.ts(x), ts.plot(x) Tracer le graphe d’une série temporelle x en fonction
du temps.
hist(x,freq=T) Tracer un histogramme des fréquences de x.
barplot(x) Tracer un histogramme des valeurs de x.
qqnorm(x) Tracer les quantiles de x en fonction de ceux attendus
d’une loi normale.
qqplot(x,y) Tracer les quantiles de y en fonction de ceux de x.
contour(x,y,z) Tracer des courbes de niveau.
filled.contour(x,y,z) Idem mais les aires entre les contours sont colorées.
image(x,y,z) Idem mais en couleur.
persp(x,y,z) Idem mais en 3D.
symbols(x,y,...) Dessiner aux coordonnées données par x et y des sym-
boles (etoiles, cercles, boxplots...).
36
axes=TRUE ou FALSE Si TRUE, les axes et le cadre sont traces.
type="n","p","l","b,"h","s"... Précise le type de graphe dessine. type="n" supprime
le graphe.
col="blue", col.axis, col.main... Précise la couleur du graphe, des axes, du titre...
bg="yellow" Précise la couleur du fond.
xlim=c(0,10),ylim=c(0,20) Précise les limites des axes.
xlab="abscisse",ylab="ordonnée" Précise les annotations des axes.
main="titre" Précise le titre du graphe.
sub="sstitre" Précise le sous-titre du graphe.
bty="n","o"... Contrôle comment le cadre est trace. bty="n" sup-
prime le cadre.
cex=1.5, cex.axis, cex.main... Contrôle la taille des caractères.
font=1, font.axis... Précise la police du texte.
las="0" Contrôle comment sont orientees les annotations des
axes.
lty="1" Contrôle le type de lignes tracées.
lwd=1.5 Contrôle la largeur des lignes.
pch="+","o"... Contrôle le type de symbole utilise pour le trace des
points.
ps=1.5 Contrôle la taille en points du texte et des symboles.
tck, tcl Précise la longueur des graduations sur les axes.
mfcol=c(3,2), mfrow=c(3,2) Partitionne le graphe en 3 lignes et 2 colonnes. Les
figures sont remplies colonnes par colonnes ou lignes
par lignes.
Les paramètres ci-dessus peuvent être précisés de manière permanente à l’aide de la
commande par().
Le tableau suivant donné un aperçu des fonctions graphiques secondaires (ayant une
action sur un graphe existant).
37
points(x,y) Ajouter le graphe des points y en fonction de x.
lines(x,y) Ajouter le graphe de y en fonction de x en trait continu.
text(x,y,labels) Ajouter le texte spécifié par labels aux coordonnées
(x,y).
text(x,y,expression()) Ajouter l’expression mathématique spécifiée par ex-
pression() aux coordonnées (x,y).
text(x,y,as.expression(substitute()) Ajouter une expression mathématique incluant la va-
leur d’une variable numerique aux coordonnées (x,y).
mtext(texte,side=3,...) Ajouter du texte dans la marge specifiee dans side.
segments(x0,y0,x1,y1) Tracer des segments joignant les points (x0,y0) aux
points (x1,y1).
arrows(x0,y0,x1,y1,angle=30,code=1,2 ou 3) Tracer des fleches dont la pointe forme un angle de
30 avec l’axe aux points (x1,y1), (x0,y0) ou aux deux
respectivement.
abline(a,b) Ajouter une ligne d’ordonnée à l’origine a, de pente b.
abline(h=y) Ajouter une ligne horizontale sur l’ordonnée y.
abline(v=x) Ajouter une ligne verticale sur l’abscisse x.
abline(lm.obj) Ajouter la droite de régression donnée par lm.obj.
rect(x1,y1,x2,y2) Tracer un rectangle délimité à gauche par x1, à droite
par x2, en bas par y1, en haut par y2.
polygon(x,y) Tracer un polygone reliant les points de coordonnées
(x,y).
legend(x,y) Ajouter la légende au point de coordonnées (x,y).
title(main,sub) Ajouter un titre, un sous-titre.
axis(side,vect) Ajouter un axe ou des graduations sur les axes.
rug(x) Dessiner les données x sur l’axe des abscisses sous
forme de traits verticaux.
locator(n,type="n",...) Retourner les coordonnées (x,y) ou tracer des sym-
boles aux points de coordonnées (x,y) apres que l’uti-
lisateur ait clique n fois sur le graphe.
text(locator(1), "Point M") Utiliser la souris pour placer du texte.
identify(x,y,labels) Mettre en évidence certains points du graphe à l’aide
du bouton gauche de la souris, leur accoler du texte.
38
USPersonalExpenditure
1960
20
15
1950
10
5
1940
0
border=NA beside=TRUE
150
80
60
100
40
50
20
0
1940 1945 1950 1955 1960 1940 1945 1950 1955 1960
39
> layout(matrix(1:4,nrow=2,byrow=TRUE))
> barplot(USPersonalExpenditure[3,],space=1.5,xlab="Medical and Health")
> barplot(USPersonalExpenditure[3,],space=1.5,horiz=TRUE,
xlab="Medical and Health")
> barplot(USPersonalExpenditure[3,],space=1,border=NA,main="border=NA")
> barplot(USPersonalExpenditure[3,],beside=TRUE,main="beside=NA")
> layout(1)
> title("USPersonalExpenditure")
> layout(matrix(1:4,nrow=2,byrow=TRUE))
> barplot(USPersonalExpenditure[3,],space=1.5,xlab="Medical and Health")
> barplot(USPersonalExpenditure[3,],space=1.5,horiz=TRUE,
xlab="Medical and Health")
> barplot(USPersonalExpenditure[3,],space=1,border=NA,main="border=NA")
> barplot(USPersonalExpenditure[3,],beside=TRUE,main="beside=TRUE")
> layout(1)
> title("USPersonalExpenditure")
Le premier argument est un vecteur ou une matrice. Si c’est un vecteur (comme dans les
deux exemples du haut de la figure précédente), ses valeurs indiquent la hauteur des bâtons.
Si c’est une matrice, chaque colonne de la matrice est traitée comme un vecteur et il y a deux
types de représentations selon la valeur de l’argument logique beside : s’il est égal à FALSE,
chaque bâton correspond à une colonne dont les valeurs sont les hauteurs de sous-bâtons
empilés (figure en bas à gauche) ; s’il est égal à TRUE, les valeurs de chaque colonne sont
juxtaposées et non pas empilées (figure en bas à droite).
L’argument space contrôle l’espacement entre les bâtons. Il est exprimé comme un mul-
tiple ou une fraction de la largeur des bâtons.
La valeur de retour est invisible et contient, sous forme d’une matrice, les abscisses des
milieux de tous les bâtons. Par exemple :
40
USPersonalExpenditure 1960
Private Education
Personal Care
41
L’argument optionnel clockwise indique le sens dans lequel sont dessinés les secteurs :
s’il est égal à TRUE, ils sont représentés dansle sens des aiguilles d’une montre.
L’argument init.angle indique l’angle (en degrés) à partir duquel est dessiné le premier
secteur.
L’argument radius contrôle le rayon du cercle. Sa valeur par défaut est 0, 8.
Cette fonction graphique ne renvoie aucune valeur.
> pie(USPersonalExpenditure[,5],radius=0.6,
main="USPersonalExpenditure 1960")
> layout(matrix(1:2,nrow=1))
> boxplot(len~dose,data=ToothGrowth,notch=TRUE,xlab="notch=TRUE")
> boxplot(len~dose,data=ToothGrowth,horizontal=TRUE,
xlab="horizontal=TRUE")
> layout(1)
> title("ToothGrowth")
L’argument horizontal contrôle l’orientation des boîtes. Cette fonction renvoie, de manière
invisible, une liste comportant les informations numériques sur les différents groupes de
données.
2.10.4 Histogrammes
Les histogrammes sont obtenus au moyen de la fonction hist. Par défaut, elle prend en
argument un vecteur numérique et applique un algorithme pour décider comment opérer le
découpage permettant de délimiter les rectangles de l’histogramme.
> layout(matrix(1:2,nrow=1))
> x <- rt(200,5)
> hist(x, density=5, angle=30, ylab="Effectifs", xlab="", main="")
> hist(x, prob=TRUE, ylim=c(0,0.5), ylab="Proportions", xlab="",
main="",col="lightgray")
> curve(dt(x,5), add=TRUE, lty=3)
> layout(1)
> title("Student avec 5 d.l.")
42
ToothGrowth
35
30
2
25
20
1
15
10
0.5
5
0.5 1 2 5 10 15 20 25 30 35
notch=TRUE horizontal=TRUE
43
ToothGrowth
35
30
2
25
20
1
15
10
0.5
5
0.5 1 2 5 10 15 20 25 30 35
notch=TRUE horizontal=TRUE
44
Density
Histogram of x
x
0
1
2
3
45
(renvoyée sous forme invisible) est un objet de classe histogram qui comporte des infor-
mations sur les coordonnées des rectangles et le nombre de valeurs qu’ils contiennent. Par
exemple :
> names(hist(x))
[1] "breaks" "counts" "intensities" "density" "mids"
[6] "xname" "equidist"
La fonction pairs La fonction pairs prend en général un argument x qui est un tableau de
données ou une matrice dont les colonnes représentent des valeurs numériques. Son compor-
tement par défaut consiste à dessiner des diagrammes de dispersion pour chaque couple de
variables : le graphique situé sur la ligne i et la colonne j de la grille matricielle (avec i 6= j)
représente la valeur x[, i] (i-ème colonne de x) en fonction de x[, j] (j-ème colonne de x).
46
Chapitre 3
Y = Xβ + ε (3.2)
avec
Les formes linéaires ne comportent pas nécessairement de terme constant (c’est-à-dire de
paramètre β0 ). Si ce terme constant est requis par le modèle, le vecteur β comportera m + 1
cœfficients. Si on recherche un modèle sans terme constant, le vecteur β ne comportera que
m cœfficients. Formellement, cela ne change en rien les formules : la seule différence est
la présence ou pas d’une première colonne de 1 dans la matrice X. Dans la suite de cette
section, on désignera par p le nombre de paramètres du modèle (m ou m + 1).
47
On utilise en général, pour estimer les cœfficients β, la méthode des moindres carrés qui
consiste à minimiser la somme des carrés des erreurs :
X
ε2i = tε · ε = t (Y − Xβ) (Y − Xβ) .
48
Exemple 3.1.1.
‘‘‘{r ozone}
ozone <- read.table("https://r-stat-sc-donnees.github.io/ozone.txt",header
ozone.m <- ozone[,1:11]
summary(ozone.m)
‘‘‘
‘‘‘{r}
reg.mul <- lm(maxO3~., data=ozone.m)
summary(reg.mul)
‘‘‘
# 4. Choix de variables
‘‘‘{r,warning=FALSE,message=FALSE}
library(leaps)
choix <- regsubsets(maxO3~.,data=ozone.m,nbest=1,nvmax=11)
plot(choix,scale="bic")
‘‘‘
‘‘‘{r}
reg.fin <- lm(maxO3~T12+Ne9+Vx9+maxO3v,data=ozone.m)
summary(reg.fin)
‘‘‘
‘‘‘{r}
res.m <- rstudent(reg.fin)
plot(res.m,pch=15,cex=.5,ylab="Résidus",main="",ylim=c(-3,3))
abline(h=c(-2,0,2),lty=c(2,1,2))
‘‘‘
49
‘‘‘{r}
xnew <- matrix(c(19,8,2.05,70),nrow=1)
colnames(xnew) <- c("T12","Ne9","Vx9","maxO3v")
xnew <- as.data.frame(xnew)
predict(reg.fin,xnew,interval="pred")
‘‘‘
50
Chapitre 4
4.1 Introduction
4.1.1 Objectif
L’analyse de la variance utilise un vocabulaire spécifique : les variables qualitatives sus-
ceptibles d’influer sur la distribution de la variable quantitative étudiée sont appelées fac-
teurs (ou facteurs de variabilité ) et leurs modalités, niveaux. Dans ce chapitre, les facteurs
sont toujours contrôlés, c’est-à-dire fixés par l’expérimentateur.
L’analyse de la variance permet de comparer les espérances de variables aléatoires in-
dépendantes qui suivent des lois normales de même variance sur plusieurs populations.
Cette méthode permet la comparaison de K moyennes et peut donc être vue comme une
extension du test de comparaison de moyennes.
51
TABLE 4.1 – Rendements en quintaux des parcelles de maïs
Variété 1 Variété 2 Variété 3
206 206 181
205 218 199
199 192 194
187 207 190
193 196 200
183 187 205
198 197 199
201 186 193
180 212 213
213 190 199
x̄1 = 196.5 x̄2 = 199.1 x̄3 = 197.3
Notations :
— La variable mesurée à l’issue d’une telle expérience est notée Y.
— Pour les observations, deux indices sont utilisés :
• le premier indice indique le numéro du groupe dans la population (“Variété”), noté
en général i ;
• le second indice indique le numéro de l’observation dans chacun des groupes qui
composent l’échantillon (“parcelle”), noté en général j.
— Les observations sont en général notées par yi,j où i varie de 1 à I et j de 1 à ni .
Définition 4.2.2. Lorsque les échantillons sont tous de même taille, c’est-à-dire ni = J pour
i variant de 1 à I, l’expérience est dite équilibrée.
Remarque 4.2.1. 1. Lorsque l’expérience est équilibrée, l’effectif total n est égal à IJ.
2. Lorsque les effectifs des échantillons sont très différents, les différences qu’il est pos-
sible de détecter sont supérieures à celles d’une expérience équilibrée qui aurait le
même effectif total. L’analyse est donc moins performante.
52
Seul le plan équilibré sera détaillé par la suite mais les logiciels de statistique vous
permettent d’analyser aussi des expériences déséquilibrées .
Définition 4.2.3. En se plaçant dans le cas équilibré, les moyennes de chaque échantillon
sont définies et notées par :
J
1X
ȳi = yi,j , i = 1, . . . , I,
J j=1
Retour à l’exemple des parcelles : Les lignes de commande ci-dessous vont vous per-
mettre de calculer les quantités évoquées ci-dessus. Il faut d’abord commencer par rentrer
les données sous R. Pour cela taper les lignes de commandes suivantes :
Pour obtenir les moyennes de chaque échantillon, vous tapez les lignes de commandes sui-
vantes :
Pour obtenir les variances corrigées dans chaque échantillon, vous tapez les deux lignes
de commande suivantes :
53
où µi désigne l’espérance dans la population i. Ainsi vous constatez que, si les lois des
variables Yi,j sont différentes, elles ne peuvent différer que par leur espérance. Il y a donc un
simple décalage entre elles.
Le plus souvent, ce modèle statistique est écrit de la façon suivante :
Yi,j = µ + αi + εi,j
µi = µ + α i pour i = 1, . . . , I.
H 0 : µ1 = µ2 = · · · = µI
contre
H0 : α1 = α2 = · · · = αI
contre
54
4.3.1 Deux propriétés fondamentales
Le test est fondé sur deux propriétés :
- Première propriété : La moyennes de toutes les observations est la moyenne des moyennes
de chaque échantillon. Ceci s’écrit :
J I I J I
1 XX 1 XX 1X
ȳn = yi,j = yi,j = ȳi .
n j=1 i=1 n i=1 j=1 I i=1
Remarque 4.3.1. Vous pouvez vérifier cette propriété sur l’exemple des parcelles.
En tapant la ligne de commande suivante :
> moy.g <- mean(plantation$rendement)
> moy.g
qui est aussi égale à :
> mean(moyennes)
- Deuxième propriété : La variance de toutes les observations est la somme de la va-
riance non corrigée des moyennes et de la moyennes des variances non corrigées.
Ceci s’écrit :
I J I I
1 XX 1X 1X 2
s2 (y) = (yi,j − ȳn )2 = (ȳi − ȳn )2 + s (y). (4.1)
n i=1 j=1 I i=1 I i=1 i
Remarque 4.3.2. Vérifier cette égalité en vous servant des données de l’exemple des plan-
tations.
Retour à l’exemple des plantations : Le test porte sur la comparaison des espérances. À
cette étape, il serait bon de tracer les boîtes à moustaches de la variable RENDEMENTS en
fonctions de la variable PARCELLE. Pour, cela tapez les lignes de commande suivantes :
> plot(plantation$parcelle,plantation$rendement)
> points(1:3,moyennes,pch="@")
> abline(h=moy.g)
55
Définition 4.3.1. La variation totale est le terme défini par :
I X
X J
SCtot = (yi,j − ȳn )2 .
i=1 j=1
Si les variables d’erreur εi,j sont indépendantes et de même variance σ 2 , le carré moyen
résiduel est une estimation sans biais de cette variance σ 2 .
Hypothèses du test :
H0 : µ1 = µ2 = · · · = µI
contre
56
ou de manière équivalente :
H0 : α1 = α2 = · · · = αI
contre
Statistique du test :
Si les trois conditions fondamentales sont satisfaites et si l’hypothèse nulle H0 est véri-
fiée, alors la variable
CMf ac
F (obs) =
CMres
est une réalisation de la variable aléatoire F qui suit la loi de Fisher F (I − 1; n − I).
Retour à l’exemple des plantations de maïs : Vous devez commencer par indiquer au
logiciel R qu’il doit utiliser la même contrainte sur les paramètres du modèle. Dans le cas
équilibré celle-ci s’écrit α1 + α2 + · · · + αI = 0. Avant de débuter n’importe quelle analyse
de la variance, vous éxecuterez toujours la ligne de commande :
> options(contrasts=c("contr.sum","contr.poly"))
57
Pour obtenir le tableau de l’analyse de la variance en utilisant les fonctions ANOVA et LM, il
faut taper les deux lignes de commande suivantes :
> modele1=lm(rendement~parcelle,data=plantation)
> anova(modele1)
Pour obtenir le tableau de l’analyse de la variance en utilisant les fonctions AOV et SUM -
MARY ,il faut taper les deux lignes de commande suivantes :
> modele1_aov=aov(rendement~parcelle,data=plantation)
> anova(modele1_aov)
Pour indiquer à R que, dans le cas équilibré, les estimations des effets αi de chaque groupe
doivent être de somme nulle, vous devez exécuter la commande :
> options(contrasts=c("contr.sum","contr.poly"))
58
Hypothèses du test :
Statistique de test
La statistique du test de Shapiro-Wilk :—-
Retour à l’exemple des plantations : Avec le logiciel R, en tapant les deux lignes de
commande suivantes :
La p-valeur étant strictement supérieure à α = 5%, le test n’est pas significatif.Vous décidez
de conserver l’hypothèse nulle H0 . Le risque d’erreur associé à cette décision est un risque
de deuxième espèce. Vous ne pouvez pas l’évaluer dans le cas présent. Vous décidez donc
que l’hypothèse de normalité des variables d’erreur est satisfaite.
Hypothèses du test :
59
Conditions d’application du test :
Ce test nécessite la normalité et l’indépendance des variables dont les variances sont
comparées.
Statistique de test :
Une réalisation de la statistique de test de Bartlett, pour des plans équilibrés ou non, est
égale à " #
I
1 X
(ni − 1) ln s2c,i
B(obs) = (n − I) ln (CMres ) −
C1 i=1
> bartlett.test(residus~parcelle,data=plantation)
La p-valeur étant strictement supérieure à α = 5%, le test n’est pas significatif. Vous conser-
vez l’hypothèse nulle H0 avec un risque d’erreur de deuxième espèce qu’il faudrait évaluer.
Vous décidez donc que l’hypothèse d’égalité des variances est satisfaite.
60
4.4.4 Et si les conditions ne sont pas vérifiées que faire ?
Dans le cas où les conditions ne sont pas vérifiées, il vous faut alors envisager un test
non paramétrique. L’esprit du test de Kruskal-Wallis est similaire à celui de l’analyse de la
variance : il permet de détecter des décalages entre les différentes populations lorsque les va-
riances des différentes populations sont égales. Pour vérifier l’ǵalité des variances sans avoir
à faire une hypothèse de normalité,vous pourrez par exemple utiliser le test non paramétrique
de Levene disponible avec la fonction LEVENE . TEST dans la bibliothèque CAR.
La fonction sous R qui permet de réaliser le test de K RUSKAL -WALLIS est la fonction
KRUSKAL . TEST .
> coef(modele1)
(Intercept) parcelle1 parcelle2
197.633333 -1.133333 1.466667
> -sum(coef(modele1)[2:3])
[1] -0.3333333
En fait les trois conditions fondamentales sont remplies car la condition de normalité est
également vérifiée, vous pouvez donc procéder au test de Fisher de l’analyse de la variance.
Comme la p-valeur du tableau est supérieure à α = 5%, le test n’est pas significatif. Vous ac-
ceptez H0 . Il n’y a donc pas une différence entre les espérances du rendement des plantations
selon le type de parcelles.
61