You are on page 1of 47

C.

Huber Master 2





Le Bootstrap




I PREMIERE PARTIE : COURS


I Le principe 1
1 Illustration 1
2 Elimination du biais 3
II Notations et Remarques 4
3 Notations 4
4 Remarques 5
III Simulations 6

IV Deux applications fondamentales 7
5 Evaluation de la prcision d'une estimation 7
6 Rduction du biais 9
7 Intervalle de confiance 12


Exercices 1 6
2 7
3 11
4 11
5 14
6 14


II DEUXIEME PARTIE : EXEMPLES PRATIQUES AVEC SPLUS et R

A. Estimation
1 Exemple 1: dures de rmission: mdiane 15
2 Exemple 2 : dures de rmission: variance 20
3 Exemple 3 : maladies coronariennes 21
4 Exemple 4 : intervalle de confiance pour un coefficient de corrlation 25
5 Exemple 5 : courbe ROC 26

B. Tests
1 Exemple 6 : rats traits et tmoins 33
2 Exemple 7 : test pour un chantillon 34


III TROISIEME PARTIE : UTILISATION du BOOTSTRAP en R 36

III QUATRIEME PARTIE : CONTRE-EXEMPLE UNIFORME 43

Bootstrap 1
Une methode de reechantillonnage:
le bootstrap.
Catherine Huber
Le terme de reechantillonnage, ou, en anglais, bootstrap , qui evoque laction
de se hisser en tirant sur ses propres lacets, designe un ensemble de methodes qui
consistent `a faire de l inference statistique sur de nouveaux echantillons tires `a par-
tir dun echantillon initial. Disposant dun echantillon destine `a donner une certaine
information sur une population, on tire au sort, parmi la sous-population reduite `a
cet echantillon, un nouvel echantillon de meme taille n. Et on rep`ete cette operation
B fois, o` u B est grand. On analyse ensuite les nouvelles observations ainsi obtenues
pour aner linference faite sur les observations initiales. A priori, on peut avoir des
doutes sur lecacite dune telle methode et penser quil ny a aucune amelioration
`a esperer en reechantillonnant `a partir du meme echantillon. En eet, aucune infor-
mation supplementaire ne peut etre esperee, toute linformation etant contenue dans
lechantillon initial. Cependant, comme on va le voir, ce reechantillonnage, sil ne ra-
joute aucune information, permet, dans certains cas, dextraire de lechantillon de base
linformation souhaitee.
Partie I
Le principe.
1 Illustration
Le principe qui sous-tend le bootstrap est tr`es simple et tr`es ancien, et il peut etre
illustre par un syst`eme dembotement (P. Hall, 1992) tel que celui des poupees russes:
1
1 ILLUSTRATION Bootstrap 2
il sagit dune poupee qui, lorsquon louvre, laisse apparatre une poupee identique
mais plus petite (homothetique), qui `a son tour contient une poupee plus petite,
etc... . Imaginons que lon veuille estimer le nombre r des taches de rousseur de la
premi`ere de ces poupees, qui est aussi la plus grande, et que lon ne puisse pas lobserver.
On suppose quon dispose seulement de la seconde, contenue dans la premi`ere, et qui
contient toutes les autres. Soit r
o
le nombre des taches de rousseur de la seconde. On
peut, en premi`ere approximation, estimer r par r
o
. On appelle Poupee la plus grande
poupee, non observee, poupee 0 celle qui est observee, poupee 1 celle quon trouve
dans la poupee 0, et ainsi de suite pour toutes les poupees plus petites que la poupee
1, qui sont toutes observables puisque contenues dans la poupee 1.
Comme la Poupee initiale est plus grande que la poupee numero 0, on sattend `a
ce que r soit plus grand que r
o
et dans le rapport de leurs tailles. Cependant, on ne
peut pas observer la premi`ere poupee et on ne connat donc pas sa taille. En revanche,
on peut observer le nombre des taches de rousseur r
1
de la troisi`eme poupee. Donc, si
le rapport du nombre des taches de rousseur dune poupee `a la suivante est toujours
le meme, le rapport r
o
/r
1
, qui, lui, est observable, fournira une estimation du rapport
r/r
o
. Cela donne comme estimateur de r :
r = r
0
r
0
r
1
.
Mais il se peut que le rapport de ces nombres ne soit pas constant, ce que lon peut
verier en comparant r
o
/r
1
`a r
1
/r
2
par exemple, puisque ces deux quantites sont observ-
ables. Si ces deux quantites ne sont pas egales, r
o
/r
1
ne constitue quune approximation
pour la valeur de r/r
0
.
Pour eectuer une correction supplementaire, si on peut supposer que le rapport des
tailles dune poupee `a la suivante, bien que netant plus constant, varie reguli`erement,
par exemple les rapports de taille dune poupee `a la suivante sont dans un rapport
constant, cest `a dire que
r/r
0
r
0
/r
1
=
r
i1
/r
i
r
i
/r
i+1
,
alors, on peut eectuer une correction supplementaire en observant r
2
sur la poupee
suivante et en prenant pour estimateur de r la valeur precedente multipliee par
(r
0
/r
1
)/(r
1
/r
2
),
ce qui donne :
r = r
0
(
r
0
r
1
)
2
r
2
r
1
On peut `a nouveau verier si lhypoth`ese faite sur la variation des rapports est exacte
en considerant la poupee suivante, et, dans le cas contraire, eectuer une nouvelle
correction.
C.Huber 2
2 ELIMINATION DU BIAIS Bootstrap 3
2 Elimination du biais
Lun des emplois les plus frequents du bootstrap est deliminer le biais dun estimateur
de la mani`ere suivante : Soit T un estimateur de , param`etre de la loi F commune
aux X
i
constituant lobservation X = (X
1
, , X
n
)). Son biais est
b(T) = E(T|F)
en notant E( | F) la moyenne (lesperance) pour la loi F, car cette notation sera
commode dans la suite. On estime ce biais par
b

(T) = E(T

|X) T
o` u T

est calcule sur un echantillon bootstrap X

issu de lechantillon initial X, et


E(T

|X) signie la moyenne de T

pour la loi empirique determinee par X, cest `a dire


la loi qui attribue la probabilite 1/n `a chacune des valeurs observees x
i
, i = 1, , n.
Lestimateur T est ensuite corrige de son biais et donc remplace par :
T b

(T) = 2T E(T

|X)
Comme T b(T) est sans biais pour , T b

(T) sera presque sans biais. Prenons un


exemple. Supposons que lon veuille estimer la moyenne dune population pour une
variable aleatoire dont la fonction de repartition est F, inconnue, soit :
=

xdF(x)
et que lon dispose pour cela dun echantillon X = (X
1
, , X
n
) de n observations
independantes et equidistribuees selon F. Comme on la dit, la loi empirique est celle
qui attribue la probabilite 1/n `a chacune des n observations. Designons par F
0
sa
fonction de repartition, appelee fonction de repartition empirique:
F
0
(x) =

n
i=1
1{x
i
x}
n
On peut, pour estimer , utiliser la meme quantite (on dit la meme fonctionnelle)
que ci-dessus, en rempla cant F, qui est inconnue, par la fonction de repartition em-
pirique F
0
qui, elle, est connue. On estime donc par
=

X =

xdF
0
(x) =

i
X
i
n
qui est la moyenne observee sur lechantillon ou moyenne empirique. Dans lexemple
considere, on sait que lestimateur ainsi obtenu est sans biais. Mais supposons main-
tenant que lon veuille estimer un autre param`etre, cest ` a dire une autre fonctionnelle
de la loi F , par exemple
C.Huber 3
3 NOTATIONS Bootstrap 4

r
= (

xdF(x))
r
.
On pourra verier que lestimateur correspondant

r
= (

X)
r
= (

i
X
i
n
)
r
nest pas sans biais en general, sauf si r = 1. Comment peut on le corriger pour quil
devienne sans biais ? Pour cela, il faudrait calculer le biais pour le lui retrancher, ou,
si ce nest pas possible, estimer ce biais. Le biais b vaut
b = E(

r
)
r
= E{[

xdF
0
(x)]
r
[

xdF(x)]
r
| F}
Comme dans le calcul du biais intervient F qui est inconnue, on peut appliquer `a
nouveau le principe initial et remplacer dans cette expression F par F
0
et donc F
0
par
F
1
obtenu par un nouvel echantillonnage `a partir de F
0
, cest `a dire par echantillonnage
`a partir de lechantillon.
Lanalogie avec les poupees russes est la suivante : la population initiale, non ob-
servable, de distribution F correspond `a la grande Poupee, et lechantillon observe, de
distribution F
0
, `a la plus grande des poupees observees, la poupee numero 0. Mais alors
`a quoi correspond la poupee numero 1 , que lon decouvre en ouvrant la poupee numero
0 ? Eh bien, et cest l`a le principe du bootstrap, on lobtient en eectuant, `a partir de
lechantillon, de loi F
0
, considere maintenant comme nouvelle population initiale, un
nouvel echantillon, de meme taille n , appele echantillon bootstrap et note X

. Comme
on aura en general B echantillons bootstrap, on les notera X

b
, avec b variant de 1 `a
B quand on aura besoin de les distinguer. On dit que on reechantillonne.
Partie II
Notations et remarques.
3 Notations
Lechantillon initial est note
X = (X
1
, ..., X
n
)
et F
0
la loi empirique associee. Les echantillons obtenus par reechantillonnage ou
reechantillons, ou echantillons bootstrap sont notes
X

= (X

1
, ..., X

n
).
C.Huber 4
4 REMARQUES Bootstrap 5
Les echantillons X

sont des echantillons fondes sur F


0
. On notera indieremment:
P(X

j
= X
i
|X) = 1/n , 1 i, j n.
ou
P(X

j
= X
i
|F
0
) = 1/n , 1 i, j n.
car d`es quon connat X on peut en deduire F
0
et reciproquement.
4 Remarques
1. Probl`emes parametriques et non parametriques:
La loi F
0
associee `a lechantillon peut etre, comme dans lexemple ci-dessus de
lestimation dune moyenne, la loi empirique. Cest le cas lorsquon a aaire `a un
probl`eme non parametrique. Mais la loi F
0
peut etre une loi issue dun mod`ele
parametrique: les param`etres, quon notera dans la suite, sont alors estimes en
employant le mod`ele, en principe par maximum de vraisemblance, et alors F
0
est
la loi appartenant au mod`ele, dont les param`etres sont ceux estimes `a partir de
lechantillon.
2. Param`etres et fonctionnelles :
On a vu que pour estimer une fonctionnelle T(F) de la distribution inconnue
F on rempla cait F, dans le cas non parametrique, par la loi empirique F
0
as-
sociee `a lechantillon. Mais si par exemple on veut estimer un param`etre comme
le centre de symetrie dune loi symetrique, ce centre de symetrie peut corre-
spondre `a plusieurs fonctionnelles dierentes: la moyenne, la mediane de F et
beaucoup dautres encore; par exemple les moyennes -tronquees. Ces derni`eres
sont obtenues en prenant la moyenne des observations qui restent lorsquon a ote
les plus grandes et les plus petites, en proportion . Il est donc necessaire de dire
precisement quelle est la fonctionnelle que lon veut estimer.
3. Approximation dune statistique bootstrap :
Il faut bien distinguer deux elements dierents dans les methodes bootstrap :
Le principe lui-meme, illustre par les poupees embotees, et qui consiste `a
remplacer la loi initiale inconnue par une loi associee `a lechantillon observe,
et toutes les lois derivees necessaires. Le (ou les) param`etre(s) dinteret
est (sont) ainsi remplace(s) par une statistique bootstrap, en principe
compl`etement calculable(s).
C.Huber 5
Bootstrap 6
Le calcul proprement dit de la statistique bootstrap : bien que la statistique
bootstrap soit en principe compl`etement calculable, souvent son calcul ef-
fectif serait trop long. Il sagit en general desperances fondees sur la loi
F
0
et des derivees de cette loi. Aussi, Efron a-t-il suggere de le faire par
une methode de type Monte-Carlo qui consiste `a reechantillonner `a partir de
lechantillon initial, obtenant des echantillons de meme taille n. Si le nombre
des reechantillonnages est assez grand, on aura une bonne approximation de
lesperance cherchee `a cause de la loi des grands nombres.
Partie III
Simulations.
Etant donnee une loi de probabilite sur IR de fonction de repartition F, on peut in-
venter un echantillon de n observations dune variable aleatoire reelle X de loi F en
faisant n tirages independants issus de la loi F.
En principe, la loi de base que lon simule est la loi uniforme sur [0 ; 1], quon note U
[01]
,
`a partir dun generateur de nombres au hasard. Un tel generateur est inclus dans tous
les langages de programmation et dans tous les logiciels. A partir de cet echantillon
uniforme simule (U
1
, . . . , U
n
), on peut ensuite construire un echantillon simule pour
nimporte quelle loi F en remarquant que:
X = F
1
(U)
a F pour fonction de repartition, comme on pourra aisement le verier, en particulier
dans le cas o` u F est continue et strictement monotone. On forme la suite:
(X
1
, X
2
, . . . , X
n
) = (F
1
(U
1
), F
1
(U
2
), ..., F
1
(U
n
))
qui est alors un echantillon de la loi F.
Exercice 1
Comment generer un echantillon de taille n = 10 dune variable exponentielle de
param`etre 1 ?
Remarque:
Certaines lois ont des inverses F
1
qui ne sont pas explicites. Cest vrai en partic-
ulier de la loi normale quon a souvent besoin de simuler. Dans ce cas, on proc`ede
autrement. On a remarque en eet, que, si U et V sont deux variables uniformes sur
[0; 1] et independantes, la variable :
X = cos(2U)

(2 log(V ))
C.Huber 6
5 EVALUATION DE LA PR

ECISION DUNE ESTIMATION Bootstrap 7


suit une loi normale standard, N(0, 1).
Exercice 2
Comment simulerait on une loi normale quelconque de moyenne et de variance
2
?
Le bootstrap consiste donc `a faire une simulation `a partir, non pas de la loi vraie
F, qui nest en general pas connue, mais de la loi empirique F
n
qui a ete observee.
Partie IV
Deux applications fondamentales du bootstrap:
Les deux applications fondamentales du bootstrap sont la reduction du biais et la
determination dintervalles de conance. Nous allons commencer par presenter un ex-
emple donne par Efron, qui est celui qui a le premier mis en valeur les possibilites de
cette methode, connue depuis longtemps mais non exploitee, notamment `a cause du
temps de calcul quelle implique.
5 Evaluation de la precision dune estimation
Voici un exemple propose par Efron:
A lorigine, le bootstrap a ete employe pour evaluer la precision dun estimateur. Par
exemple, lors dun petite experimentation sur des souris, on a tire au sort parmi 16
souris, 7 qui re coivent le nouveau traitement alors que les 9 autres sont des controles
les qui re coivent un placebo. Leurs durees de vie sont mesurees, en jours, et donnent
les resultats suivants :
moyenne ecart-type
Traitees X 94 197 16 38 99 141 23 86,86 25,24
Controles Y 52 104 146 10 51 30 40 27 46 56,22 14,14
On a limpression que le traitement assure une meilleure survie que le placebo, car
les durees moyennes observees sont respectivement : 86,86 et 56,22. Mais les deux
echantillons sont petits et la precision de ces deux estimateurs des deux vraies moyennes
certainement tr`es mauvaise. Comment mesurer cette precision ? Si lon disposait dune
C.Huber 7
5 EVALUATION DE LA PR

ECISION DUNE ESTIMATION Bootstrap 8


taille dechantillon susamment grande pour pouvoir appliquer lapproximation nor-
male, on utiliserait le fait que:
L(X | F) N(,
s
2
n
)
Mais les tailles dechantillon sont trop faibles pour cela. De plus, si au lieu de
comparer les moyennes, on comparait les medianes, qui sont ici respectivement 94 et
46, que faire pour en estimer la precision et savoir `a quel point elles sont eectivement
dierentes ? Commen cons par considerer le cas des souris traitees. Eh bien, si le
principe du bootstrap est valable, cest `a dire si on peut remplacer la loi inconnue F
de X par la loi observee F
0
( sur le 7-echantillon) et lechantillon initial X lie `a F
0
par
lechantillon bootstrap X

et la loi associee F
1
, on a lidentication suivante :
L(X | F) L(X

| F
0
)
Comme F
0
est connue, la loi de X

sen deduit compl`etement, et donc aussi la loi de


la moyenne de X

. Si on prend les quantiles 0,025 et 0,975 de cette loi, on sait quavec


une probabilite de 0,95 cette moyenne va rester entre ces deux valeurs. De meme pour
la mediane ou nimporte quelle autre statistique. On peut remarquer aussi quau lieu
de sinteresser aux deux quantiles 0,025 et 0,975 de la moyenne pour voir `a quel point
elle est precise, on peut vouloir estimer lecart-type de la moyenne, ( ou de la mediane,
dailleurs). On proc`edera de la meme fa con : par remplacement de lecart-type cherche
par lecart-type de la statistique bootstrap. Dans lequation (*), le membre de droite
est en principe compl`etement calculable mais en pratique il est en general beaucoup
plus simple de reechantillonner un grand nombre de fois :
X
1
, X
2
, . . . , X
B
On reechantillonne B fois . Pour chaque echantillon X
b
, on calcule la statistique
qui nous interesse: soit la moyenne, soit la mediane, dans les cas envisages ici. On
obtient ainsi une loi empirique pour cette statistique, qui, si B est assez grand, est une
bonne approximation de la vraie loi . Lestimateur bootstrap de lecart-type est donne
par

B
b=1
(

X

b
)
2
B 1
}
et voici ce que donne cette statistique pour dierents nombres B de reechantillonnages.
B 50 100 250 500 1000 inni

(moyenne) 19,72 23,63 22,32 23,79 23,02 23,36

(mediane) 32,21 36,35 34,46 36,72 36,48 37,83


C.Huber 8
6 R

EDUCTION DU BIAIS Bootstrap 9


En ce qui concerne la moyenne, on voit que lecart-type bootstrap est proche de
lestimateur usuel. Pour la mediane, on constate quelle est plus dispersee.
6 Reduction du biais
Dans lexemple precedent, on estimait une moyenne par la moyenne observee, et on
sait bien que dans ce cas on na aucun probl`eme de biais. Par contre dans beaucoup
de cas, meme lestimateur du maximum de vraisemblance a un biais. On peut utiliser
le bootstrap pour reduire ce biais. Supposons que lon veuille estimer
(F) = [

xdF(x)]
r
`a partir dun echantillon auquel est associe F
0
. On choisit lestimateur

(F) = (F
0
) = [

xdF
0
(x)]
r
Quel est son biais ? Par denition
Biais = E{(F) (F
0
) | F }
Comme on ne connat pas F, on utilise le principe du bootstrap en rempla cant dans
cette equation F par F
0
et F
0
par F
1
, o` u F
1
est la loi associee `a un n-echantillon dune
variable de loi F
0
:

Biais = E{(F
0
) (F
1
) | F
0
}
Donc lestimateur sans biais de sobtient en retranchant `a (F
0
) cet estimateur
de son biais, soit:
Estimateur sans biais de = (F
0
)

Biais
Pour obtenir un estimateur sans biais, on doit donc ajouter t `a (F
0
) o` u t est deni
par
E((F
0
) (F) +t) = 0 (1)
On a donc remplace lequation initiale qui donne la correction t que lon devrait
faire pour supprimer le biais de lestimateur

(F
0
) par une equation bootstrap qui
donne une correction t

, en principe calculable, et dont on esp`ere quelle est une


C.Huber 9
6 R

EDUCTION DU BIAIS Bootstrap 10


bonne estimation de t. On remarque que t est un param`etre qui depend de F alors
que t

est une statistique dependant de F


0
. De cette equation se deduit la correction
t

= (F
0
) E((F
1
)|F
0
).
On doit donc calculer la quantite:
E((F
1
)|F
0
),
et lestimateur sans biais est alors egal `a:
(F
0
) +t

= 2(F
0
) E((F
1
)|F
0
).
Prenons un exemple concret : On na aucun renseignement sur F, on veut estimer
E(X)
2
et on dispose de 3 observations : x
1
= 1, 2; x
2
= 2, 5; x
3
= 1, 1. Donc
(F) =

xdF(x)
2
On est dans un cas non parametrique. F
0
est donc la f.r. empirique qui donne `a
chacune des trois valeurs ci-dessus la probabilite 1/3 et donc
(F
0
) = [(1.2 + 2.5 + 1.1)/3]
2
= 2, 560.
F
1
peut prendre 10 valeurs dierentes: en eet, quand on tire un echantillon de taille
n = 3 de la loi F
0
, tout se passe comme si on tirait trois fois avec remise dans une
urne `a trois boules numerotees 1.1 1.2 et 2.5. Chaque tirage peut etre resume par le
nombre de fois quon a tire chacune des trois boules:
Frequences probabilite
1.1 1.2 2.5
3 0 0 (1/3)
3
1.210
2 1 0 (1/3)
2
1.284
2 0 1 (1/3)
2
2.454
1 1 1 2/9 2.560
1 2 0 (1/3)
2
1.361
1 0 2 (1/3)
2
4.134
0 2 1 (1/3)
2
2.667
0 1 2 (1/3)
2
4.271
0 3 0 (1/3)
3
1.440
0 0 3 (1/3)
3
6.250
On en deduit E((F
1
)|F
0
) = 1.21/27+1.44/9+2.56/9+... = 2.6955. Lestimateur sans
biais est donc egal `a 2 2.56 2.695 = 2.42(4). On voit clairement sur cet exemple
comment eectuer le calcul explicite dune statistique bootstrap. Mais on voit aussi
C.Huber 10
6 R

EDUCTION DU BIAIS Bootstrap 11


que, meme pour un cas aussi simple o` u la taille n de lechantillon est egale `a 3, il y a
un grand nombre de tirages possibles pour F
1
.
Exercice 3:
1. Si au lieu de 3 valeurs, on avait observe un echantillon de taille n = 4, combien
de tirages F
1
distincts peut on faire ?
2. Meme question pour n = 5.
3. Meme question pour n quelconque lorsque lechantillon initial consiste en m
valeurs distinctes.
Indication:
Le nombre des congurations distinctes de F
1
est egal au nombre de mani`eres distinctes
de repartir n boules dans m cases.
Remarque: Comme F
0
est une loi discr`ete, la loi de (F
1
) est, elle aussi, discr`ete. On
remarque cependant que, meme avec seulement 3 observations, on obtient pour (F
1
)
une loi beaucoup plus etalee. Ce phenom`ene ne fait que saccentuer quand on augmente
n. En particulier, on pourra constater, apr`es avoir fait lexercice precedent, que le nom-
bre des tirages F
1
possibles lorsquon a 10 observations distinctes pour lechantillon
initial, est dej`a tr`es grand : 92 378. Et le mode a pour probabilite 0,00036, ce qui est
tr`es faible. Donc, la loi, sous F
0
dune fonctionnelle (F
1
) , bien quelle soit en principe
discr`ete, est en general tr`es proche dune loi continue. On se sert de cette remarque
quand on veut construire des intervalles de conance.
Exercice 4:
On consid`ere un n-echantillon (X
1
, . . . , X
n
) dune loi uniforme sur [0, ] et on estime
par maximum de vraisemblance.
1. Quel est lestimateur du maximum de vraisemblance de ?
2. Cet estimateur est il sans biais ?
3. Comment utiliser la methode du bootstrap pour reduire le biais ?
Indication:
La loi initiale est F = U
[0]
. F
0
= U
[0,max(X
i
)]
et F
1
= U
[0,max(X
i

)]
C.Huber 11
7 INTERVALLE DE CONFIANCE Bootstrap 12
7 Intervalle de conance
Soit F la loi inconnue, dont on veut estimer le param`etre (F) par un intervalle de
conance `a 0,95 et F
0
la loi associee `a lechantillon observe. (F
0
) est lestimateur
de (F). Soit F la loi inconnue, dont on veut estimer le param`etre (F) par un
intervalle de conance `a 0,95 et F
0
la loi associee `a lechantillon observe. (F
0
) est
un estimateur de (F). Pour obtenir, `a partir de (F
0
), un intervalle de conance (en
general asymetrique) pour (F), on a besoin de connatre la loi de (F) (F
0
), sous
F (alors que F est inconnue) ou une approximation pour cette loi. Si cest le cas, on
prend pour bornes de lintervalle, en notant t
1
= t
0
.025 et t
2
= t
0
.975 les quantiles
0.025 et 0.975 de cette loi: [(F
0
) +t1 ; (F
0
) +t
2
]. En eet:
P((F) (F
0
) < t
1
) = 0.025
P((F) (F
0
) > t
2
) = 0.025
P((F
0
) +t
1
(F) (F
0
) +t
2
) = 0.95.
Si on ne connat pas cette loi, et si on na pas dapproximation pour celle-ci, ou, tout
simplement si on en dispose mais que les calculs sont tr`es compliques, le bootstrap
permet de lui substituer la loi de (F
0
) (F
1
) sous F
0
. Comme F
0
est cette fois
connue, cette loi est, en principe, une loi discr`ete compl`etement calculable. Alors
apparaissent les deux points essentiels du bootstrap:
La validation du bootstrap : il faut en eet valider cette substitution.
La loi bootstrap nest calculable quen principe. En realite, pour les tailles
dechantillon usuelles, le calcul exact serait trop long (voir ci-dessus ce que cela
donne dans le cas n = 3) et on doit donc proceder par simulation pour evaluer
cette loi bootstrap, ou pour evaluer ses param`etres dinteret pour le probl`eme
considere.
Supposons que lon cherche maintenant un intervalle symetrique par rapport `a
(F
0
), qui est par exemple la moyenne observee sil sagit de la moyenne, la mediane
observee sil sagit de la mediane, etc... En utilisant toujours le meme principe du
bootstrap, au lieu de t tel que
P((F
0
) t (F) (F
0
) +t|F) = 0, 95
C.Huber 12
7 INTERVALLE DE CONFIANCE Bootstrap 13
on va chercher t

tel que
P((F
1
) t

(F
0
) (F
1
) +t

| F
0
) = 0, 95
Dans cette derni`ere expression, F
0
etant connu, (F
0
) est connu. Il sagit donc de
determiner la loi de (F
1
) o` u F
1
est echantillonne `a partir de F
0
. On pourra par
exemple penser `a lechantillon ci-dessus, etant la mediane ou le carre de la moyenne,
etc.. . On trouve dans ce cas tr`es facilement la loi de (F
1
) car la taille de lechantillon
est tr`es faible : n = 3. Lorsque n est plus grand, cela devient complique et on utilise la
loi des grands nombres: On reechantillonne B fois, en faisant chaque fois n tirages sans
remise dans lechantillon initial. On obtient ainsi B nouveaux echantillons de taille n:
X

1
, X

2
, . . . , X

B
et B valeurs de la statistique bootstrap (F
1
):
((X
1
), (X
2
), . . . , (X
B
))
Ces valeurs dessinent progressivement la loi de (F
1
) et si on pouvait faire tendre
B vers linni, on aurait exactement la loi de (F
1
). En general, on choisit des valeurs
de B de lordre de 50 `a 200 (voir Efron, 1993).
Remarque : Nous avons vu que, dans le cas non parametrique, (F
1
) a une loi
discr`ete, et, par consequent, une valeur exactement egale `a 0,95 nest generalement pas
atteignable. Nous avons cependant aussi remarque que, tr`es vite quand n crot, la loi
F
1
se diversie et les atomes ne portent pas beaucoup de probabilte chacun. Par con-
tre, dans le cas dune loi parametrique continue, lequation ci-dessus peut se resoudre
exactement : il ny a pas de saut de la probabilite qui regit (F
1
).
Exemple:
Prenons la loi exponentielle F = E() de fonction de repartition F(x) = exp (x/) et
(F) = . Lestimateur du maximum de vraisemblance de est la moyenne empirique
(on pourra le verier `a titre dexercice):

=

X
Donc
F
0
= E(

) = E(

X)
Notons la moyenne empirique Y/n : la loi de Y est la loi de la somme de n variables
exponentielles de meme param`etre et donc cest une loi gamma (n, )(on pourra le
verier ). Lequation qui donne lintervalle de conance bootstrap
P((F1) t

(F
0
) (F
1
) +t

|F
0
) = 0, 95
C.Huber 13
7 INTERVALLE DE CONFIANCE Bootstrap 14
secrit ici:
P(Y/n t

X Y/n +t

| (n, X)) = 0.95


Le deuxi`eme param`etre de la loi gamma est un param`etre dechelle. En divisant
tout par ce param`etre, qui est connu puisquil est egal `a la moyenne observee, on
obtient:
P(|Y

/n 1| t

/X | (n, 1)) = 0, 95
o` u Y

suit la loi gamma (n, 1). Une table de la loi gamma sut donc maintenant
pour calculer t

. Notons g
0,95
le quantile veriant:
P(|Y

/n 1| g
0,95
) = 0, 95.
Alors, t

= X
0,95
et lintervalle de conance bootstrape pour la moyenne dune loi
exponentielle est nalement:
[

X g
0,95


X;

X g
0,95


X]
Exercice 5: Faire le meme calcul dans le cas o` u la loi exponentielle est remplacee
par la loi normale N(,
2
). On note = (,
2
) et on veut un intervalle de conance
pour la moyenne, cest `a dire que (F) = .
Exercice 6: Bootstrap pour des durees censurees
Lorsquon a aaire `a des durees de survie censurees, les observations se presentent
sous la forme de couples (T
i
, D
i
), T etant la duree observee et D lindicateur de cen-
sure. Deux types de bootstrap peuvent alors etre envisages: le bootstrap simple et le
bootstrap evident. Le premier consiste `a faire un tirage au hasard dans les couples, le
second `a faire un tirage selon les fonctions de survie de Kaplan-Meier pour la duree de
vie et pour la censure. On essaiera les deux methodes sur un exemple.
C.Huber 14

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 15 Catherine Huber
Exemples pratiques d'utilisation du bootstrap
avec Splus et R.

A. Estimation et intervalles de confiance
1. Estimation de la variance d'une mdiane empirique.
2. Intervalle de confiance pour une mdiane.
3. Intervalle de confiance pour un coefficient de corrlation.
4. Estimation de l'cart-type d'un estimateur de l'aire sous une courbe ROC
obtenue par rgression logistique.
(Receiver Operating Characteristic Curve)
B. Tests et degrs de signification
5. Degr de signification d'un test de comparaison de deux chantillons
6. Degr de signification d'un test d'adquation pour un chantillon.


A. Estimation et intervalles de confiance

Exemple 1 : la mdiane. Estimation de sa variance et Intervalle de confiance.

Pour comprendre le bootstrap, nous allons commencer par un exemple trs simple.
Supposons que nous ayons un vecteur y de n = 47 observations de la dure de rmission
d'une leucmie, en semaines :

remove(objects(patt="*"))
y<-
c(12,9.5,5,7.9,15.2,7.0,7.6,8.2,7.1,13.4,6.9,11.3,6.3,11.9,5.8
,2.8,7.8,27.7,20.4,9.2,10.5,3.2,11.2,6.4,1.7,8.6,3.3,9.9,19.1,
7.7,1.2,6.6,2.2,6.1,3.8,9.7,3.7,12.3,12.2,11.6,12.4,32.4,6.7,7
.4,53.8,29.1,28.9)
yord<-sort(y)
yord
1.2 1.7 2.2 2.8 3.2 3.3 3.7 3.8 5.0 5.8 6.1 6.3
6.4 6.6 6.7 6.9 7.0
7.1 7.4 7.6 7.7 7.8 7.9 8.2 8.6 9.2 9.5 9.7 9.9
10.5 11.2 11.3 11.6 11.9
12.0 12.2 12.3 12.4 13.4 15.2 19.1 20.4 27.7 28.9 29.1 32.4
53.8
median(y)
# 8.2
var(y)
# 92.31192
summary(y)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 1.2 6.35 8.2 11.16 12.1 53.8

Nous venons d'obtenir la mdiane observe de y. Si maintenant nous voulons estimer la
variance de cet estimateur de la mdiane de Y, nous ne disposons pas comme pour la
moyenne d'un estimateur simple de cette variance. Nous allons donc construire un
estimateur bootstrap de cette variance comme suit :

0. Choisir une initialisation de l'ala.
1. Tirer un chantillon de taille n = 47 de y, avec remise.
2. Calculer la mdiane de l'chantillon ainsi obtenu.
3. Stocker la mdiane de l'chantillon Bootstrap dans un vecteur appel boot.
4. Retourner en 1.

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 16 Catherine Huber

Effectuons le en Splus:

set.seed(1)
ystar<-sample(y, size=47,replace=T)
ystar
mstar<-median(ystar)
mstar
# 8.2

On rpte ces tapes un grand nombre de fois, soit B = 1 000 fois par exemple. On
obtient ainsi un chantillon bootstrap de mdianes de taille 1 000.

B<-1000
Boot.1<-rep(0,B)

for (i in (1:B))
{ ystar<-sample(y, size=47,replace=T)
mstar<-median(ystar)
boot.1[i]<-mstar}

summary(boot.1)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 6.7 7.8 8.2 8.448 9.2 12
var(boot.1)
# 0.8955927
hist(boot.1)

6 7 8 9 10 11 12
0
1
0
0
2
0
0
3
0
0
boot

Ce que l'on ralise ainsi est essentiellement une reconstruction de la manire dont a t
obtenu l'chantillon et sa mdiane en rchantillonnant y partir de lui-mme.

POPULATION ECHANTILLON
ECHANTILLON ECHANTILLON BOOTSTRAP

La variabilit d'chantillonnage dans la population se reflte dans la variabilit
d'chantillonnage dans la sous-population y : mais, alors que nous n'avons pas accs la
variabilit de median(y), dans la population totale, le vecteur boot illustre la variabilit
de median(y bootstrap) quand on chantillonne dans la sous-population y. Aussi
utiliserons nous la variance du vecteur boot pour estimer la variance de median(y).

Il est clair que ce que nous venons de faire pour la mdiane, nous pouvons le rpter
pour estimer la variance d'autres statistiques. La suite des oprations est toujours la
mme :

1 Faire un tirage au hasard avec remise de taille 47, dans l'chantillon y.

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 17 Catherine Huber
2. Calculer la statistique pour le nouvel chantillon bootstrap obtenu en 1.
3. Stocker la statistique ainsi calcule dans un vecteur nomm boot.
4. Retourner en 1.

Rpter ces tapes B=1000 fois.

Cependant, nous pouvons faire beaucoup d'autres choses grce au bootstrap. Par
exemple, nous pouvons obtenir un intervalle de confiance pour le paramtre d'intrt
sans faire aucune supposition sur la loi de son estimateur. Tout ce dont nous avons
besoin, c'est d'ordonner le vecteur boot par ordre croissant:

boot.ord<-sort(boot.1)

Alors, un intervalle de confiance de coefficient de confiance (1-a)*100% , pour le
paramtre estim par la statistique considre, qui dans notre cas est la mdiane est
donn par l'intervalle :

( boot.ord[ B*(a/2)] , boot.ord [B*(1-a/2)] )

Effectuons le en splus:

a<-0.05
ICbas<-boot.ord[floor(B*(a/2))]
IChaut<-boot.ord[ceiling(B*(1-a/2))]
ICbas
# 7
IChaut
# 10.5

Tout cela est obtenu par la fonction bootstrap en SPLUS.

Traitement de l'exemple prcdent :

boot.obj1 <- bootstrap(data=y, statistic = median, B=1000)
boot.obj1

# Premier affichage des rsultats :
boot.obj1

Summary Statistics:
Observed Bias Mean SE
median 8.2 0.2832 8.483 0.9741

# Deuxime affichage des rsultats :
summary(boot.obj1)
Summary Statistics:
Observed Bias Mean SE
median 8.2 0.2832 8.483 0.9741

Empirical Percentiles:
2.5% 5% 95% 97.5%
median 7.1 7.4 9.9 11.2

BCa Confidence Limits:
2.5% 5% 95% 97.5%

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 18 Catherine Huber
median 7 7.1 9.7 9.962

var 43.84 50.79 204.6 222.8

On dduit de ce rsum que :
La mdiane observe valait 8.2 La moyenne du vecteur boot, qui devrait tre un bon
estimateur de la mdiane de l'chantillon vaut 8.483. Donc, un estimateur du biais de
la mdiane de l'chantillon comme estimateur de la mdiane de la population est :

moyenne(mdianes bootstrap) -mdiane(y)

c'est dire ici 8.483 8.2 = 0.283. D'autre part, l'estimateur bootstrap de
l'cart-type de la mdiane vaut 0.9741. On remarquera que ce n'est pas cet estimateur
qui est utilis pour obtenir l'intervalle de confiance pour la variance.
La premire mthode, appele celle des percentiles, et dcrite ci-dessus, donne pour
intervalle de confiance bootstrap 95% pour la mdiane de la population [7.1 ;
11.2].
La deuxime mthode, appele BCa (Bias Corrected percentile method), l'intervalle de
confiance bootstrap 95% vaut [7 ; 9.962]. Le vecteur boot de mdianes bootstrap
est donn par SPLUS et peut tre utilis pour tracer un histogramme bootstrap de la
variance pour la population :

plot(boot.obj1)

6 7 8 9 10 11 12
0
.
0
0
.
2
0
.
4
0
.
6
0
.
8
Value
D
e
n
s
it
y
median

boot.obj1$replicates
contient les 1000 valeurs de la mdiane obtenues par le bootstrap. On pourra le vrifier
en les affichant.

Si on veut des percentiles autres que les 2.5%, 5%, 95% et 97.5%, de la loi de la
statistique en question, ici la variance, on peut les demander par la fonction :
a<-limits.emp(boot.obj1 ,probs=seq(0,1,by=0.1))

Si on les veut corrigs du biais, il faut demander limits.bca :
b<-limits.bca(boot.obj1 ,probs=seq(0,1,by=0.1))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

En R

1. Il faut charger le "package" boot.
2. Il faut redfinir la statistique bootstrapper
Comme fonction des donnes et de leurs indices.

# En R: pour nettoyer:
rm(list = ls())

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 19 Catherine Huber
library(boot) # chargement de la librairie boot

y<-
c(12,9.5,5,7.9,15.2,7.0,7.6,8.2,7.1,13.4,6.9,11.3,6.3,11.9,5.8
,2.8,7.8,27.7,20.4,9.2,10.5,3.2,11.2,6.4,1.7,8.6,3.3,9.9,19.1,
7.7,1.2,6.6,2.2,6.1,3.8,9.7,3.7,12.3,12.2,11.6,12.4,32.4,6.7,7
.4,53.8,29.1,28.9)

R<-1000
boot.median<-function(y,i)
{z<-median(y[i])
z}
boot.obj1<-boot(y,boot.median,R)
boot.obj1

names(boot.obj1)

IC.perc<-boot.ci(boot.obj1,conf=0.95,type="perc", index =
1:min(2,length(boot.obj1$t0)))
IC.bca<-boot.ci(boot.obj1,conf=0.95,type="bca")
IC.perc
IC.bca


# Vrification en obtenant IC.perc la main:

a<-0.05

med.ord<-sort(boot.obj1$t)

IC.perc.1<-c(med.ord[floor(R*(a/2))],med.ord[ceiling(R*(1-
a/2))])

IC.perc.1


Exercice:
Effectuer les mmes oprations pour obtenir une estimation de la variance de
l'estimateur de la variance de Y obtenu partir de l'chantillon initial y.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Solution:

1) Directement :
var(y)
# 92.31192

B<-1000
boot.var<-rep(0,B)

for (i in (1:B))
{ ystar<-sample(y, size=47,replace=T)
mstar<-var(ystar)
boot.var[i]<-mstar}


bootstrap_6exemples_pratiques_splus_et_r_papier.doc 20 Catherine Huber
summary(boot.var)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 13.78 59.85 88.28 91.07 118.2 282.4

2) En employant la fonction bootstrap de Splus :
boot.obj2 <- bootstrap(data=y, statistic = var, B=1000)

# Premier affichage des rsultats :
boot.obj2
Summary Statistics:
Observed Bias Mean SE
var 92.31 -4.101 88.21 39.72

# Deuxime affichage des rsultats :
summary(boot.obj2)
Summary Statistics:
Observed Bias Mean SE
var 92.31 -4.101 88.21 39.72

Empirical Percentiles:
2.5% 5% 95% 97.5%
var 29.54 35.13 168.2 181.3

BCa Confidence Limits:
2.5% 5% 95% 97.5%
var 45.24 51.88 204 222.3

On dduit de ce rsum que :

La variance observe valait 92.31 La moyenne du vecteur boot, qui devrait tre un
bon estimateur de la variance de l'chantillon vaut 88.21. Donc, un estimateur du biais
de la variance de l'chantillon comme estimateur de la variance de la population est :

moyenne(variances bootstrap) -variance(y)

c'est dire ici 88.21 92.31 = -4.1. D'autre part, l'estimateur bootstrap de
l'cart-type de la variance vaut 39.72. On remarquera que ce n'est pas cet estimateur
qui est utilis pour obtenir l'intervalle de confiance pour la variance.
La premire mthode, appele celle des percentiles, et dcrite ci-dessus, donne pour
intervalle de confiance bootstrap 95% pour la variance de la population [29.54 ;
181.3].
Par la deuxime mthode, appele BCa (Bias Corrected percentile method), l'intervalle
de confiance bootstrap 95% vaut [45.24 ; 222.3]. Le vecteur boot de variances
bootstrap est donn par SPLUS et peut tre utilis pour tracer un histogramme
bootstrap de la variance pour la population :

boot.obj2$replicates
contient les 1000 valeurs de la variance obtenues par le bootstrap. On pourra le vrifier
en les affichant.
Si on veut des percentiles autres que les 2.5%, 5%, 95% et 97.5%, de la loi de la
statistique en question, ici la variance, on peut les demander par la fonction :
a<-limits.emp(boot.obj2 ,probs=seq(0,1,by=0.1))

Si on les veut corrigs du biais, il faut demander limits.bca :
b<-limits.bca(boot.obj2 ,probs=seq(0,1,by=0.1))

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 21 Catherine Huber

Exemple 2 : Patients atteints de maladies coronariennes: coronary.txt

On dispose d'un fichier 'coronary.txt' qui donne pour n = 200 patients qui sont (ou ont
t) ou non atteints de maladies coronariennes (coron), l'identit (id) , l'ge (age), le
poids (wt), la taille (height), la tension (sbp et dbp, systolique et diastolique) et le taux de
cholestrol (chol).

id age sbp dbp chol height wt coron
1 44 124 80 254 70 190 0
2 35 110 70 240 73 216 0
3 41 114 80 279 68 178 0
4 31 100 80 284 68 149 0
5 61 190 110 315 68 182 1
6 61 130 88 250 70 185 0
7 44 130 94 298 68 161 0
8 58 110 74 384 67 175 0
9 52 120 80 310 66 144 0
10 52 120 80 337 67 130 0
11 52 130 80 367 69 162 0
12 40 120 90 273 68 175 0
13 49 130 75 273 66 155 0
14 34 120 80 314 74 156 0
15 37 115 70 243 65 151 0
16 63 140 90 341 74 168 0
17 28 138 80 245 70 185 0
18 40 115 82 302 69 225 0
19 51 148 110 302 69 247 1
20 33 120 70 386 66 146 0
21 37 110 70 312 71 170 1
22 33 132 90 302 69 161 0
23 41 112 80 394 69 167 0
24 38 114 70 358 69 198 0
25 52 100 78 336 70 162 0
26 31 114 80 251 71 150 0
27 44 110 80 322 68 196 1
28 31 108 70 281 67 130 0
29 40 110 74 336 68 166 1
30 36 110 80 314 73 178 0
31 42 136 82 383 69 187 0
32 28 124 82 360 67 148 0
33 40 120 85 369 71 180 0
34 40 150 100 333 70 172 0
35 35 100 70 253 68 141 0
36 32 120 80 268 68 176 0
37 31 110 80 257 71 154 0
38 52 130 90 474 69 145 0
39 45 110 80 391 69 159 1
40 39 106 80 248 67 181 0
41 40 130 90 520 68 169 1
42 48 110 70 285 66 160 1
43 29 110 70 352 66 149 0
44 56 141 100 428 65 171 1
45 53 90 55 334 68 166 0
46 47 90 60 278 69 121 0
47 30 114 76 264 73 178 0
48 64 140 90 243 71 171 1
49 31 130 88 348 72 181 0
50 35 120 88 290 70 162 0
51 65 130 90 370 65 153 1
52 43 122 82 363 69 164 0
53 53 120 80 343 71 159 0
54 58 138 82 305 67 152 1
55 67 168 105 365 68 190 1
56 53 120 80 307 70 200 0

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 22 Catherine Huber
57 42 134 90 243 67 147 0
58 43 115 75 266 68 125 0
59 52 110 75 341 69 163 0
60 68 110 80 268 62 138 0
61 64 105 68 261 66 108 0
62 46 138 90 378 67 142 0
63 41 120 90 279 70 212 0
64 58 130 90 416 68 188 0
65 50 160 110 261 66 145 0
66 45 100 70 332 67 144 0
67 59 156 90 337 67 158 0
68 56 120 92 365 65 154 0
69 59 126 96 292 67 148 0
70 47 110 80 304 67 155 0
71 43 95 70 341 69 154 0
72 37 120 74 317 74 184 0
73 27 100 60 296 67 140 0
74 44 110 80 390 66 167 0
75 41 120 80 274 69 138 0
76 33 120 80 355 68 169 0
77 29 115 80 225 70 186 0
78 24 120 80 218 69 131 0
79 36 108 66 298 67 160 0
80 23 110 78 178 66 142 0
81 47 120 80 341 70 218 1
82 26 110 75 274 70 147 0
83 45 130 90 285 65 161 0
84 41 164 110 259 66 245 0
85 55 125 88 266 67 167 0
86 34 110 80 214 67 139 1
87 51 110 75 267 66 150 0
88 58 120 80 256 67 175 0
89 51 118 88 273 64 123 0
90 35 110 75 348 72 174 0
91 34 118 78 322 69 192 0
92 26 120 70 267 70 140 0
93 25 110 75 270 74 195 0
94 44 100 70 280 65 144 0
95 57 130 85 320 69 193 0
96 67 110 80 320 64 134 0
97 59 160 90 330 63 144 0
98 62 130 88 274 69 179 0
99 40 140 90 269 63 111 0
100 52 120 90 269 68 164 0
101 28 130 80 135 67 168 0
102 34 115 80 403 69 175 0
103 43 122 78 294 68 173 0
104 38 125 80 312 71 158 0
105 45 110 80 311 69 154 0
106 26 120 84 222 72 214 0
107 35 112 90 302 67 176 0
108 51 120 90 269 70 262 0
109 55 120 82 311 71 181 0
110 45 130 90 286 73 143 0
111 69 160 90 370 67 185 1
112 58 140 90 403 66 140 0
113 64 190 100 244 66 187 0
114 70 190 112 353 66 163 0
115 27 112 78 252 68 164 0
116 53 155 104 453 66 170 0
117 28 115 65 260 66 150 0
118 29 110 80 269 68 141 0
119 23 120 82 235 65 135 0
120 40 120 78 264 71 135 0
121 53 160 90 420 67 141 0
122 25 110 75 235 69 148 0
123 63 130 90 420 69 160 1

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 23 Catherine Huber
124 48 110 78 277 71 180 1
125 36 120 80 319 70 157 0
126 28 120 86 386 70 189 1
127 57 110 68 353 71 166 0
128 39 110 80 344 66 175 0
129 52 130 90 210 65 172 1
130 51 140 90 286 67 134 0
131 37 120 90 260 67 188 0
132 28 110 75 252 67 149 0
133 44 120 90 336 72 175 0
134 35 100 70 216 66 126 0
135 41 100 65 208 69 165 0
136 29 120 80 352 68 160 0
137 46 125 90 346 63 155 0
138 55 148 90 259 71 140 0
139 32 100 70 290 70 181 0
140 40 125 90 239 67 178 0
141 61 154 80 333 66 141 0
142 29 100 60 173 69 143 0
143 52 110 80 253 70 139 0
144 25 120 80 156 67 136 0
145 27 110 70 156 67 150 0
146 27 130 90 208 69 185 0
147 53 130 80 218 73 185 0
148 42 120 80 172 68 161 0
149 64 115 75 357 67 180 0
150 27 130 90 178 74 198 0
151 55 110 70 283 70 128 1
152 33 120 80 275 67 177 0
153 58 110 80 187 71 224 0
154 51 110 80 282 71 160 0
155 37 134 80 282 71 181 0
156 47 120 70 254 65 136 0
157 49 120 90 273 71 245 0
158 46 150 104 328 71 187 0
159 40 110 70 244 70 161 1
160 26 110 80 277 74 190 0
161 28 110 70 195 73 180 0
162 23 108 68 206 71 165 0
163 52 125 90 327 65 147 0
164 42 110 75 246 67 146 0
165 27 115 88 203 70 182 0
166 29 120 80 185 72 187 0
167 43 122 78 224 66 128 0
168 34 110 70 246 68 140 0
169 40 120 80 227 67 163 0
170 28 115 70 229 70 144 0
171 30 115 70 214 71 150 0
172 34 108 75 206 71 137 0
173 26 120 80 173 67 141 0
174 34 135 90 248 70 141 0
175 35 100 70 222 73 190 0
176 34 110 60 230 73 167 0
177 45 100 70 219 69 159 0
178 47 120 80 239 67 157 0
179 54 134 90 258 66 170 0
180 30 110 80 190 69 132 0
181 29 110 80 252 68 155 0
182 48 110 80 253 72 178 0
183 37 120 88 172 71 168 0
184 43 138 94 320 65 159 1
185 31 124 90 166 67 160 0
186 48 140 85 266 71 165 0
187 34 110 80 176 72 194 0
188 42 130 80 271 70 191 1
189 49 122 94 295 73 198 0
190 50 130 85 271 68 212 1

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 24 Catherine Huber
191 42 120 80 259 64 147 0
192 50 140 95 178 68 173 1
193 60 160 100 317 72 206 0
194 27 124 80 192 70 190 0
195 29 120 85 187 68 181 0
196 29 110 70 238 72 143 0
197 49 112 78 283 64 149 0
198 49 100 70 264 70 166 0
199 50 128 92 264 70 176 0
200 31 105 68 193 67 141 0

On importe le fichier, on l' "attache". Si on veut un intervalle de confiance pour la
mdiane de l'une des variables, par exemple le poids (wt pour weight), on peut procder
de la manire suivante :


En R, comme en Splus,
on importe le fichier coronary.txt

coronary<-
read.table(file="C:\\Enseignement_2008\\bootstrap_2008\\bootst
rap_2008_cours\\coronary.txt", sep="",header=TRUE)

coronary[1:10,]

attach(coronary)

En Splus

boot.obj3<-bootstrap(data = wt, statistic = median, B = 1000,
trace = T)

boot.obj3
summary(boot.obj3)

Call:
bootstrap(data = wt, statistic = median, B = 1000)

Number of Replications: 1000

Summary Statistics:
Observed Bias Mean SE
median 163 -0.0805 162.9 2.081

Empirical Percentiles:
2.5% 5% 95% 97.5%
median 160 160 166 167

BCa Percentiles:
2.5% 5% 95% 97.5%
median 160 160 166 167

Essayer les ordres sur boot.obj3:

plot(boot.obj3)
limits.emp(boot.obj3,probs=seq(0,1,0.1))
limits.bca(boot.obj3, probs=seq(0,1,0.1))

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 25 Catherine Huber

En R:

boot.median<-function(y,i)
{z<-median(y[i])
z}
boot.obj3<-boot(data = wt, statistic = boot.median, R = 1000)
boot.obj3

ICbca<-boot.ci(boot.obj3,conf=0.95,type="bca")
ICbca

Exemple 3 : intervalle de confiance pour un coefficient de corrlation.

Considrons le coefficient de corrlation entre la pression systolique et le taux de
cholestrol pour les patients atteints de maladies coronariennes.

boot.obj4<-bootstrap(data = coronary, statistic =
cor(sbp,chol), B = 1000, trace = F)

boot.obj4
summary(boot.obj4)

plot(boot.obj4)
Summary Statistics:
Observed Bias Mean SE
Param 0.2324 0.0004725 0.2328 0.06012

Empirical Percentiles:
2.5% 5% 95% 97.5%
Param 0.1042 0.131 0.3256 0.3429

BCa Confidence Limits:
2.5% 5% 95% 97.5%
Param 0.1018 0.1281 0.3241 0.3416

En R

dat<-data.frame(wt,sbp)
boot.cor<-function(dat,i)
{z<-cor(dat[i,1],dat[i,2])
z}
boot.obj4<-boot(data=dat,statistic=boot.cor,R=1000)
# On peut aussi donner le mme ordre
# autrement:

dat<-coronary
boot.cor<-function(dat,i)
{z<-cor(dat[i,3],dat[i,7])
z}
boot.obj4<-boot(data=coronary,statistic=boot.cor,R=1000)

boot.obj4$t0

summary(boot.obj4)


bootstrap_6exemples_pratiques_splus_et_r_papier.doc 26 Catherine Huber

Exercice
Essayer la mme chose sur le coefficient de corrlation entre l'ge et le taux de
cholestrol, puis entre les deux pressions diastolique et systolique.

Exemple 4 : estimation de l'cart-type de l'aire sous une courbe ROC

a) Rappels sur la courbe ROC (Receiver Operating Characteristic Curve)

Supposons qu'une population soit rpartie en deux classes notes respectivement 1 et 0.
Mais, au lieu d'observer directement la classe laquelle appartient un sujet, on dispose
de renseignements sur chaque sujet, permettant d'en dduire la classe laquelle il
appartient avec une certaine probabilit d'erreur.
C'est par exemple la situation dans laquelle on se trouve en gnral lorsqu'on tablit
un diagnostic, ou, lorsqu'en pidmiologie on cherche classer les sujets en sujets "
risque" ou non par rapport une maladie donne.
On a donc recours une procdure de classification. La qualit de la mthode de
classification est mesure par deux indicateurs, sa sensibilit et sa spcificit, dfinies ci-
dessous :

1 Sensibilit se : c'est la proportion des cas, parmi les sujets de type 1, qui sont bien
classs par la procdure. Autrement dit, si on note X la vraie classe du
sujet et Y la classe du sujet prdite par la mthode de classification,

se = P(Y=1| X=1) .

2 Spcificit sp : c'est la proportion des cas, parmi les sujets de type 0, qui sont bien
classs par la procdure, c'est dire

sp = P(Y=0| X=0) .

3 Courbe ROC : c'est la courbe reprsentative de la sensibilit en fonction de (1 la
spcificit)
se = f(1 sp) .

On utilise la courbe ROC (de l'anglais : Receiver Operating Characteristic Curve) d'une
procdure de discrimination pour mesurer globalement sa capacit affecter
correctement les sujets leur classe respective.

Cet exemple est fond sur la rgression logistique :

On considre un fichier de donnes pour des patients qui sont (ou ont t) atteints de
maladies coronariennes et pour lesquels les facteurs prdictifs sont l'ge et le poids. Une
rgression logistique a t effectue sur ces patients :

Si

i
= P(coron=1| ge=a,poids=b),

logit(
i
) := log(
i
/(1-
i
))=
0
+
1
ge(i) +
2
poids(i) + ( i ) i = 1,2,,n

et on a obtenu les rsultats suivants, en donnant les ordres Splus, les mmes qu'en R :

coron.glm.AWT<-glm(coron~age+wt,family=binomial,data=coronary)
summary(coron.glm.AWT)


bootstrap_6exemples_pratiques_splus_et_r_papier.doc 27 Catherine Huber
Coefficients:
Value Std. Error t value
(Intercept) -7.5111179 1.695127756 -4.431004
age 0.0635609 0.019508277 3.258150
wt 0.0159990 0.007921398 2.019719

Ce type de rgression permet d'estimer la probabilit qu'une variable rponse
(coron) soit gale 1 quand on connat les valeurs de plusieurs paramtres du sujet (ge,
poids).
names(coron.glm.AWT)# donne les noms des rsultats
# que l'on peut obtenir partir de
# de la rgression logistique

coron.glm.AWT$fitted.values

Sur la base de ces probabilits estimes, on peut dfinir une rgle de classification de
la faon suivante :

Si la probabilit est suprieure a, la personne est classe comme 1 (coron =1).
Si au contraire la probabilit est infrieure a, la classer comme 0 (coron =0).

Bien que le seuil a = 0.5 paraisse a priori une valeur raisonnable, il n'est pas du tout
vident que ce soit vrai. Pour chaque valeur de a on peut calculer la spcificit et la
sensibilit de la procdure, et, quand a varie, la courbe ROC visualise les qualits de la
rgle de classification correspondante.

La sensibilit est la proportion des dclars positifs (type 1: coron =1) parmi les
positifs, et la spcificit la proportion des dclars ngatifs (type 0 : coron = 0) parmi les
ngatifs.

Si on choisit a = 1, on aura se = 0 et sp = 1. Cela donne le point (0,0) de la courbe
ROC qui a pour coordonne (1-sp, se).

En revanche, si on choisit a = 0, on aura le point (1,1) de la courbe ROC.

La courbe ROC est croissante de (0,0) jusqu' (1,1). Plus elle est loigne et au-dessus
de la diagonale, meilleure est la rgle de classification.

Fit<-fitted.values(coron.glm.AWT)
mmin<-min(Fit)
mmax<-max(Fit)
mmin
# [1] 0.02003988
mmax
# [1] 0.480566

On dcoupe le domaine de variation des valeurs a prdites
[0.02 ; 0.48], en 24 intervalles gaux.

Puis on cre une matrice rocc 24 lignes et deux colonnes qui
contiendra:

1) en premire colonne la proportion des sujets de type 1
(coron=1: ils ont eu une maladie coronarienne), qui ont une
valeur prdite suprieure a et

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 28 Catherine Huber

2) en deuxime colonne 1-la proportion des sujets de type 0
(coron=0 :ils n'ont pas eu de maladie coronarienne), qui ont
une valeur prdite infrieure a.

rocc<-matrix(0,24,2)

for(ii in (1:24))
{ # sensibilit
rocc[ii,1]<-sum(coron*(Fit > ii*.02))/sum(coron)
# 1 - spcificit
rocc[ii,2]<-1-sum((1- coron)*(Fit<=ii*.02))/sum(1-
coron)
}
rocc
[,1] [,2]
[1,] 1.00000000 1.000000000
[2,] 1.00000000 0.850574713
[3,] 0.96153846 0.706896552
[4,] 0.92307692 0.568965517
[5,] 0.73076923 0.454022989
[6,] 0.69230769 0.339080460
[7,] 0.61538462 0.270114943
[8,] 0.57692308 0.241379310
[9,] 0.46153846 0.189655172
[10,] 0.38461538 0.155172414
[11,] 0.38461538 0.132183908
[12,] 0.34615385 0.109195402
[13,] 0.34615385 0.097701149
[14,] 0.26923077 0.074712644
[15,] 0.19230769 0.068965517
[16,] 0.19230769 0.051724138
[17,] 0.11538462 0.040229885
[18,] 0.11538462 0.040229885
[19,] 0.11538462 0.034482759
[20,] 0.11538462 0.017241379
[21,] 0.11538462 0.011494253
[22,] 0.07692308 0.011494253
[23,] 0.00000000 0.005747126
[24,] 0.00000000 0.005747126

Remarquons que les deux quantits sensibilit = rocc[,1] et 1
- spcificit = rocc[,2] sont dcroissantes. Pour obtenir un
tableau croissant, on doit rordonner par :

ord <- order(rocc[,2], rocc[,1])

ord # ord contient les indices
# des lments du tableau ordonn
# selon les valeurs croissantes
# de la deuxime colonne, en sparant
# les ex-aequo grce la premire colonne
[1] 23 24 22 21 20 19 17 18 16 15 14 13 12 11 10 9 8 7 6
5 4 3 2 1

rocc1 <- rocc[ord,]
rocc1

[,1] [,2]
[1,] 0.00000000 0.005747126

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 29 Catherine Huber
[2,] 0.00000000 0.005747126
[3,] 0.07692308 0.011494253
[4,] 0.11538462 0.011494253
[5,] 0.11538462 0.017241379
[6,] 0.11538462 0.034482759
[7,] 0.11538462 0.040229885
[8,] 0.11538462 0.040229885
[9,] 0.19230769 0.051724138
[10,] 0.19230769 0.068965517
[11,] 0.26923077 0.074712644
[12,] 0.34615385 0.097701149
[13,] 0.34615385 0.109195402
[14,] 0.38461538 0.132183908
[15,] 0.38461538 0.155172414
[16,] 0.46153846 0.189655172
[17,] 0.57692308 0.241379310
[18,] 0.61538462 0.270114943
[19,] 0.69230769 0.339080460
[20,] 0.73076923 0.454022989
[21,] 0.92307692 0.568965517
[22,] 0.96153846 0.706896552
[23,] 1.00000000 0.850574713
[24,] 1.00000000 1.000000000

On peut maintenant tracer la courbe ROC elle-mme :

win.graph()
plot(rocc1[,2],rocc1[,1], type="l",lwd=4,
xlab="1-Specificite",ylab="Sensibilite")
title("COURBE ROC POUR LE MODELE LOGISTIQUE :
coron ~ age + weight")


1-Specificite
S
e
n
s
i
b
i
l
i
t
e
0.0 0.2 0.4 0.6 0.8 1.0
0
.
0
0
.
2
0
.
4
0
.
6
0
.
8
1
.
0
COURBE ROC POUR LE MODELE LOGISTIQUE :
coron ~ age +weight


# Calcul de l'aire au-dessous de la courbe ROC
roca<-0
for(ii in 2:24)
{ delta <- rocc1[ii,2] - rocc1[ii-1,2]
roca <- roca + delta * ((rocc1[ii,1]+rocc1[ii-1,1])/2)}

# Aire au-dessous de la courbe :
roca
# 0.7390584

L'aire au-dessous de la courbe ROC vaut environ .74, ce qui indique un pouvoir de
prdiction assez lev pour ce modle logistique.

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 30 Catherine Huber

Maintenant que nous disposons de la courbe ROC, il devient clair que le choix de a
pour classer de futurs patients dont on connat l'ge et le poids n'est pas vident. Les
deux indicateurs que sont la sensibilit et la spcificit sont importants tous les deux, et
le choix du seuil a doit mnager un bon quilibre entre les deux.
Bien sr, l'aire au-dessous de la courbe, roca, ainsi que la courbe elle-mme, sont
alatoires. Il est donc intressant d'avoir un estimateur de leur cart-type.
Comme nous ne disposons pas de formule (asymptotique) pour estimer cette erreur,
nous allons utiliser des techniques de rchantillonnage, le BOOTSTRAP et le
JACKNIFE pour ce faire.

Cherchons maintenant un estimateur bootstrap de l'cart-type de l'aire sous la courbe
ROC, et un intervalle de confiance bootstrap 95% pour cette aire.

Dans cet exemple, la statistique n'est plus une statistique prdfinie comme une
mdiane, une variance ou un coefficient de corrlation: c'est l'aire sous la courbe ROC.
Donc lorsqu'on fait un bootstrap, on fait des tirages dans un tableau, le data.frame
constitu ci-dessous, appel boot.frame, et pour chaque tirage, on calcule la statistique
donne par la fonction Rocarea dfinie elle aussi ci-dessous:

Voici le programme Splus correspondant :

# rappelons que
# Fit<-fitted.values(coron.glm.AWT) (cf regression
#logistique)
mmin <- min(Fit)
mmax <- max(Fit)
delta <- .01
# nn = nombre des points en lesquels
# la sensibilit et la spcificit
# seront calcules.
nn <- floor((mmax - mmin) / delta)

boot.frame <- data.frame(coron,Fit)
attach(boot.frame)

ROCarea <- function(coron, Fit,nn)
{
rocc<-matrix(0,nn,2)
for(ii in (1:nn))
{
rocc[ii,1]<-sum(coron*
(Fit >ii*mmin))/sum(coron)
# sensibilite
rocc[ii,2]<-1-(sum
((1-coron)*(Fit<=ii*mmin))/sum(1-coron))
#1-specificite
}
ord <- order(rocc[,2], rocc[,1])
rocc1 <- rocc[ord,]
# coron et Fit ordonnes
roca<-0
for(ii in 2:nn)
{
delta <- rocc1[ii,2] - rocc1[ii-1,2]

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 31 Catherine Huber
roca <- roca + delta * ((rocc1[ii,1]+rocc1[ii-
1])/2 )
}
c(roca)
# roca = area under the ROC curve is
# returned by the function ROCarea
}
# fin de la fonction ROCarea
boot.obj5 <- bootstrap(data = boot.frame, statistic =
ROCarea(coron,Fit,nn), B=1000, seed=0)

summary(boot.obj5)

# Affichage des rsultats :

Summary Statistics:
Observed Bias Mean SE
Param 0.7391 -0.00477 0.7343 0.04811

Empirical Percentiles:
2.5% 5% 95% 97.5%
Param 0.634 0.6532 0.8101 0.826
BCa Percentiles:
2.5% 5% 95% 97.5%
Param 0.6364 0.6572 0.8134 0.8267

plot(boot.obj5)

0.60 0.65 0.70 0.75 0.80 0.85
0
2
4
6
8
Value
D
e
n
s
i
t
y
Param


A partir de l'histogramme de la distribution bootstrap de l'aire au-dessous de la courbe
ROC, on constate que cette distribution est remarquablement normale. Pour vrifier
cette impression, on peut faire :

qqnorm(boot.obj5)

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 32 Catherine Huber

Quantiles of Standard Normal
Q
u
a
n
t
i
l
e
s

o
f

R
e
p
l
i
c
a
t
e
s
-2 0 2
0
.
6
0
0
.
6
5
0
.
7
0
0
.
7
5
0
.
8
0
0
.
8
5
Param

qui donne un graphe des quantiles de la loi normale contre les quantiles des donnes
(QQ plot) pour l'chantillon bootstrapp des aires sous la courbe ROC. La linarit de
la courbe obtenue suggre bien qu'en effet la loi de l'aire sous la courbe ROC est
approximativement normale.

L'intervalle de confiance 95%, obtenu grce aux percentiles corrig, pour l'aire sous
la courbe ROC, vaut [.6364 ; .8267].

Par ailleurs, l'estimateur bootstrap de l'cart-type de l'estimateur de l'aire vaut .0481.
Remarquons que si on utilisait l'intervalle de confiance 95% fond sur
l'approximation normale, on aurait .7391 +/- 1.96*.0481 , soit [.645 ; .833].
Cet intervalle est trs proche de celui donn par les percentiles bootstrap, ce qui tait
prvisible aprs le trac du QQ plot.

B Utilisation du bootstrap pour estimer le degr de signification de tests.

Considrons les tests dajustement, les tests d'galit de deux lois fonds sur deux
chantillons indpendants et le test du chi-2 d'indpendance de deux variables
catgorielles. Les tests statistiques consistent souvent en une rgle qui rejette H
0
quand
une statistique T(X)>a (ou quand T(X)<a). Le degr de signification du test est alors

dds = P[ T(X) > T(x)| H
0
est vraie]

o T(x) est la valeur observe de T(X), et T(X) est la variable alatoire correspondante.
Lestimateur bootstrap du dds est

dds(bootstrap) = P[ T(X*) > T(x)| H
0
est vraie]

o X* reprsente l'chantillon bootstrap qui suit la loi de X* sous H
0
et sachant x. Il
reste dterminer la loi de T(X*) sous H
0
et sachant x.

Exemple 5
Les donnes concernent la survie de rats traits (z) et tmoins (y):

Groupe Survie (jours) moyenne cart type
traits z: 94 197 16 38 99 141 23 86.86 25.24
non traits y:52 104 146 10 51 30 40 27 46 56.22 14.14

( )
2 / 1
2
1
2
1
) ) ( ) ( `

/ 1 / 1

) , ( y y z z ou
m n
y z
y z T
m
i
i
n
i
i
+ =
+

=

= =


bootstrap_6exemples_pratiques_splus_et_r_papier.doc 33 Catherine Huber
Pour tester Ho: F=G contre H
1
: moyenne(G)> moyenne(F), on rejette Ho si T(Z,Y)>
constante. Le dds du test est P[T(Z,Y) > T(z,y)| H
0
]. Sous H
0
, les chantillons z et y
forment un chantillon de taille m+n = 7 + 9 =16 dune population homogne de
fonction de rpartition unique F
0
. Notons x l'chantillon compos de z et de y tous
ensemble. z* (y*) est alors un chantillon avec remise de taille n (m) choisi parmi les x.
Le dds bootstrap est donn par P[T(z*,y*) > T(z,y)] o T(z,y)est la valeur observe de la
statistique T.
____________________________________________
#Ordres en SPLUS
# 1) pour le test de Student
z<-c(94, 197, 16, 38, 99, 141, 23)
mean(z)
#[1] 86.85714
y<-c(52, 104, 146, 10, 51, 30, 40, 27, 46)
mean(y)
#[1] 56.22222
m<-length(z)
n<-length(y)
tt<-(mean(z)-mean(y)) /(sqrt(1/m + 1/n)*sqrt(((m-1)*var(z)+(n-
1)*var(y))/(m+n-2)))
tt
#[1] 1.120845 la valeur de la statistique observe

# 2) pour le test bootstrap
B<-1000
boot<-rep(0,B)
# boot sera rempli par la statistique t de Student
# calcule chaque fois sur l'chantillon bootstrap
x<-c(z,y)
# x est lchantillon compos des deux chantillons
# mis ensemble
for (b in 1:B){
bootz<-sample(x,m,replace=T)
booty<-sample(x,n,replace=T)
boot[b]<-(mean(bootz)-mean(booty)) /
(sqrt(1/m + 1/n)*sqrt(((m-1)*var(bootz)+(n-
1)*var(booty))/(m+n-2)))}
hist(boot,nclass=15,main=" Histogramme de la distribution
Bootstrap \n de T(z,y)")


bootstrap_6exemples_pratiques_splus_et_r_papier.doc 34 Catherine Huber

-4 -2 0 2 4
0
5
0
1
0
0
1
5
0
2
0
0
Histogramme de la distribution Bootstrap
de T(z,y)
boot

boot<-sort(boot) #ordonne boot par ordre croissant
dds<-sum(boot>tt)/B
dds
# 0.157 # la valeur de DDS bootstrap
dt(tt,n+m-2)
# 0.2057 #la valeur du dds
# du t-test (test de Student).

La valeur du dds obtenue par le bootstrap sur 1000 rptitions est de 0.157.

Si on fait lhypothse de normalit de F et de G, ce qui est ncessaire pour effectuer le
test de Student, le dds=0.206. la diffrence entre les deux valeurs est assez importante.

Exemple 6: test pour un chantillon :

Reprenons les donnes des rats traits de lexemple prcdent. Un autre chercheur,
utilisant un chantillon beaucoup plus important a trouv que la survie moyenne des
rats traits est de 129.0. Nous allons tester l'hypothse
H
0
: E(Z) = 129.0,
contre H
1
: E (Z) < 129.0
au seuil alpha = 0.05.

Sous H
0
, la fonction de rpartition F de Z est libre sauf que sa moyenne est gale 129.0.
Une faon simple destimer cette loi est dutiliser la fonction de rpartition empirique
des z' ainsi dfinis, qui est de moyenne 129.0 :

1.On tire B = 1000 chantillons bootstrap, avec remise, de mme taille 7 que
l'chantillon initial, dans l'chantillon z translat de 129.0-moyenne(z) pour avoir une
moyenne gale 129.0:

2.Pour chaque chantillon bootstrap z* on calcule la valeur de t


7 / '*) var(
0 . 129 '*
'*) (
z
z
z t

=
0 . 129 ' + = z z z
i i

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 35 Catherine Huber

3. Le degr de signification pour le test bootstrap t de H
0
contre H
1
:
moyenne(F) < 129.0 est la proportion nb(t(z*)<tt)/1000,
des chantillons pour lesquels t(z'*) est infrieure la valeur tt observe
initialement de la statistique t.
Dans notre simulation 78 chantillons bootstrap avaient une valeur t(z*) infrieure a
1.67, et donc le degr de signification dds du test t bootstrap tait 0.078. Pour le t-test
qui fait l'hypothse que la loi F est normale, le degr de signification est P[t
6
<-1.67] =
0.07.

# programme SPLUS
tt<-(mean(z)-129.0)/sqrt(var(z)/m)
B<-1000
boot<-rep(0,B)
M<-mean(z)
z<-z-M+129.0
# la moyenne de z est 129 aprs la translation
sd<-sqrt(var(z))
for(b in 1 :B){
bootz<-sample(z,m,replace=T)
boot[b]<-(mean(bootz)-129.0)/sqrt(var(bootz)/m)}
boot<-sort(boot)
dds<-sum(boot<tt)/B
dds
#[1] 0.078
#le degr de signification du test t bootstrap
Comme le dds vaut 0.078, qui est suprieur 0.05, le t bootstrap ne rejette pas Ho.




67 . 1
7 / 8 . 66
0 . 129 9 . 86
7 / ) var(
0 . 129
=

=
z
z
tt

cours_bootstrap_3_en_R.doc Catherine Huber 36

#################################################################


##### Utilisation du bootstrap en R #####


#################################################################

rm(list =ls()) #nettoyage des donnes

library(boot) #chargement de la bibliothque "boot"

#Saisie des donnes

y<-c(12,9.5,5,7.9,15.2,7.0,7.6,8.2,7.1,13.4,6.9,
11.3,6.3,11.9,5.8,2.8,7.8,27.7,20.4,9.2,10.5,3.2,
11.2,6.4,1.7,8.6,3.3,9.9,19.1,7.7,1.2,6.6,2.2,6.1,
3.8,9.7,3.7,12.3,12.2,11.6,12.4,32.4,6.7,7.4,53.8,29.1,28.9)

##############################################################

# Estimation bootstrap de la mdiane

##############################################################
R<-1000
boot.median<-function(y,i)
{z<-median(y[i])
z}
boot.obj1<-boot(y,boot.median,R)
boot.obj1

names(boot.obj1)


###############################################

IC.perc.1<-boot.ci(boot.obj1,conf=0.95,type="perc",
index =1:min(2,length(boot.obj1$t0)))
IC.bca.1<-boot.ci(boot.obj1,conf=0.95,type="bca")
IC.perc.1
IC.bca.1

######################################################
### Vrification en obtenant IC.perc.1 la main ####
######################################################

a<-0.05

med.ord<-sort(boot.obj1$t)

cours_bootstrap_3_en_R.doc Catherine Huber 37

IC.perc.1.m<-c(med.ord[floor(R*(a/2))],med.ord[ceiling(R*(1-a/2))])

IC.perc.1.m

####################################################

#########Estimation bootstrap de la variance #####

####################################################


R<-1000
boot.var<-function(y,i)
{z<-var(y[i])
z}
boot.obj2<-boot(y,boot.var,R)
boot.obj2

names(boot.obj2)

IC.perc.2<-boot.ci(boot.obj2,conf=0.95,type="perc",
index =1:min(2,length(boot.obj2$t0)))
IC.bca.2<-boot.ci(boot.obj2,conf=0.95,type="bca")
IC.perc.2
IC.bca.2

###############################################

boot.obj3<-boot(y,boot.var,R)
boot.obj3

names(boot.obj2)

IC.perc.3<-boot.ci(boot.obj3,conf=0.95,type="perc",
index =1:min(2,length(boot.obj3$t0)))
IC.bca.3<-boot.ci(boot.obj3,conf=0.95,type="bca")
IC.perc.3
IC.bca.3

###############################################

mean(boot.obj2$t)








cours_bootstrap_3_en_R.doc Catherine Huber 38











###############################################################

###### Maladies coronariennes #############

###############################################################



###############################################################

### Lecture du fichier sur les maladies coronariennes #######

###############################################################

coronary<-read.table(file="C:\\coronary.txt",sep="",header=TRUE)

coronary[1:10,]

attach(coronary)


###############################################################

### Estimation bootstrap du coefficient de corrlation #####

### entre le poids et la pression sanguine systolique #####

###############################################################

dat<-data.frame(wt,sbp)

boot.cor<-function(dat,i)
{z<-cor(dat[i,1],dat[i,2])
z}
boot.obj4<-boot(data=dat,statistic=boot.cor,R=1000)

boot.obj4



cours_bootstrap_3_en_R.doc Catherine Huber 39
###################################################
#On peut aussi donner le mme ordre
#autrement
###################################################

dat<-coronary
boot.cor.1<-function(dat,i)
{z<-cor(dat[i,3],dat[i,7])
z}
boot.obj5<-boot(data=coronary,statistic=boot.cor.1,R=1000)

boot.obj5

summary(boot.obj5)

##########################################################

####### Courbe ROC pour les maladies coronariennes ####

###########################################################

###########################################################

###### Rgression logistique de la maladie ######
### sur l'ge et le poids ###

###########################################################

###########################################################

coron.glm.AWT<-glm(coron~age+wt,family=binomial,data=coronary)
coron.glm.AWT

summary(coron.glm.AWT)

names(coron.glm.AWT)


################################################################

#prdiction de la maladie coronarienne par P(coron|age, poids)

################################################################

coron.glm.AWT$fitted.values

################################################################

#### fabrication de la matrice qui contiendra #######
#### en 1re colonne : la sensibilit #######

cours_bootstrap_3_en_R.doc Catherine Huber 40
#### en 2me colonne: 1- spcificit #######

################################################################

Fit<-fitted.values(coron.glm.AWT)

mmin<-min(Fit)
mmax<-max(Fit)
mmin
#0.02003988
mmax
#0.4805969


rocc<-matrix(0,24,2)

for(ii in (1:24))
{ #sensibilit
rocc[ii,1]<-sum(coron*(Fit >ii*.02))/sum(coron)
#1 - spcificit
rocc[ii,2]<-1-sum((1- coron)*(Fit<=ii*.02))/sum(1-coron)
}
rocc

#########################################################

### On doit rordonner les abscisses

#########################################################


ord <- order(rocc[,2], rocc[,1])

ord #ord contient les indices
#des lments du tableau ordonn
#selon les valeurs croissantes
#de la deuxime colonne, en sparant
#les ex-aequo grce la premire colonne

rocc1 <- rocc[ord,]
rocc1




##########################################################

win.graph()
plot(rocc1[,2],rocc1[,1], type="l",lwd=4,
xlab="1-Specificite",ylab="Sensibilite")

cours_bootstrap_3_en_R.doc Catherine Huber 41
title("COURBE ROC POUR LE MODELE LOGISTIQUE :
coron ~ age +weight")

##########################################################










# Calcul de l'aire au-dessous de la courbe ROC
roca<-0
for(ii in 2:24)
{ delta <- rocc1[ii,2] - rocc1[ii-1,2]
roca <- roca +delta * ((rocc1[ii,1]+rocc1[ii-1,1])/2)}

# Aire au-dessous de la courbe :
roca
# 0.7390584

##########################################################

#rappelons que
#Fit<-fitted.values(coron.glm.AWT) (cf regression #logistique)
mmin <- min(Fit)
mmax <- max(Fit)
delta <- .01
# nn =nombre des points en lesquels
# la sensibilit et la spcificit
# seront calcules.
nn <- floor((mmax - mmin) / delta)

boot.frame <- data.frame(coron,Fit)
attach(boot.frame)

ROCarea <- function(coron,Fit)
{
rocc<-matrix(0,nn,2)
for(ii in (1:nn))
{
rocc[ii,1]<-sum(coron*
(Fit >ii*mmin))/sum(coron)
#sensibilite
rocc[ii,2]<-1-(sum
((1-coron)*(Fit<=ii*mmin))/sum(1-coron))
#1-specificite

cours_bootstrap_3_en_R.doc Catherine Huber 42
}
ord <- order(rocc[,2], rocc[,1])
rocc1 <- rocc[ord,]
# coron et Fit ordonnes
roca<-0
for(ii in 2:nn)
{
delta <- rocc1[ii,2] - rocc1[ii-1,2]
roca <- roca +delta * ((rocc1[ii,1]+rocc1[ii-1])/2 )
}
c(roca)
#roca =area under the ROC curve is
#returned by the function ROCarea
}
#fin de la fonction ROCarea

#############################################################


boot.roc<-function(boot.frame,i)
{z<-ROCarea(boot.frame[i,1],boot.frame[i,2])
z}


boot.obj6 <- boot(data =boot.frame, statistic =
boot.roc, R=1000)


cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 43
Exemple d'un cas o le bootstrap ne marche pas bien:
Estimation du paramtre d'une loi uniforme sur [0 ].




X
i
de loi uniforme sur [0 ] :
U[0 ]

Echantillon X
1
, X
2
,...,X
n

Problme : estimer

Estimateur MV : theta.hat = x
(n)
le maximum des x
i
.

On connat la loi de X
(n)
= max (X
1
, X
2
, ..., X
n
).

La fonction de rpartition de l'estimateur est

F (y) = P(X
(n)
< y) = (y/ )
n


et la densit :

f(y) = ny
n-1
/

n


sur [0 ] .


Tirage d'un chantillon:

uniforme sur [0 1]
de taille n =100

set.seed(2)
theta <- 1
n <- 100

delta <- 0.005

y <- runif(n,0,theta)
theta.hat<-max(y)
theta.hat
# 0. 9889022

boot.max <- function(y,i){z<-max(y[i])
cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 44
z}


yy <- boot(y,statistic=boot.max,R = 2000)
names(yy)
yyo<-sort(yy$t)
yyo


x<-seq(min(yyo),1,delta)
long<-length(x)
tot<-sum(yyo>=min(yyo))
freqs<-rep(0,(long-1))
i<-1
for (i in (1:(long-1)))
{freqs[i]<-sum((yyo>=x[i])*(yyo<x[i+1]))/tot}

xx<-x[(1:(long-1))]+0.005
freqs<-freqs/delta
densite<- n*xx^(n-1)

mini<-min(c(freqs,densite))
maxi<-max(c(freqs,densite))
ref<-c(rep(mini,trunc((long-1)/2)),rep(maxi,long-1-
trunc((long-1)/2)))

win.graph()
# par(mfrow=c(1,2))
plot(xx,ref,lty=1,type="l",lwd=1,xlab="x",ylab="densi
te du max")
lines(xx,freqs,lty=1, col=2,lwd=4)
lines(xx,n*xx^(n-1),type="l",col=1,lty=1,lwd=4)
lines(ksmooth(xx,freqs,kernel="normal",bandwidth=.02)
,lty=3, col=3,lwd=4)



cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 45
x
d
e
n
s
i
t
e

d
u

m
a
x
0.90 0.92 0.94 0.96 0.98 1.00
0
2
0
4
0
6
0
8
0
1
0
0
1
2
0



sum(yyo==theta.hat)
1251

La proportion des cas, sur les 2000 chantillons bootstrap, qui ont donn x(n) =
0. 9889022
est ici de
1251/2000 = 0.6255

En fait, on connat la probabilit exacte que le
maximum X*(n) de l'chantillon bootstrap X * soit
gal
X(n)(= 0.9889022):

Elle vaut p = 1 (1-1/n)
n
= 0.6339677

p <- 1-exp(n*log(1-1/n))
# 0.6330422

Quand n devient grand (tend vers l'infini):
log((1-1/n)
n
) = n log(1 1/n) - 1
cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 46
Donc p 1 - e
1
= 0.6321206 .

Soit F une fonction de rpartition de support [0 ]
Si on considre la statistique:

R
n
(X | F) = n( X
(n)
)/


sa ver si on boot st r ap est

R
n
*
(X
*
| F
n
) = n(X
(n)
X
*
(n)
)/ X
(n)


On voi t que

P(R
n
* = 0 | F
n
) = 1 exp(-1) = 0.6321

P(R
n
= 0 | F ) = 0

Si F est la loi uniforme sur [0 ],
la loi asymptotique de R
n
( X | F) est l a l oi
exponent i el l e de par amt r e 1:

P(R
n
>x) = P (n( X(n))/ >x)
= P(X(n)<(n- x)/n))
= (1-x/n)
n

e
-x

Alors que la loi asymptotique de R
n
*
(X
*
| F
n
) ne peut
pas converger vers la loi exponentielle de paramtre
1.