Calculs statistiques en R
Yousri Henchiri
14-11-2021
Table des mati res
1 Statistiques descriptives
1.1 Fonctions retournant une seule statistique . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Traitement des donn es manquantes et argument na.rm . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
1.3 Fonctions pouvant retourner plusieurs statistiques
1.4 Fonctions retournant un vecteur de statistiques . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5 Calcul de fr quences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Distributions de probabilit
2.1 Fonction de densit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Fonction de r partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Fonction quantile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 G n ration de nombres pseudo-al atoires
3.1 Fonction sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Germe de la g n ration pseudo-al atoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
3
4
6
7
9
9
11
12
14
15
16
R est un environnement sp cialis dans les calculs statistiques. Voyons comment r aliser de production
de statistiques descriptives, de manipulation des distributions de probabilit , de g n ration de nombres
pseudo-al atoires.
1 Statistiques descriptives
Les fonctions permettant de calculer des statistiques descriptives en R sont tr s nombreuses. Les principales
sont pr sent es ici, mais il en existe dautres. Le tableau suivant classe les fonctions mentionn es ci-dessous
selon le type de mesure calcul e (mesure de position, de tendance centrale, de dispersion ou de fr quences)
et selon le type de fonctionnement de la fonction (calcul vectoriel, donn es combin es en une ou plusieurs
valeurs).
1
1.1 Fonctions retournant une seule statistique
Certaines fonctions de calcul de statistiques descriptives retournent en sortie une seule valeur. Cest le cas
des fonctions suivantes :
" mesures de position : min, max ;
" mesures de tendance centrale : mean, median ;
" mesure de dispersion : sd ( cart-type), IQR ( cart interquartile), mad ( cart absolu m dian).
Utilisons le jeu de donn es cars du package datasets pour pr senter quelques exemples. Ce jeu de donn es
contient 50 observations de 2 variables num riques.
str(cars)
50 obs. of 2 variables:
'data.frame':
$ speed: num 4 4 7 7 8 9 10 10 10 11 ...
$ dist : num 2 10 4 22 16 10 18 26 34 17 ...
Moyenne des observations de la variable dist
mean(cars$dist)
[1] 42.98
Si lobjet en entr e a plus dune dimension, la sortie est tout de m me de longueur 1. Donc tous les l ments
contenus dans lobjet sont mis en commun pour faire le calcul.
max(cars)
[1] 120
Fonctions which.max et which.min
Les fonctions min et max retournent respectivement la valeur la plus petite et la valeur la plus grande parmi
les l ments dun objet. Les fonctions which.max et which.min retournent pour leur part la position dans
lobjet du premier maximum ou minimum.
which.min(cars$speed)
[1] 1
Dans lexemple pr c dent, il y a en fait deux observations qui prennent la valeur minimum de min(cars$speed).
La commande suivante permet de trouver la position de toutes les observations prenant la valeur minimale.
which(cars$speed == min(cars$speed))
[1] 1 2
2
1.2 Traitement des donn es manquantes et argument na.rm
Les fonctions min, max, mean, median et sd, ainsi que quelques autres fonctions vues dans ces notes, ont un
argument en commun nomm na.rm. Cet argument sert indiquer la fonction comment agir en pr sence de
donn es manquantes (NA). Par d faut, na.rm prend la valeur FALSE pour ces fonctions. Cette valeur signie
que les donn es manquantes ne doivent pas tre retir es avant deectuer le calcul. Cependant, en pr sence de
donn es manquantes, ces fonctions ne sont pas en mesure de calculer des statistiques. Par exemple, supposons
que nous voulions calculer la m diane des donn es dans le vecteur suivant.
x <- c(3, 6, NA, 8, 11, 15, 23)
Si nous ne retirons pas la donn e manquante, nous obtenons le r sultat suivant.
median(x)
[1] NA
Pour calculer plut t la m diane des observations non manquantes, il faut donner la valeur TRUE largument
na.rm comme suit.
median(x, na.rm = TRUE)
[1] 9.5
Notons que la fonction na.omit permet de retirer les observations manquantes dun objet R. Si lobjet est un
vecteur, les l ments contenant NA sont retir s.
na.omit(x)
6 8 11 15 23
[1] 3
attr(,"na.action")
[1] 3
attr(,"class")
[1] "omit"
La fonction na.omit ajoute deux attributs lobjet, dont un pour identier les observations retir es.
Remarquons que les deux commandes suivantes retournent le m me r sultat.
median(x, na.rm = TRUE)
[1] 9.5
median(na.omit(x))
[1] 9.5
Si la fonction na.omit re oit en entr e une matrice ou un data frame, elle retire toutes les lignes contenant
au moins un NA, comme dans cet exemple :
ex_jeu <- data.frame(x, y = c(2, NA, 8, 9, 6, NA, 2));
ex_jeu
##
x y
1 3 2
2 6 NA
3 NA 8
4 8 9
5 11 6
6 15 NA
7 23 2
3
na.omit(ex_jeu)
##
x y
1 3 2
4 8 9
5 11 6
7 23 2
1.3 Fonctions pouvant retourner plusieurs statistiques
Dautres fonctions peuvent retourner plus dune statistique :
" mesures de position : range, quantile ;
" r sum comprenant plusieurs mesures : summary ;
" variances, covariances et corr lations : var, cov, cor.
Fonctions range et quantile
La fonction range retourne la fois le minimum est le maximum, comme dans cet exemple :
range(cars$speed)
[1] 4 25
Une fa on simple dobtenir l tendue dobservations partir de la sortie de la fonction range est de proc der
comme suit :
diff(range(cars$speed))
[1] 21
La fonction quantile calcule des quantiles empiriques. Par d faut, elle retourne le minimum, le maximum et
les quartiles, comme dans cet exemple :
quantile(cars$speed)
##
##
0% 25% 50% 75% 100%
25
15
19
12
4
Largument probs permet de demander nimporte quels quantiles. Dans lexemple suivant, les premiers et
neuvi mes d ciles sont demand s.
quantile(cars$speed, probs = c(0.1, 0.9))
10% 90%
8.9 23.1
Fonction summary
La fonction summary retourne les statistiques suivantes selon lentr e quelle re oit :
" vecteur num rique : minimum, premier quartile, m diane, moyenne, troisi me quartile, maximum ;
" facteur : fr quences des modalit s (comme la fonction table vue plus loin) ;
" matrice ou data frame : la fonction summary est appliqu e s par ment chacune des colonnes.
Utilisons le jeu de donn es Puromycin du package datasets pour pr senter quelques exemples dutilisation
de la fonction summary. Ce jeu de donn es contient 23 observations de 3 variables, dont deux num riques et
une cat gorique, stock e sous forme de facteur.
str(Puromycin)
4
23 obs. of 3 variables:
'data.frame':
$ conc : num 0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 ...
$ rate : num 76 47 97 107 123 139 159 152 191 201 ...
$ state: Factor w/ 2 levels "treated","untreated": 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "reference")= chr "A1.3, p. 269"
Vecteur num rique en entr e :
summary(Puromycin$rate)
Publicité
Min. 1st Qu. Median
124.0
91.5
47.0
##
##
Facteur en entr e :
summary(Puromycin$state)
Mean 3rd Qu.
158.5
126.8
Max.
207.0
treated untreated
11
##
##
Data frame entier en entr e :
summary(Puromycin)
12
conc
##
Min.
:0.0200
1st Qu.:0.0600
Median :0.1100
Mean
:0.3122
3rd Qu.:0.5600
:1.1000
Max.
rate
Min.
: 47.0
1st Qu.: 91.5
Median :124.0
Mean
:126.8
3rd Qu.:158.5
:207.0
Max.
state
treated
:12
untreated:11
Fonctions var, cov et cor
La fonction var peut prendre en entr e un vecteur ou un objet deux dimensions. Si elle re oit en entr e un
vecteur, elle calcule la variance empirique de toutes les valeurs, comme dans cet exemple :
var(cars$speed)
[1] 27.95918
Cependant, si elle re oit en entr e une matrice ou un data frame de valeurs num riques, elle consid re
que chaque colonne contient les observations dune variable al atoire. Elle va calculer une matrice de
variances-covariances, comme dans cet exemple :
var(cars)
speed
##
dist
speed 27.95918 109.9469
dist 109.94694 664.0608
La fonction cov fait exactement le m me calcul par d faut.
cov(cars)
speed
##
dist
speed 27.95918 109.9469
dist 109.94694 664.0608
Elle peut cependant calculer des covariances de Kendall ou de Spearman (toutes deux des statistiques non
param triques bas es sur les rangs des observations) au lieu de la covariance classique de Pearson. La fonction
cor calcule des corr lations plut t que des covariances. Elle aussi peut utiliser les d nitions de Pearson (par
d faut), Kendall et Spearman. Voici un exemple de calcul de matrice de corr lations de Spearman.
5
cor(cars, method = "spearman")
speed
##
dist
speed 1.0000000 0.8303568
dist 0.8303568 1.0000000
1.4 Fonctions retournant un vecteur de statistiques
Certaines fonctions, telles que les suivantes, retournent autant de statistiques quil y a d l ments dans lobjet
donn en entr e.
" mesures de position : cummin, cummax, pmin, pmax ;
" rangs : rank.
Fonctions cummin et cummax
Les fonctions cummin et cummax calculent les minimums et les maximums cumulatifs. Comme nous pouvons
le constater dans lexemple suivant, la valeur en position i du vecteur retourn par une de ces deux fonctions
est la valeur minimale ou maximale dans le sous-vecteur x[1:i].
cummin(x = c(-2, 4, -3, 4, 7, -6, 0))
[1] -2 -2 -3 -3 -3 -6 -6
Fonctions pmin et pmax
Les fonctions pmin et pmax calculent le minimum et le maximum par position, entre autant de vecteurs que
d sir , comme dans lexemple suivant.
pmax(
c(-2, 4, -3, 4, 7, -6, 0),
6, 7),
c( 1, 2, 3, 4, 5,
3, 3)
c( 5, 0, -2, 4, 5,
)
[1] 5 4 3 4 7 6 7
Ces fonctions sont utiles pour remplacer des valeurs par un seuil. Par exemple, linstruction suivante permet
de remplacer par z ro toute valeur n gative contenue dans le vecteur en entr e.
pmax(c(-2, 4, -3, 4, 7, -6, 0), 0)
[1] 0 4 0 4 7 0 0
Fonction rank
Certains tests statistiques non param triques utilisent des statistiques bas es sur les rangs des observations.
Voici un exemple dobtention de ces rangs avec la fonction rank.
rank(c(-2, 4, -3, 4, 7, -6, 0))
[1] 3.0 5.5 2.0 5.5 7.0 1.0 4.0
Par d faut, en cas d galit , le rang moyen est utilis . Pour changer cette option, il faut modier la valeur de
largument ties.method. Dans lexemple suivant, le rang minimum est retourn en cas d galit .
rank(c(-2, 4, -3, 4, 7, -6, 0), ties.method = "min")
[1] 3 5 2 5 7 1 4
6
1.5 Calcul de fr quences
Les fonctions table, xtabs et ftable permettent de calculer des fr quences.
Voici un petit jeu de donn es pour illustrer lutilisation de ces fonctions. Il contient des observations concernant
7 individus ctifs : la couleur de leurs yeux, la couleur de leurs cheveux et leur genre.
sondage <- data.frame(
yeux
= c("brun",
cheveux = c("brun",
genre
"brun",
"brun",
= c("f minin", "masculin", "f minin", "f minin", "masculin", "f minin", "masculin")
"brun",
"blond",
"bleu",
"blond",
"brun",
"noir",
"vert",
"brun",
"bleu"
"brun"
),
),
)
sondage
yeux cheveux
##
1 brun
2 brun
3 bleu
4 brun
5 vert
6 brun
7 bleu
genre
brun f minin
noir masculin
blond f minin
brun f minin
brun masculin
blond f minin
brun masculin
Fonctions table
La fonction table permet de compter le nombre doccurrences de chacune des modalit s dune variable
cat gorique dans des donn es. Demandons, par exemple, table de compter le nombre dindividus dans les
donn es sondage class s dans chacune des cat gories de couleurs de cheveux.
table(sondage$cheveux)
##
blond brun noir
1
##
2
4
La fonction table produit un tableau de fr quences une variable si elle re oit les observations dune seule
variable. Elle peut aussi produire des tableaux de fr quences crois es deux variables ou plus.
Exemple de tableau de fr quences deux variables (avec variables nomm es)
Publicité
table(yeux = sondage$yeux, cheveux = sondage$cheveux)
##
yeux
##
##
##
bleu
brun
vert
cheveux
blond brun noir
0
1
0
1
2
1
1
1
0
Exemple de tableau de fr quences trois variables (data frame en entr e table)
t3 <- table(sondage)
t3
cheveux
, , genre = f minin
##
##
yeux
##
##
##
##
blond brun noir
0
0
0
bleu
brun
vert
1
1
0
0
2
0
7
cheveux
, , genre = masculin
##
##
yeux
##
##
##
blond brun noir
0
1
0
bleu
brun
vert
0
0
0
1
0
1
Fonctions ftable
La fonction ftable retourne un tableau de fr quences sous la forme dune table plate (en anglais at,
do le f dans le nom de la fonction) dans le cas dun croisement de 3 variables ou plus, plut t que sous la
forme dun array comme le fait la fonction table. Elle accepte les m mes types dentr es que table (s rie
dobjets atomiques une dimension ou objet r cursif dont les l ments sont interpr tables en facteurs) et
peut aussi recevoir une sortie de la fonction table, comme dans lexemple suivant.
ftable(t3)
brun
noir
##
yeux cheveux
bleu blond
##
##
brun blond
##
##
vert blond
##
##
brun
noir
brun
noir
genre f minin masculin
1
0
0
1
2
0
0
0
0
0
1
0
0
0
1
0
1
0
Fonctions xtabs
La fonction xtabs fait le m me calcul que les fonctions pr c dentes, mais elle prend en entr e une formule. Le
tableau de fr quences deux variables cr pr c demment peut tre r obtenu de la fa on suivante avec xtabs.
xtabs(~ yeux + cheveux, data = sondage)
##
yeux
##
##
##
bleu
brun
vert
cheveux
blond brun noir
0
1
0
1
2
1
1
1
0
La fonction xtabs est utile lorsque les donn es que nous avons en main contiennent d j des fr quences, car
il est possible dinclure une variable r ponse contenant des d nombrements dans la formule que nous lui
fournissons en entr e. Par exemple, xtabs permet de facilement retrouver le tableau de fr quences marginales
crois es entre les variables yeux et cheveux partir du tableau de fr quences trois variables produit
pr c demment mis sous forme de data frame, qui a lallure suivante.
t3_df <- as.data.frame(t3)
t3_df
yeux cheveux
##
1 bleu
2 brun
3 vert
4 bleu
blond f minin
blond f minin
blond f minin
brun f minin
genre Freq
1
1
0
0
8
5 brun
6 vert
7 bleu
8 brun
9 vert
10 bleu
11 brun
12 vert
13 bleu
14 brun
15 vert
16 bleu
17 brun
18 vert
Publicité
brun f minin
brun f minin
noir f minin
noir f minin
noir f minin
blond masculin
blond masculin
blond masculin
brun masculin
brun masculin
brun masculin
noir masculin
noir masculin
noir masculin
2
0
0
0
0
0
0
0
1
0
1
0
1
0
Il sut de proc der comme suit :
t2 <- xtabs(Freq ~ yeux + cheveux, data = t3_df)
t2
##
yeux
##
##
##
bleu
brun
vert
cheveux
blond brun noir
0
1
0
1
2
1
1
1
0
2 Distributions de probabilit
Le package stats de linstallation de base de R comprend, pour plusieurs distributions de probabilit , des
fonctions de calcul de :
" la fonction de densit (forme d o change selon la distribution),
" la fonction de r partition (forme p*) et
" la fonction quantile (forme q*).
La che daide ouverte par la commande help(Distributions) num re toutes les distributions de probabilit
oertes dans le package stats. Il existe aussi des fonctions relatives dautres distributions de probabilit
dans des packages sur le CRAN (voir https://CRAN.R-project.org/view=Distributions pour d couvrir ce qui
est oert).
2.1 Fonction de densit
Les fonctions R impl mentant des fonctions de densit ont un nom qui d bute par le lettre d pour density.
Dans le cas dune variable al atoire discr te, la fonction de densit est plus justement appel e fonction de
masse. Il sagit alors dune probabilit , pour une variable al atoire suivant une certaine distribution, de
prendre une certaine valeur.
Exemple : distribution binomiale
Soit X une variable al atoire repr sentant le nombre de 6 obtenus lors de 5 lanc s dun d . Cette variable
al atoire suit une distribution binomiale de param tres n = 5 et p = 1/6, donc X < Bin(n = 5, p = 1/6).
Calculons P (X = 2), soit la probabilit que la variable al atoire X prenne la valeur 2.
9
dbinom(x = 2, size = 5, prob = 1/6)
[1] 0.160751
La fonction dbinom impl mente donc la fonction de masse dune distribution binomiale. Les arguments size
et prob sont les param tres n et p de la distribution, selon la notation utilis e ci-dessus.
Les fonctions de la famille d* peuvent calculer plusieurs valeurs de densit par un seul appel de la fonction,
car celles-ci acceptent des valeurs darguments de longueur sup rieure 1. Ces fonctions travaillent donc de
fa on vectorielle, comme presque toutes les fonctions de calcul en R.
Voici un exemple de code R permettant de repr senter graphiquement la densit Bin(n = 5, p = 1/6) compl te,
en mettant en vidence la valeur calcul e ci-dessus, soit P (X = 2).
barplot(
height = dbinom(0:5, size = 5, prob = 1/6),
names.arg = 0:5,
main = "Densit Binomiale(5,1/6)",
xlab = "x",
ylab = "dbinom(x, size = 5, prob = 1/6)"
)
barplot(
height = c(0, 0, dbinom(2, size = 5, prob = 1/6), 0, 0, 0),
col = "blue",
add = TRUE
)
Exemple : distribution normale standard
Supposons maintenant que X est une variable al atoire continue de distribution normale standard, donc
X < N ( = 0, 2 = 1). La valeur de la fonction de densit pour cette distribution en la valeur x = 1, souvent
not e fX (1), vaut :
dnorm(x = 1)
[1] 0.2419707
10
012345Densit Binomiale(5,1/6)xdbinom(x, size = 5, prob = 1/6)0.00.10.20.30.40.00.10.20.30.4Voici une repr sentation graphique de la densit compl te dans laquelle la valeur calcul e ci-dessus est mise
en vidence.
curve(expr = dnorm, xlim = c(-3, 3), main = "Densit N(0,1)")
segments(
x0 = c(-4, 1), y0 = dnorm(1), x1 = 1, y1 = c(dnorm(1), -1),
lty = 2, col = "blue"
)
Ici, nous navons pas eu besoin de fournir des valeurs aux arguments de la fonction dnorm relatifs aux
param tres de la distribution, parce que nous avons utilis s leurs valeurs par d faut. Ces param tres, pour la
densit N ( , 2), sont repr sent s par les arguments mean = et sd = (remarquez que largument de la
fonction R repr sente l cart-type, pas la variance).
Tout comme le premier argument, nomm x, les arguments des fonctions de la famille d* repr sentant des
param tres de la distribution acceptent aussi en entr e plus dune valeur. Voici un exemple, qui permet de
calculer la densit en x = 1 pour X < N ( = 2, 2 = 1), X < N ( = 0, 2 = 2.25) et X < N ( = 1, 2 = 4)
en un seul appel la fonction dnorm.
dnorm(x = 1, mean = c(-2, 0, 1), sd = c(1, 1.5, 2))
[1] 0.004431848 0.212965337 0.199471140
2.2 Fonction de r partition
La fonction de r partition dune variable al atoire X est d nie par FX (x) = P (X d x). Il sagit donc
toujours dune probabilit , do le p au d but des noms des fonctions R impl mentant des fonctions de
r partition.
Exemple : distribution normale standard
Prenons encore comme exemple la distribution normale standard. Nous avons donc X < N (0, 1). Calculons
la valeur de la fonction de r partition de cette variable al atoire en x = 1.
pnorm(q = 1)
[1] 0.8413447
Il sagit de la valeur de la probabilit P (X d 1).
11
32101230.00.10.20.30.4Densit N(0,1)xdnorm(x)Le premier argument des fonctions de la famille p* ne se nomme pas x, il se nomme plut t q. Cette lettre
r f re au mot quantile et souligne le lien entre les fonctions de r partition et les fonctions quantiles. Les
arguments suivants des fonctions de la famille p* permettent de sp cier les valeurs des param tres de la
distribution, comme pour les fonctions de la famille p*.
Voici une illustration graphique du lien entre la fonction de densit et la fonction de r partition en utilisant
la distribution normale standard. La valeur de la fonction de r partition en un point quelconque x (dans le
graphique x = 1) est gale laire sous la courbe de densit entre et x.
par_default <- par(mfrow = c(1, 2))
curve(expr = dnorm, xlim = c(-3, 3), main = "Densit N(0,1)")
x <- seq(from = -3, to = 1, length = 100)
polygon(x = c(x, 1, -3), y = c(dnorm(x), 0, 0), col = "blue")
curve(
expr = pnorm, xlim = c(-3, 3),
main = "Fonction de r partition N(0,1)", xname = "q"
)
segments(
x0 = c(-4, 1), y0 = pnorm(1), x1 = 1, y1 = c(pnorm(1), -1),
lty = 2, col = "blue"
)
par(par_default)
2.3 Fonction quantile
La fonction quantile est linverse g n ralis de la fonction de r partition. Les fonctions R impl mentant des
fonctions quantile ont un nom qui d bute par le lettre q pour quantile.
Exemple : distribution normale standard
Voyons de quoi lair la fonction quantile de la distribution normale standard.
Premi rement, calculons la valeur de la fonction quantile en un point, disons en p = 0.8413447.
12
32101230.00.10.20.30.4Densit N(0,1)xdnorm(x)32101230.00.20.40.60.81.0Fonction de r partition N(0,1)qpnorm(q)qnorm(p = 0.8413447)
[1] 0.9999998
Il sagit de la valeur x pour laquelle P (X d x) = 0.8413447, o X < N (0, 1).
Le premier argument dune fonction de la famille q* se nomme p. Cette notation peut nous aider nous
rappeler que cet argument repr sente une probabilit et accepte donc seulement des valeurs entre 0 et 1.
Encore une fois, les arguments suivants des fonctions de la famille q* permettent de sp cier les valeurs des
param tres de la distribution.
Le graphique suivant illustre le lien entre la fonction de r partition et la fonction quantile. Le graphique de la
fonction quantile est simplement obtenu en inversant les axes du graphique de la fonction de r partition.
par_default <- par(mfrow = c(1,2), pty = "s")
curve(
expr = pnorm, xlim = c(-3, 3), n = 1000, ylim = c(0, 1), asp = 6,
main = "Fonction de r partition N(0,1)", xname = "q"
)
segments(
x0 = c(-4, 1), y0 = pnorm(1),
lty = 2, col = "blue"
Publicité
x1 = 1, y1 = c(pnorm(1), -1),
)
curve(
expr = qnorm, xlim = c(0, 1), n = 1000, ylim = c(-3, 3), asp = 1/6,
main = "Fonction quantile
N(0,1)", xname = "p"
)
segments(
x0 = c(-0.2, pnorm(1)), y0 = qnorm(pnorm(1)),
x1 = pnorm(1), y1 = c(qnorm(pnorm(1)), -4),
lty = 2, col = "blue"
)
par(par_default)
13
32101230.00.20.40.60.81.0Fonction de r partition N(0,1)qpnorm(q)0.00.20.40.60.81.03210123Fonction quantile N(0,1)pqnorm(p)3 G n ration de nombres pseudo-al atoires
Les fonctions r* permettent de g n rer pseudo-al atoirement des observations selon une certaine distribution
d sign e par *. La lettre r au d but de leur nom signie random.
Par exemple, voici la repr sentation graphique de 3 chantillons g n r s al atoirement selon 3 distributions
di rentes : des distributions normale, uniforme continue et khi-deux. Pour chaque chantillon, nous tra ons
lhistogramme des observations simul es pour repr senter leur densit empirique. Nous superposons cet
histogramme la courbe de densit de la distribution th orique partir de laquelle les observations ont t
g n r es.
par_default <- par(mfrow = c(1, 3))
Densit normale d'esp rance 5 et de variance 4
x1 <- rnorm(1000, mean = 5, sd = 2)
hist(x = x1, freq = FALSE, ylab = "Proportion", main = "Densit empirique de x1")
curve(expr = dnorm(x, mean = 5, sd = 2), add = TRUE, col = "blue")
title(main = "courbe bleue = densit vis e N(5,4)", line = 0.5)
Densit uniforme continue entre 2 et 8
x2 <- runif(1000, min = 2, max = 8)
hist(x = x2, freq = FALSE, ylab = "Proportion", main = "Densit empirique de x2")
curve(expr = dunif(x, min = 2, max = 8), add = TRUE, col = "blue")
title(main = "courbe bleue = densit vis e U(2,8)", line = 0.5)
Densit chi-carr 4 degr s de libert
x3 <- rchisq(1000, df = 4)
hist(x = x3, freq = FALSE, ylab = "Proportion", main = "Densit empirique de x3")
curve(expr = dchisq(x, df = 4), add = TRUE, col = "blue")
title(main = expression(paste("courbe bleue = densit vis e ", chi[4] 2)), line = 0.5)
par(par_default)
14
Comme nous pouvons le constater sur ces graphiques, la distribution empirique des observations g n r es avec
ces fonctions se rapproche vraiment de la distribution th orique demand e. En g n rant un nombre encore
plus grand dobservations (ici nous en avons g n r 1000 pour chaque distribution), la densit empirique se
rapprocherait encore plus de la densit th orique.
3.1 Fonction sample
La fonction sample permet de tirer un chantillon al atoire parmi un ensemble d l ments fourni son
argument x sous forme de vecteur.
sample(x = c("Luc", "Kim", "Paul", " ve"))
[1] "Kim" "Luc" "Paul" " ve"
Ce vecteur peut contenir des donn es de nimporte quel type.
sample(x = 1:6)
[1] 4 5 3 2 6 1
Par d faut, sample eectue un tirage sans remise et s lectionne autant d l ments que lensemble de d part
en contient. La fonction eectue donc une permutation al atoire des l ments de lensemble de d part.
Largument size permet cependant de contr ler la taille de l chantillon tir .
sample(x = 1:6, size = 5)
[1] 4 5 2 1 6
Largument replace permet quant lui de sp cier si le tirage doit tre eectu avec (replace = TRUE) ou
sans remise (replace = FALSE, valeur par d faut).
sample(x = 1:6, size = 10, replace = TRUE)
[1] 5 1 6 5 3 1 6 6 3 4
Il est aussi possible dattribuer des probabilit de s lection chacun des l ments gr ce largument prob.
Par d faut, tous les l ments ont une probabilit gale d tre tir .
15
Densit empirique de x1x1Proportion202468100.000.050.100.150.20courbe bleue = densit vis e N(5,4)Densit empirique de x2x2Proportion23456780.000.050.100.150.20courbe bleue = densit vis e U(2,8)Densit empirique de x3x3Proportion0510150.000.050.100.15courbe bleue = densit vis e c42sample(x = 1:6, size = 20, replace = TRUE, prob = c(1/2, rep(1/10, times = 5)))
[1] 5 3 3 3 1 1 1 1 6 1 6 1 6 3 1 1 4 3 2 6
La fonction sample.int est tr s similaire la fonction sample, mais elle prend comme premier argument un
seul entier, n, et tire al atoirement size entiers entre 1 et n.
sample.int(n = 6, size = 4)
[1] 5 2 6 3
Si nous souhaitons s lectionner al atoirement des observations (lignes) dans un jeu de donn es, il est dusage
de s lectionner dabord des entiers compris entre 1 et le nombre total dobservations, puis dextraire du jeu
de donn e les observations sur les lignes portant les num ros s lectionn s. Voici un exemple, utilisant c l bres
donn es iris, incluses dans linstallation de base de R dans le data frame nomm iris (du package datasets).
str(iris)
'data.frame':
$ Sepal.Length: num
$ Sepal.Width : num
$ Petal.Length: num
$ Petal.Width : num
$ Species
150 obs. of 5 variables:
5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
: Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
index_ech <- sample.int(n = nrow(iris), size = 5, replace = FALSE)
index_ech
[1]
9 53 84 118
80
iris_ech <- iris
iris_ech
##
9
53
84
118
80
Sepal.Length Sepal.Width Petal.Length Petal.Width
Species
setosa
0.2
1.5 versicolor
1.6 versicolor
2.2
virginica
1.0 versicolor
4.4
6.9
6.0
7.7
5.7
1.4
4.9
5.1
6.7
3.5
2.9
3.1
2.7
3.8
2.6
3.2 Germe de la g n ration pseudo-al atoire
Les nombres g n r s avec les fonctions r* et les chantillons tir s avec sample sont quali s de pseudo-
al atoires, car ils proviennent dun algorithme d terministe qui tente de reproduire le hasard. Un tel algorithme
est nomm en anglais random number generator (RNG) ou pseudo-random number generator. La che daide
ouverte par la commande help(Random) contient de linformation sur la g n ration de nombres pseudo-
al atoires en R.
Plusieurs RNG sont impl ment s en R. Celui utilis par d faut, nomm Mersenne Twister, a t choisi parce
quil est r put tre bon. Sans entrer dans les d tails du fonctionnement des RNG impl ment s dans le
package base de R, il faut savoir quils travaillent tous partir dune s quence de nombres appel e germe (en
anglais seed). En contr lant ce germe, il est possible de g n rer de nouveau, autant de fois que d sir , les
m mes valeurs.
Par d faut, R contr le le germe des RNG de fa on automatique. Chaque fois quune commande faisant
intervenir un RNG est valu e, R cr e un nouveau germe partir, notamment, de lheure laquelle la
commande est soumise. Ainsi, deux g n rations pseudo-al atoires cons cutives ne produisent en g n ral pas
le m me r sultat.
16
sample(x = letters, size = 5)
[1] "c" "v" "a" "u" "x"
sample(x = letters, size = 5)
[1] "t" "k" "m" "f" "p"
En tout temps, il est possible de conna tre le germe du RNG en R. Il est stock dans un objet nomm
.Random.seed. Cet objet est un vecteur num rique de longueur 626 pour le RNG Mersenne Twister.
str(.Random.seed)
int [1:626] 10403 70 -738736558 -2074313779 -2024393337 -394776466 -210556856 122496..
sample(x = letters, size = 5)
[1] "p" "b" "g" "n" "c"
str(.Random.seed)
int [1:626] 10403 75 -738736558 -2074313779 -2024393337 -394776466 -210556856 122496..
sample(x = letters, size = 5)
[1] "t" "n" "f" "e" "d"
str(.Random.seed)
int [1:626] 10403 82 -738736558 -2074313779 -2024393337 -394776466 -210556856 122496..
Nous constatons quau moins un l ment de ce vecteur (le deuxi me l ment) change chaque fois que nous
appelons la fonction sample. La fonction set.seed permet de xer le germe du RNG partir dune seule
valeur enti re. Par exemple, la commande suivante :
set.seed(753)
nimporte quel moment, dans nimporte quelle session R, nous obtenons le m me chantillon
set.seed(753)
sample(letters, size = 5)
[1] "v" "r" "g" "i" "t"
si nous soumettons la commande set.seed(753) avant la commande sample(letters, size = 5).
Lutilit de xer le germe dune g n ration pseudo-al atoire est de rendre son r sultat reproductible.
17