Introduction à bootstrap
M2R santé publique
02 octobre 2020
Principe
I On s’intéresse au paramètre d’une loi de probabilité Fθ , fθ ,
f (x ; θ) ou Pθ
I On ne possède qu’un échantillon X1 , . . . , Xn issu de Fθ
I θb = t X1 , . . . , Xn est un estimateur de θ
Principe
I On s’intéresse au paramètre d’une loi de probabilité Fθ , fθ ,
f (x ; θ) ou Pθ
I On ne possède qu’un échantillon X1 , . . . , Xn issu de Fθ
I θb = t X1 , . . . , Xn est un estimateur de θ
Plusieurs questions liées à la distribution de θb
I Biais de l’estimateur θb
I Variance de θb (sa précision)
I Intervalle de confiance pour θ
Simuler suivant Fθ ou fθ
Exemple : supposons que X ∼ N (θ, 1) où θ = 2
[Link](123)
# simuler un jeu de données de 100 individus
n <- 100
x <- rnorm(n, mean=2, sd=1)
# simuler N jeux de données
N <- 10000
X <- matrix(rnorm(N*n,2,1), N,n)
t <- rowMeans(X)
summary(t)
Le résultat
[Link](123)
# simuler un jeu de données de 100 individus
n <- 100
x <- rnorm(n, mean=2, sd=1)
# simuler N jeux de données
N <- 10000
X <- matrix(rnorm(N*n,2,1), N,n)
t <- rowMeans(X)
summary(t)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.623 1.932 1.999 1.999 2.068 2.376
Le code pour tracer les sorties
hist(t, nclass=40, freq=F, ylab="",xlab="",main="")
xx <- seq(1.5, 2.5, le=200)
et <- 1/sqrt(n)
points(xx, dnorm(xx, 2, et),
type="l", lwd = 2, col="red")
La figure
hist(t, nclass=40, freq=F, ylab="",xlab="",main="")
xx <- seq(1.5, 2.5, le=200)
et <- 1/sqrt(n)
points(xx, dnorm(xx, 2, et), type="l", lwd = 2, col="red")
4
3
2
1
0
1.6 1.8 2.0 2.2 2.4
Une petite parenthèse : générateur de nombres aléatoires
La loi de base que l’on simule est la loi uniforme sur [0, 1], un tel
générateur est inclus dans tous les langages de programmation et
dans tous les logiciels.
Une petite parenthèse : générateur de nombres aléatoires
La loi de base que l’on simule est la loi uniforme sur [0, 1], un tel
générateur est inclus dans tous les langages de programmation et
dans tous les logiciels.
I La méthode de congruence linéaire (D.H Lehmer-Lucas 1948),
gn+1 = agn + b mod m
où a, b, m et g0 sont à choisir intialement.
I Ce générateur fabrique une suite d’entiers aléatoires allant de 0
à m − 1.
I La suite gn /m − 1 fournit des nombres sur l’intervalle [0, 1].
I La suite ainsi produite possède une période inférieure ou égale
à m.
I Un générateur de ce type, nommé RANDU, fut exploité
pendant des années dans toutes sortes de logiciels.
I Les paramètres de RANDU sont m = 235 , a = 3125, b = 1 et
Inversion de la fonction de répartition
On veut générer des nombres aléatoires suivant une loi données par
sa fonction de répartition F . Comment procéder ?
Inversion de la fonction de répartition
On veut générer des nombres aléatoires suivant une loi données par
sa fonction de répartition F . Comment procéder ?
I Générer U1 , U2 , . . . , Un suivant une loi uniforme U(0, 1).
I On forme
X1 , X2 , . . . , Xn = F −1 (U1 ), F −1 (U2 ), . . . , F −1 (Un )
Inversion de la fonction de répartition
On va s’intéresser à la loi exponentielle E λ où λ = 2
I Rappelons que F (x ) = 1 − e −λx
I Simuler 100 réalisations de la loi E(2)
I Tracer sur la même figure l’histogramme des réalisations ainsi
que la vraie densité de probabilité de la loi E(2)
Inversion de la fonction de répartition
[Link](123)
x.u <- runif(1000)
x.e <- qexp(x.u, rate = 2)
hist(x.e, nclass=30, freq = F, main="", xlab="", xlab="")
x<-seq(0,3.6, le=100)
points(x, dexp(x, 2), type="l", lwd = 2, col ="red")
Sortie
[Link](123)
x.u <- runif(10000)
x.e <- qexp(x.u, rate = 2)
hist(x.e, nclass=40, freq = F, main="", ylab="", xlab="")
x<-seq(0,3.6, le=100)
points(x, dexp(x, 2), type="l", lwd = 2, col ="red")
1.5
1.0
0.5
0.0
0 1 2 3 4 5
Simuler une loi normale : Box-Muller
Soit, U et V deux variables aléatoires uniformes sur [0, 1]
indépendantes, la variable
q
X = cos(2πU) − 2 log(V )
suit une loi normale N (0, 1).
Alternative : rééchantillonnage
Fθ est en général inconnue !
Alternative : rééchantillonnage
Fθ est en général inconnue !
Le bootstrap consiste donc à faire une simulation à partir de la loi
empirique Fn observée (i.e. l’échantillon) au lieu de la vraie loi Fθ ,
qui est inconnue.
Alternative : rééchantillonnage
Fθ est en général inconnue !
Le bootstrap consiste donc à faire une simulation à partir de la loi
empirique Fn observée (i.e. l’échantillon) au lieu de la vraie loi Fθ ,
qui est inconnue.
I On tire B échantillons x ∗1 , x ∗2 , . . . , x ∗B où chaque x ∗b est
constitué en tirant avec remise n valeurs de l’échantillon
X1 , . . . , Xn .
I On appelle chaque tirage d’un x ∗b un bootstrap
La fonction sample de R
I Sous R, taper :
?sample
I On propose de faire un premier test avec cette fonction
[Link](123)
# 100 réalisations d'une gaussienne N(10,10)
x <- rnorm(100, mean = 10, sd = 10)
# faire un tirage avec remise de taille 100
[Link] <- sample(?, ?, ?) ## attention remplacer les ?
Un jeu de données
Exemple : jeu de données de taille n = 47 observations de la durée
de rémission d’une leucémie en semaines.
## lecture du jeu de données leucemie
setwd("~/Dropbox/enseignements/bootstrap")
rm(list = ls())
## je vais lire le fichier [Link]
load("~/Dropbox/enseignements/bootstrap/[Link]")
Exemple : estimation de la médiane
I On s’intéresse à la médiane dans le jeu de données de leucemie,
ici la statistique t(x) est la médiane empirique de l’échantillon
x = X1 , . . . , Xn .
I Proposer une procédure qui génère B = 1000 échantillons
bootstrap à partir du jeu de données leucemie.
I Calculer l’estimateur bootstrap du biais donné par
B
1 X
median x ∗b − median X1 , . . . , Xn
biais
d =
B b=1
I Estimer la variance et l’écart type de l’estimateur de la
médiane.
Le package boot de R
On souhaite ici, voir ce que fait le package boot et le comparer à
nos résultats sur le jeux de données leucémie.
[Link](123)
[Link]<-function(y,i){z<-median(y[i]); return(z)}
boot.obj1<-boot(data = y,
statistic = [Link],
R = B)
names(boot.obj1)
boot.obj1
Bilan
I La variablilité de l’échantillonnage dans la population se reflète
dans la variabilité de l’échantillonnage dans la sous-population
y.
I Nous avons utiliser la variance du vecteur boot pour estimer la
variance de median(y ).
I Il est clair que ce que nous venons de faire pour la médiane,
nous pouvons le répéter pour estimer la variance d’autres
statistiques.
Intervalles de confiance : jeu de données CommuteAtlanta
I Charger le package Lock5Data et le jeu de données
CommuteAtlanta
I Se faire une idée du jeu de données : sa taille, les noms des
variables etc . . .
I Générer B = 1000 échantillons bootstrap sans faire appel au
package boot de la variable trajet (Distance)
I Calculer l’écart type du trajet moyen
I Construire un intervalle de confiance du trajet moyen