Calculs statistiques en R

Statistiques, Programmation, R · course

Voir tous les documents en programmation

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