Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber...

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 précision d'une estimation 7 6 Réduction 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: durées de rémission: médiane 15 2 Exemple 2 : durées de rémission: variance 20 3 Exemple 3 : maladies coronariennes 21 4 Exemple 4 : intervalle de confiance pour un coefficient de corrélation 25 5 Exemple 5 : courbe ROC 26 B. Tests 1 Exemple 6 : rats traités et témoins 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

Transcript of Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber...

Page 1: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 précision d'une estimation 7 6 Réduction 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: durées de rémission: médiane 15 2 Exemple 2 : durées de rémission: variance 20 3 Exemple 3 : maladies coronariennes 21 4 Exemple 4 : intervalle de confiance pour un coefficient de corrélation 25 5 Exemple 5 : courbe ROC 26 B. Tests 1 Exemple 6 : rats traités et témoins 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

Page 2: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

Bootstrap 1

Une methode de reechantillonnage:

le bootstrap.

Catherine Huber

Le terme de reechantillonnage, ou, en anglais, ”bootstrap” , qui evoque l’actionde ”se hisser en tirant sur ses propres lacets”, designe un ensemble de methodes quiconsistent a faire de l’ inference statistique sur de ”nouveaux” echantillons tires a par-tir d’un echantillon initial. Disposant d’un echantillon destine a donner une certaineinformation sur une population, on tire au sort, parmi la sous-population reduite acet echantillon, un nouvel echantillon de meme taille n. Et on repete cette operationB fois, ou B est grand. On analyse ensuite les nouvelles observations ainsi obtenuespour affiner l’inference faite sur les observations initiales. A priori, on peut avoir desdoutes sur l’efficacite d’une telle methode et penser qu’il n’y a aucune ameliorationa esperer en reechantillonnant a partir du meme echantillon. En effet, aucune infor-mation supplementaire ne peut etre esperee, toute l’information etant contenue dansl’echantillon initial. Cependant, comme on va le voir, ce reechantillonnage, s’il ne ra-joute aucune information, permet, dans certains cas, d’extraire de l’echantillon de basel’information souhaitee.

Partie I

Le principe.

1 Illustration

Le principe qui sous-tend le bootstrap est tres simple et tres ancien, et il peut etreillustre par un systeme d’emboıtement (P. Hall, 1992) tel que celui des poupees russes:

1

Page 3: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

1 ILLUSTRATION Bootstrap 2

il s’agit d’une poupee qui, lorsqu’on l’ouvre, laisse apparaıtre une poupee identiquemais plus petite (”homothetique”), qui a son tour contient une poupee plus petite,etc... . Imaginons que l’on veuille estimer le nombre r des taches de rousseur de lapremiere de ces poupees, qui est aussi la plus grande, et que l’on ne puisse pas l’observer.On suppose qu’on dispose seulement de la seconde, contenue dans la premiere, et quicontient toutes les autres. Soit ro le nombre des taches de rousseur de la seconde. Onpeut, en premiere approximation, estimer r par ro. On appelle ’Poupee’ la plus grandepoupee, non observee, ’poupee 0’ celle qui est observee, ’poupee 1’ celle qu’on trouvedans la poupee 0, et ainsi de suite pour toutes les poupees plus petites que la poupee1, qui sont toutes observables puisque contenues dans la poupee 1.

Comme la Poupee initiale est plus grande que la poupee numero 0, on s’attend ace que r soit plus grand que ro et dans le rapport de leurs tailles. Cependant, on nepeut pas observer la premiere poupee et on ne connaıt donc pas sa taille. En revanche,on peut observer le nombre des taches de rousseur r1 de la troisieme poupee. Donc, sile rapport du nombre des taches de rousseur d’une poupee a la suivante est toujoursle meme, le rapport ro/r1 , qui, lui, est observable, fournira une estimation du rapportr/ro. Cela donne comme estimateur de r :

r = r0r0

r1

.

Mais il se peut que le rapport de ces nombres ne soit pas constant, ce que l’on peutverifier en comparant ro/r1 a r1/r2 par exemple, puisque ces deux quantites sont observ-ables. Si ces deux quantites ne sont pas egales, ro/r1 ne constitue qu’une approximationpour la valeur de r/r0.Pour effectuer une correction supplementaire, si on peut supposer que le rapport destailles d’une poupee a la suivante, bien que n’etant plus constant, varie regulierement,par exemple les rapports de taille d’une poupee a la suivante sont dans un rapportconstant, c’est a dire que

r/r0

r0/r1

=ri−1/ri

ri/ri+1

,

alors, on peut effectuer une correction supplementaire en observant r2 sur la poupeesuivante et en prenant pour estimateur de r la valeur precedente multipliee par

(r0/r1)/(r1/r2),

ce qui donne :

r = r0 (r0

r1

)2 r2

r1

On peut a nouveau verifier si l’hypothese faite sur la variation des rapports est exacteen considerant la poupee suivante, et, dans le cas contraire, effectuer une nouvellecorrection.

C.Huber 2

Page 4: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

2 ELIMINATION DU BIAIS Bootstrap 3

2 Elimination du biais

L’un des emplois les plus frequents du bootstrap est d’eliminer le biais d’un estimateurde la maniere suivante : Soit T un estimateur de θ, parametre de la loi F communeaux Xi constituant l’observation X = (X1, · · · , Xn)). Son biais est

b(T ) = E(T |F ) − θ

en notant E( | F ) la moyenne (l’esperance) pour la loi F , car cette notation seracommode dans la suite. On estime ce biais par

b∗(T ) = E(T ∗|X) − T

ou T ∗ est calcule sur un echantillon bootstrap X∗ issu de l’echantillon initial X, etE(T ∗|X) signifie la moyenne de T ∗ pour la loi empirique determinee par X, c’est a direla loi qui attribue la probabilite 1/n a chacune des valeurs observees xi, i = 1, · · · , n.L’estimateur 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 unexemple. Supposons que l’on veuille estimer la moyenne µ d’une population pour unevariable aleatoire dont la fonction de repartition est F , inconnue, soit :

µ =

∫xdF (x)

et que l’on dispose pour cela d’un echantillon X = (X1, , Xn) de n observationsindependantes et equidistribuees selon F . Comme on l’a dit, la loi empirique est cellequi attribue la probabilite 1/n a chacune des n observations. Designons par F0 safonction de repartition, appelee fonction de repartition empirique:

F0(x) =

∑n

i=1 1{xi ≤ x}

n

On peut, pour estimer µ, utiliser la meme quantite (on dit la meme ’fonctionnelle’)que ci-dessus, en remplacant F , qui est inconnue, par la fonction de repartition em-pirique F0 qui, elle, est connue. On estime donc µ par

µ = X =

∫xdF0(x) =

∑i Xi

n

qui est la moyenne observee sur l’echantillon ou moyenne empirique. Dans l’exempleconsidere, on sait que l’estimateur ainsi obtenu est sans biais. Mais supposons main-tenant que l’on veuille estimer un autre ’parametre’, c’est a dire une autre fonctionnellede la loi F , par exemple

C.Huber 3

Page 5: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

3 NOTATIONS Bootstrap 4

µr = (

∫xdF (x))r.

On pourra verifier que l’estimateur correspondant

µr = (X)r

= (

∑i Xi

n)r

n’est pas sans biais en general, sauf si r = 1. Comment peut on le corriger pour qu’ildevienne sans biais ? Pour cela, il faudrait calculer le biais pour le lui retrancher, ou,si ce n’est pas possible, estimer ce biais. Le biais b vaut

b = E(µr) − µr = E{[

∫xdF0(x)]r − [

∫xdF (x)]r | F}

Comme dans le calcul du biais intervient F qui est inconnue, on peut appliquer anouveau le principe initial et remplacer dans cette expression F par F0 et donc F0 parF1 obtenu par un nouvel echantillonnage a partir de F0 , c’est a dire par echantillonnagea partir de l’echantillon.

L’analogie avec les poupees russes est la suivante : la population initiale, non ob-servable, de distribution F correspond a la grande Poupee, et l’echantillon observe, dedistribution F0, a la plus grande des poupees observees, la poupee numero 0. Mais alorsa quoi correspond la poupee numero 1 , que l’on decouvre en ouvrant la poupee numero0 ? Eh bien, et c’est la le principe du bootstrap, on l’obtient en effectuant, a partir del’echantillon, de loi F0, considere maintenant comme nouvelle population initiale, unnouvel echantillon, de meme taille n , appele echantillon bootstrap et note X∗. Commeon aura en general B echantillons bootstrap, on les notera X∗

b , avec b variant de 1 aB quand on aura besoin de les distinguer. On dit que ”on reechantillonne”.

Partie II

Notations et remarques.

3 Notations

L’echantillon initial est note

X = (X1, ..., Xn)

et F0 la loi empirique associee. Les echantillons obtenus par reechantillonnage ou”reechantillons”, ou ”echantillons bootstrap” sont notes

X∗ = (X∗

1 , ..., X∗

n).

C.Huber 4

Page 6: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

4 REMARQUES Bootstrap 5

Les echantillons X∗ sont des echantillons fondes sur F0. On notera indifferemment:

P (X∗

j = Xi|X) = 1/n , 1 ≤ i, j ≤ n.

ouP (X∗

j = Xi|F0) = 1/n , 1 ≤ i, j ≤ n.

car des qu’on connaıt X on peut en deduire F0 et reciproquement.

4 Remarques

1. Problemes parametriques et non parametriques:

La loi F0 associee a l’echantillon peut etre, comme dans l’exemple ci-dessus del’estimation d’une moyenne, la loi empirique. C’est le cas lorsqu’on a affaire a unprobleme non parametrique. Mais la loi F0 peut etre une loi issue d’un modeleparametrique: les parametres, qu’on notera λ dans la suite, sont alors estimes enemployant le modele, en principe par maximum de vraisemblance, et alors F0 estla loi appartenant au modele, dont les parametres sont ceux estimes a partir del’echantillon.

2. Parametres et fonctionnelles :

On a vu que pour estimer une fonctionnelle T(F) de la distribution inconnueF on remplacait F , dans le cas non parametrique, par la loi empirique F0 as-sociee a l’echantillon. Mais si par exemple on veut estimer un parametre commele centre de symetrie d’une loi symetrique, ce centre de symetrie peut corre-spondre a plusieurs fonctionnelles differentes: la moyenne, la mediane de F etbeaucoup d’autres encore; par exemple les moyennes α-tronquees. Ces dernieressont obtenues en prenant la moyenne des observations qui restent lorsqu’on a oteles plus grandes et les plus petites, en proportion α. Il est donc necessaire de direprecisement quelle est la fonctionnelle que l’on veut estimer.

3. Approximation d’une statistique bootstrap :

Il faut bien distinguer deux elements differents dans les methodes bootstrap :

• Le principe lui-meme, illustre par les poupees emboıtees, et qui consiste aremplacer la loi initiale inconnue par une loi associee a l’echantillon observe,et toutes les lois derivees necessaires. Le (ou les) parametre(s) d’interetest (sont) ainsi remplace(s) par une statistique ”bootstrap”, en principecompletement calculable(s).

C.Huber 5

Page 7: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

Bootstrap 6

• Le calcul proprement dit de la statistique bootstrap : bien que la statistiquebootstrap soit en principe completement calculable, souvent son calcul ef-fectif serait trop long. Il s’agit en general d’esperances fondees sur la loiF0 et des derivees de cette loi. Aussi, Efron a-t-il suggere de le faire parune methode de type Monte-Carlo qui consiste a reechantillonner a partir del’echantillon initial, obtenant des echantillons de meme taille n. Si le nombredes reechantillonnages est assez grand, on aura une bonne approximation del’esperance 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 d’une variable aleatoire reelle X de loi F enfaisant n tirages independants issus de la loi F .En principe, la loi de base que l’on simule est la loi uniforme sur [0 ; 1], qu’on note U[01],a partir d’un generateur de nombres au hasard. Un tel generateur est inclus dans tousles langages de programmation et dans tous les logiciels. A partir de cet echantillonuniforme simule (U1, . . . , Un), on peut ensuite construire un echantillon simule pourn’importe quelle loi F en remarquant que:

X = F−1(U)

a F pour fonction de repartition, comme on pourra aisement le verifier, en particulierdans le cas ou F est continue et strictement monotone. On forme la suite:

(X1, X2, . . . , Xn) = (F−1(U1), F−1(U2), ..., F

−1(Un))

qui est alors un echantillon de la loi F .Exercice 1

Comment generer un echantillon de taille n = 10 d’une variable exponentielle de

parametre 1 ?

Remarque:

Certaines lois ont des inverses F−1 qui ne sont pas explicites. C’est vrai en partic-ulier de la loi normale qu’on a souvent besoin de simuler. Dans ce cas, on procedeautrement. On a remarque en effet, que, si U et V sont deux variables uniformes sur[0; 1] et independantes, la variable :

X = cos(2πU)√

(−2 log(V ))

C.Huber 6

Page 8: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

5 EVALUATION DE LA PRECISION D’UNE 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 vraieF , qui n’est en general pas connue, mais de la loi empirique Fn qui a ete observee.

Partie IV

Deux applications fondamentales du bootstrap:

Les deux applications fondamentales du bootstrap sont la reduction du biais et ladetermination d’intervalles de confiance. Nous allons commencer par presenter un ex-emple donne par Efron, qui est celui qui a le premier mis en valeur les possibilites decette methode, connue depuis longtemps mais non exploitee, notamment a cause dutemps de calcul qu’elle implique.

5 Evaluation de la precision d’une estimation

Voici un exemple propose par Efron:A l’origine, le bootstrap a ete employe pour evaluer la precision d’un estimateur. Parexemple, lors d’un petite experimentation sur des souris, on a tire au sort parmi 16souris, 7 qui recoivent le nouveau traitement alors que les 9 autres sont des controlesles qui recoivent un placebo. Leurs durees de vie sont mesurees, en jours, et donnentles resultats suivants :

moyenne ecart-typeTraitees X 94 197 16 38 99 141 23 86,86 25,24Controles Y 52 104 146 10 51 30 40 27 46 56,22 14,14

On a l’impression que le traitement assure une meilleure survie que le placebo, carles durees moyennes observees sont respectivement : 86,86 et 56,22. Mais les deuxechantillons sont petits et la precision de ces deux estimateurs des deux vraies moyennescertainement tres mauvaise. Comment mesurer cette precision ? Si l’on disposait d’une

C.Huber 7

Page 9: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

5 EVALUATION DE LA PRECISION D’UNE ESTIMATION Bootstrap 8

taille d’echantillon suffisamment grande pour pouvoir appliquer l’approximation nor-male, on utiliserait le fait que:

L(X | F ) ≈ N (µ,s2

n)

Mais les tailles d’echantillon sont trop faibles pour cela. De plus, si au lieu decomparer les moyennes, on comparait les medianes, qui sont ici respectivement 94 et46, que faire pour en estimer la precision et savoir a quel point elles sont effectivementdifferentes ? Commencons par considerer le cas des souris traitees. Eh bien, si leprincipe du bootstrap est valable, c’est a dire si on peut remplacer la loi inconnue Fde X par la loi observee F0 ( sur le 7-echantillon) et l’echantillon initial X lie a F0 parl’echantillon bootstrap X∗ et la loi associee F1 , on a l’identification suivante :

L(X | F ) ≈ L(X∗ | F0)

Comme F0 est connue, la loi de X∗ s’en deduit completement, et donc aussi la loi dela moyenne de X∗. Si on prend les quantiles 0,025 et 0,975 de cette loi, on sait qu’avecune probabilite de 0,95 cette moyenne va rester entre ces deux valeurs. De meme pourla mediane ou n’importe quelle autre statistique. On peut remarquer aussi qu’au lieude s’interesser aux deux quantiles 0,025 et 0,975 de la moyenne pour voir a quel pointelle est precise, on peut vouloir estimer l’ecart-type de la moyenne, ( ou de la mediane,d’ailleurs). On procedera de la meme facon : par remplacement de l’ecart-type cherchepar l’ecart-type de la statistique bootstrap. Dans l’equation (*), le membre de droiteest en principe completement calculable mais en pratique il est en general beaucoupplus 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 statistiquequi nous interesse: soit la moyenne, soit la mediane, dans les cas envisages ici. Onobtient ainsi une loi empirique pour cette statistique, qui, si B est assez grand, est unebonne approximation de la vraie loi . L’estimateur bootstrap de l’ecart-type est donnepar

s∗ =

{

∑B

b=1 (X∗b −¯

X∗b)2

B − 1}

et voici ce que donne cette statistique pour differents nombres B de reechantillonnages.

B 50 100 250 500 1000 infinis∗ (moyenne) 19,72 23,63 22,32 23,79 23,02 23,36s∗ (mediane) 32,21 36,35 34,46 36,72 36,48 37,83

C.Huber 8

Page 10: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

6 REDUCTION DU BIAIS Bootstrap 9

En ce qui concerne la moyenne, on voit que l’ecart-type bootstrap est proche del’estimateur usuel. Pour la mediane, on constate qu’elle est plus dispersee.

6 Reduction du biais

Dans l’exemple precedent, on estimait une moyenne par la moyenne observee, et onsait bien que dans ce cas on n’a aucun probleme de biais. Par contre dans beaucoupde cas, meme l’estimateur du maximum de vraisemblance a un biais. On peut utiliserle bootstrap pour reduire ce biais. Supposons que l’on veuille estimer

θ(F ) = [

∫xdF (x)]

r

a partir d’un echantillon auquel est associe F0. On choisit l’estimateur

θ(F ) = θ(F0) = [

∫xdF0(x)]

r

Quel est son biais ? Par definition

Biais = E{θ(F ) − θ(F0) | F }

Comme on ne connaıt pas F , on utilise le principe du bootstrap en remplacant danscette equation F par F0 et F0 par F1, ou F1 est la loi associee a un n-echantillon d’unevariable de loi F0 :

Biais = E{θ(F0) − θ(F1) | F0 }

Donc l’estimateur sans biais de θ s’obtient en retranchant a θ(F0) cet estimateurde son biais, soit:

Estimateur sans biais de θ = θ(F0) − Biais

Pour obtenir un estimateur sans biais, on doit donc ajouter t a θ(F0) ou t est definipar

E(θ(F0) − θ(F ) + t) = 0 (1)

On a donc remplace l’equation initiale qui donne la correction t que l’on devrait

faire pour supprimer le biais de l’estimateur θ(F0) par une equation bootstrap quidonne une correction t∗ , en principe calculable, et dont on espere qu’elle est une

C.Huber 9

Page 11: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

6 REDUCTION DU BIAIS Bootstrap 10

bonne estimation de t. On remarque que t est un parametre qui depend de F alorsque t∗ est une statistique dependant de F0. De cette equation se deduit la correctiont∗ = θ(F0) − E(θ(F1)|F0).

On doit donc calculer la quantite:

E(θ(F1)|F0),

et l’estimateur sans biais est alors egal a:

θ(F0) + t∗ = 2θ(F0) − E(θ(F1)|F0).

Prenons un exemple concret : On n’a aucun renseignement sur F , on veut estimerE(X)2 et on dispose de 3 observations : x1 = 1, 2; x2 = 2, 5; x3 = 1, 1. Donc

θ(F ) =

∫xdF (x)

2

On est dans un cas non parametrique. F0 est donc la f.r. empirique qui donne achacune des trois valeurs ci-dessus la probabilite 1/3 et donc

θ(F0) = [(1.2 + 2.5 + 1.1)/3]2 = 2, 560.

F1 peut prendre 10 valeurs differentes: en effet, quand on tire un echantillon de taillen = 3 de la loi F0 , tout se passe comme si on tirait trois fois avec remise dans uneurne a trois boules numerotees 1.1 1.2 et 2.5. Chaque tirage peut etre resume par lenombre de fois qu’on a tire chacune des trois boules:

Frequences probabilite θ

1.1 1.2 2.53 0 0 (1/3)3 1.2102 1 0 (1/3)2 1.2842 0 1 (1/3)2 2.4541 1 1 2/9 2.5601 2 0 (1/3)2 1.3611 0 2 (1/3)2 4.1340 2 1 (1/3)2 2.6670 1 2 (1/3)2 4.2710 3 0 (1/3)3 1.4400 0 3 (1/3)3 6.250

On en deduit E(θ(F1)|F0) = 1.21/27+1.44/9+2.56/9+ ... = 2.6955. L’estimateur sansbiais est donc egal a 2 × 2.56 − 2.695 = 2.42(4). On voit clairement sur cet exemplecomment effectuer le calcul explicite d’une statistique bootstrap. Mais on voit aussi

C.Huber 10

Page 12: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

6 REDUCTION DU BIAIS Bootstrap 11

que, meme pour un cas aussi simple ou la taille n de l’echantillon est egale a 3, il y aun grand nombre de tirages possibles pour F1.

Exercice 3:

1. Si au lieu de 3 valeurs, on avait observe un echantillon de taille n = 4, combien

de tirages F1 distincts peut on faire ?

2. Meme question pour n = 5.

3. Meme question pour n quelconque lorsque l’echantillon initial consiste en mvaleurs distinctes.

Indication:

Le nombre des configurations distinctes de F1 est egal au nombre de manieres distinctesde repartir n boules dans m cases.

Remarque: Comme F0 est une loi discrete, la loi de θ(F1) est, elle aussi, discrete. Onremarque cependant que, meme avec seulement 3 observations, on obtient pour θ(F1)une loi beaucoup plus etalee. Ce phenomene ne fait que s’accentuer quand on augmenten. En particulier, on pourra constater, apres avoir fait l’exercice precedent, que le nom-bre des tirages F1 possibles lorsqu’on a 10 observations distinctes pour l’echantilloninitial, est deja tres grand : 92 378. Et le mode a pour probabilite 0,00036, ce qui esttres faible. Donc, la loi, sous F0 d’une fonctionnelle θ(F1) , bien qu’elle soit en principediscrete, est en general tres proche d’une loi continue. On se sert de cette remarquequand on veut construire des intervalles de confiance.

Exercice 4:

On considere un n-echantillon (X1, . . . , Xn) d’une loi uniforme sur [0, θ] et on estime

θ par maximum de vraisemblance.

1. Quel est l’estimateur 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θ] . F0 = U[0,max(Xi)] et F1 = U[0,max(Xi∗)]

C.Huber 11

Page 13: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

7 INTERVALLE DE CONFIANCE Bootstrap 12

7 Intervalle de confiance

Soit F la loi inconnue, dont on veut estimer le parametre θ(F ) par un intervalle deconfiance a 0,95 et F0 la loi associee a l’echantillon observe. θ(F0) est l’estimateurde θ(F ). Soit F la loi inconnue, dont on veut estimer le parametre θ(F ) par unintervalle de confiance a 0,95 et F0 la loi associee a l’echantillon observe. θ(F0) estun estimateur de θ(F ). Pour obtenir, a partir de θ(F0), un intervalle de confiance (engeneral asymetrique) pour θ(F ), on a besoin de connaıtre la loi de θ(F ) − θ(F0), sousF (alors que F est inconnue) ou une approximation pour cette loi. Si c’est le cas, onprend pour bornes de l’intervalle, en notant t1 = t0.025 et t2 = t0.975 les quantiles0.025 et 0.975 de cette loi: [θ(F0) + t1 ; θ(F0) + t2]. En effet:

P (θ(F ) − θ(F0) < t1) = 0.025P (θ(F ) − θ(F0) > t2) = 0.025P (θ(F0) + t1 ≤ θ(F ) ≤ θ(F0) + t2) = 0.95.

Si on ne connaıt pas cette loi, et si on n’a pas d’approximation pour celle-ci, ou, toutsimplement si on en dispose mais que les calculs sont tres compliques, le bootstrappermet de lui substituer la loi de θ(F0) − θ(F1) sous F0. Comme F0 est cette foisconnue, cette loi est, en principe, une loi discrete completement calculable. Alorsapparaissent les deux points essentiels du bootstrap:

• La validation du bootstrap : il faut en effet valider cette substitution.

• La loi bootstrap n’est calculable qu’en principe. En realite, pour les taillesd’echantillon usuelles, le calcul exact serait trop long (voir ci-dessus ce que celadonne dans le cas n = 3) et on doit donc proceder par simulation pour evaluercette loi bootstrap, ou pour evaluer ses parametres d’interet pour le problemeconsidere.

Supposons que l’on cherche maintenant un intervalle symetrique par rapport aθ(F0), qui est par exemple la moyenne observee s’il s’agit de la moyenne, la medianeobservee s’il s’agit de la mediane, etc... En utilisant toujours le meme principe dubootstrap, au lieu de t tel que

P (θ(F0) − t ≤ θ(F ) ≤ θ(F0) + t|F ) = 0, 95

C.Huber 12

Page 14: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

7 INTERVALLE DE CONFIANCE Bootstrap 13

on va chercher t∗ tel que

P (θ(F1) − t∗ ≤ θ(F0) ≤ θ(F1) + t∗| F0) = 0, 95

Dans cette derniere expression, F0 etant connu, θ(F0) est connu. Il s’agit donc dedeterminer la loi de θ(F1) ou F1 est echantillonne a partir de F0. On pourra parexemple penser a l’echantillon ci-dessus, θ etant la mediane ou le carre de la moyenne,etc.. . On trouve dans ce cas tres facilement la loi de θ(F1) car la taille de l’echantillonest tres faible : n = 3. Lorsque n est plus grand, cela devient complique et on utilise laloi des grands nombres: On reechantillonne B fois, en faisant chaque fois n tirages sansremise dans l’echantillon initial. On obtient ainsi B nouveaux echantillons de taille n:

X∗

1 , X∗

2 , . . . , X∗

B

et B valeurs de la statistique bootstrap θ(F1):

(θ(X∗1), θ(X∗2), . . . , θ(X∗B))

Ces valeurs dessinent progressivement la loi de θ(F1) et si on pouvait faire tendreB vers l’infini, on aurait exactement la loi de θ(F1). En general, on choisit des valeursde B de l’ordre de 50 a 200 (voir Efron, 1993).

Remarque : Nous avons vu que, dans le cas non parametrique, θ(F1) a une loidiscrete, et, par consequent, une valeur exactement egale a 0,95 n’est generalement pasatteignable. Nous avons cependant aussi remarque que, tres vite quand n croıt, la loiF1 se diversifie et les atomes ne portent pas beaucoup de probabilte chacun. Par con-tre, dans le cas d’une loi parametrique continue, l’equation ci-dessus peut se resoudreexactement : il n’y a pas de saut de la probabilite qui regit θ(F1).

Exemple:

Prenons la loi exponentielle F = E(λ) de fonction de repartition F (x) = exp (−x/λ) etθ(F ) = λ. L’estimateur du maximum de vraisemblance de λ est la moyenne empirique(on pourra le verifier a titre d’exercice):

λ = X

DoncF0 = E(λ) = E(X)

Notons la moyenne empirique Y/n : la loi de Y est la loi de la somme de n variablesexponentielles de meme parametre λ et donc c’est une loi gamma Γ(n, λ)(on pourra leverifier ). L’equation qui donne l’intervalle de confiance bootstrap

P (θ(F1) − t∗ ≤ θ(F0) ≤ θ(F1) + t∗|F0) = 0, 95

C.Huber 13

Page 15: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

7 INTERVALLE DE CONFIANCE Bootstrap 14

s’ecrit ici:

P (Y/n − t∗ ≤ X ≤ Y/n + t∗ | Γ(n,X)) = 0.95

Le deuxieme parametre de la loi gamma est un parametre d’echelle. En divisanttout par ce parametre, qui est connu puisqu’il est egal a la moyenne observee, onobtient:

P (|Y ′/n − 1| ≤ t∗/X | Γ(n, 1)) = 0, 95

ou Y ′ suit la loi gamma Γ(n, 1). Une table de la loi gamma suffit donc maintenantpour calculer t∗. Notons g0,95 le quantile verifiant:

P (|Y ′/n − 1| ≤ g0,95) = 0, 95.

Alors, t∗ = X0,95 et l’intervalle de confiance ”bootstrape” pour la moyenne d’une loiexponentielle est finalement:

[X − g0,95 × X; X − g0,95 × X]

Exercice 5: Faire le meme calcul dans le cas ou la loi exponentielle est remplacee

par la loi normale N (µ, σ2). On note λ = (µ, σ2) et on veut un intervalle de confiancepour la moyenne, c’est a dire que θ(F ) = µ.

Exercice 6: Bootstrap pour des durees censureesLorsqu’on a affaire a des durees de survie censurees, les observations se presentent

sous la forme de couples (Ti, Di), T etant la duree observee et D l’indicateur de cen-sure. Deux types de bootstrap peuvent alors etre envisages: le bootstrap simple et lebootstrap evident. Le premier consiste a faire un tirage au hasard dans les couples, lesecond a faire un tirage selon les fonctions de survie de Kaplan-Meier pour la duree devie et pour la censure. On essaiera les deux methodes sur un exemple.

C.Huber 14

Page 16: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 médiane empirique. 2. Intervalle de confiance pour une médiane. 3. Intervalle de confiance pour un coefficient de corrélation. 4. Estimation de l'écart-type d'un estimateur de l'aire sous une courbe ROC obtenue par régression logistique. (Receiver Operating Characteristic Curve)

B. Tests et degrés de signification 5. Degré de signification d'un test de comparaison de deux échantillons 6. Degré de signification d'un test d'adéquation pour un échantillon.

A. Estimation et intervalles de confiance

Exemple 1 : la médiane. Estimation de sa variance et Intervalle de confiance.

Pour comprendre le bootstrap, nous allons commencer par un exemple très simple. Supposons que nous ayons un vecteur y de n = 47 observations de la durée de rémission d'une leucémie, 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 médiane observée de y. Si maintenant nous voulons estimer la variance de cet estimateur de la médiane 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'aléa. 1. Tirer un échantillon de taille n = 47 de y, avec remise. 2. Calculer la médiane de l'échantillon ainsi obtenu. 3. Stocker la médiane de l'échantillon Bootstrap dans un vecteur appelé boot. 4. Retourner en 1.

Page 17: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 répète ces étapes un grand nombre de fois, soit B = 1 000 fois par exemple. On obtient ainsi un échantillon bootstrap de médianes 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

010

020

030

0

boot

Ce que l'on réalise ainsi est essentiellement une reconstruction de la manière dont a été obtenu l'échantillon et sa médiane en rééchantillonnant y à partir de lui-même. POPULATION → ECHANTILLON ECHANTILLON → ECHANTILLON BOOTSTRAP La variabilité d'échantillonnage dans la population se reflète dans la variabilité d'échantillonnage dans la sous-population y : mais, alors que nous n'avons pas accès à 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 médiane, nous pouvons le répéter pour estimer la variance d'autres statistiques. La suite des opérations est toujours la même : 1 Faire un tirage au hasard avec remise de taille 47, dans l'échantillon y.

Page 18: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 calculée dans un vecteur nommé boot. 4. Retourner en 1. Répéter ces étapes B=1000 fois. Cependant, nous pouvons faire beaucoup d'autres choses grâce au bootstrap. Par exemple, nous pouvons obtenir un intervalle de confiance pour le paramètre d'intérêt 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 paramètre estimé par la statistique considérée, qui dans notre cas est la médiane 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 précédent : boot.obj1 <- bootstrap(data=y, statistic = median, B=1000) boot.obj1 # Premier affichage des résultats : boot.obj1 Summary Statistics: Observed Bias Mean SE median 8.2 0.2832 8.483 0.9741 # Deuxième affichage des résultats : 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%

Page 19: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 déduit de ce résumé que : La médiane observée valait 8.2 La moyenne du vecteur boot, qui devrait être un bon estimateur de la médiane de l'échantillon vaut 8.483. Donc, un estimateur du biais de la médiane de l'échantillon comme estimateur de la médiane de la population est : moyenne(médianes bootstrap) -médiane(y) c'est à dire ici 8.483– 8.2 = 0.283. D'autre part, l'estimateur bootstrap de l'écart-type de la médiane 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 première méthode, appelée celle des percentiles, et décrite ci-dessus, donne pour intervalle de confiance bootstrap à 95% pour la médiane de la population [7.1 ; 11.2]. La deuxième méthode, appelée BCa (Bias Corrected percentile method), l'intervalle de confiance bootstrap à 95% vaut [7 ; 9.962]. Le vecteur boot de médianes 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

Den

sity

median

boot.obj1$replicates contient les 1000 valeurs de la médiane obtenues par le bootstrap. On pourra le vérifier 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 corrigés 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 redéfinir la statistique à bootstrapper

Comme fonction des données et de leurs indices. # En R: pour nettoyer: rm(list = ls())

Page 20: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 # Vérification 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 mêmes opérations 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}

Page 21: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 résultats : boot.obj2 Summary Statistics: Observed Bias Mean SE var 92.31 -4.101 88.21 39.72

# Deuxième affichage des résultats : 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 déduit de ce résumé que : La variance observée 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 première méthode, appelée celle des percentiles, et décrite ci-dessus, donne pour intervalle de confiance bootstrap à 95% pour la variance de la population [29.54 ; 181.3]. Par la deuxième méthode, appelée 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 vérifier 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 corrigés du biais, il faut demander limits.bca : b<-limits.bca(boot.obj2 ,probs=seq(0,1,by=0.1))

Page 22: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 cholestérol (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

Page 23: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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

Page 24: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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

Page 25: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 médiane de l'une des variables, par exemple le poids (wt pour weight), on peut procéder de la manière suivante :

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

coronary<-read.table(file="C:\\Enseignement_2008\\bootstrap_2008\\bootstrap_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))

Page 26: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 corrélation.

Considérons le coefficient de corrélation entre la pression systolique et le taux de cholestérol 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 même 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)

Page 27: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 26 Catherine Huber

Exercice Essayer la même chose sur le coefficient de corrélation entre l'âge et le taux de cholestérol, 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 répartie en deux classes notées 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 déduire la classe à laquelle il appartient avec une certaine probabilité d'erreur.

C'est par exemple la situation dans laquelle on se trouve en général lorsqu'on établit un diagnostic, ou, lorsqu'en épidémiologie on cherche à classer les sujets en sujets "à risque" ou non par rapport à une maladie donnée.

On a donc recours à une procédure de classification. La qualité de la méthode de classification est mesurée par deux indicateurs, sa sensibilité et sa spécificité, définies ci-dessous :

1 Sensibilité se : c'est la proportion des cas, parmi les sujets de type 1, qui sont bien

classés par la procédure. Autrement dit, si on note X la vraie classe du sujet et Y la classe du sujet prédite par la méthode de classification,

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

2 Spécificité sp : c'est la proportion des cas, parmi les sujets de type 0, qui sont bien

classés par la procédure, c'est à dire

sp = P(Y=0| X=0) . 3 Courbe ROC : c'est la courbe représentative de la sensibilité en fonction de (1 – la

spécificité) se = f(1 – sp) .

On utilise la courbe ROC (de l'anglais : Receiver Operating Characteristic Curve) d'une procédure de discrimination pour mesurer globalement sa capacité à affecter correctement les sujets à leur classe respective. Cet exemple est fondé sur la régression logistique :

On considère un fichier de données pour des patients qui sont (ou ont été) atteints de

maladies coronariennes et pour lesquels les facteurs prédictifs sont l'âge et le poids. Une régression logistique a été effectuée 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 résultats suivants, en donnant les ordres Splus, les mêmes qu'en R :

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

Page 28: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 régression permet d'estimer la probabilité qu'une variable réponse

(coron) soit égale à 1 quand on connaît les valeurs de plusieurs paramètres du sujet (âge, poids). names(coron.glm.AWT)# donne les noms des résultats # que l'on peut obtenir à partir de # de la régression logistique coron.glm.AWT$fitted.values

Sur la base de ces probabilités estimées, on peut définir une règle de classification de la façon suivante : Si la probabilité est supérieure à a, la personne est classée comme 1 (coron =1). Si au contraire la probabilité est inférieure à 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 spécificité et la sensibilité de la procédure, et, quand a varie, la courbe ROC visualise les qualités de la règle de classification correspondante.

La sensibilité est la proportion des déclarés positifs (type 1: coron =1) parmi les

positifs, et la spécificité la proportion des déclarés négatifs (type 0 : coron = 0) parmi les négatifs.

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 coordonnée (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 éloignée et au-dessus

de la diagonale, meilleure est la règle de classification. Fit<-fitted.values(coron.glm.AWT) mmin<-min(Fit) mmax<-max(Fit) mmin # [1] 0.02003988 mmax # [1] 0.480566 On découpe le domaine de variation des valeurs a prédites [0.02 ; 0.48], en 24 intervalles égaux. Puis on crée une matrice rocc à 24 lignes et deux colonnes qui contiendra: 1) en première colonne la proportion des sujets de type 1 (coron=1: ils ont eu une maladie coronarienne), qui ont une valeur prédite supérieure à a et

Page 29: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 28 Catherine Huber

2) en deuxième colonne 1-la proportion des sujets de type 0 (coron=0 :ils n'ont pas eu de maladie coronarienne), qui ont une valeur prédite inférieure à a. rocc<-matrix(0,24,2) for(ii in (1:24)) { # sensibilité

rocc[ii,1]<-sum(coron*(Fit > ii*.02))/sum(coron) # 1 - spécificité

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 quantités sensibilité = rocc[,1] et 1 - spécificité = rocc[,2] sont décroissantes. Pour obtenir un tableau croissant, on doit réordonner par : ord <- order(rocc[,2], rocc[,1])

ord # ord contient les indices

# des éléments du tableau ordonné # selon les valeurs croissantes # de la deuxième colonne, en séparant # les ex-aequo grâce à la première 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

Page 30: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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-même : 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

Sens

ibili

te

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 prédiction assez élevé pour ce modèle logistique.

Page 31: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 connaît l'âge et le poids n'est pas évident. Les deux indicateurs que sont la sensibilité et la spécificité sont importants tous les deux, et le choix du seuil a doit ménager un bon équilibre entre les deux. Bien sûr, l'aire au-dessous de la courbe, roca, ainsi que la courbe elle-même, sont aléatoires. Il est donc intéressant 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 rééchantillonnage, 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 prédéfinie comme une médiane, une variance ou un coefficient de corrélation: 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 donnée par la fonction Rocarea définie 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 spécificité # seront calculées.

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]

Page 32: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 résultats : 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

02

46

8

Value

Den

sity

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 vérifier cette impression, on peut faire : qqnorm(boot.obj5)

Page 33: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 32 Catherine Huber

Quantiles of Standard Normal

Qua

ntile

s of

Rep

licat

es

-2 0 2

0.60

0.65

0.70

0.75

0.80

0.85

Param

qui donne un graphe des quantiles de la loi normale contre les quantiles des données (QQ plot) pour l'échantillon bootstrappé des aires sous la courbe ROC. La linéarité de la courbe obtenue suggère bien qu'en effet la loi de l'aire sous la courbe ROC est approximativement normale.

L'intervalle de confiance à 95%, obtenu grâce 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 très proche de celui donné par les percentiles bootstrap, ce qui était prévisible après le tracé du QQ plot.

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

Considérons les tests d’ajustement, les tests d'égalité de deux lois fondés sur deux échantillons indépendants et le test du chi-2 d'indépendance de deux variables catégorielles. Les tests statistiques consistent souvent en une règle qui rejette H0 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)| H0 est vraie] où T(x) est la valeur observée de T(X), et T(X) est la variable aléatoire correspondante. L’estimateur bootstrap du dds est dds(bootstrap) = P[ T(X*) > T(x)| H0 est vraie] où X* représente l'échantillon bootstrap qui suit la loi de X* sous H0 et sachant x. Il reste à déterminer la loi de T(X*) sous H0 et sachant x.

Exemple 5 Les données concernent la survie de rats traités (z) et témoins (y): Groupe Survie (jours) moyenne écart type traités z: 94 197 16 38 99 141 23 86.86 25.24 non traités y:52 104 146 10 51 30 40 27 46 56.22 14.14

( ) 2/121

21

))()(` ˆ/1/1ˆ

ˆˆ),( yyzzou

mnyzyzT m

i in

i i −+−=+

−= ∑∑ ==

σσ

Page 34: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 33 Catherine Huber

Pour tester Ho: F=G contre H1: moyenne(G)> moyenne(F), on rejette Ho si T(Z,Y)> constante. Le dds du test est P[T(Z,Y) > T(z,y)| H0]. Sous H0, les échantillons z et y forment un échantillon de taille m+n = 7 + 9 =16 d’une population homogène de fonction de répartition unique F0. 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 observée 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 observée # 2) pour le test bootstrap B<-1000 boot<-rep(0,B) # boot sera rempli par la statistique t de Student # calculée chaque fois sur l'échantillon bootstrap x<-c(z,y) # x est l’échantillon 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)")

Page 35: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 34 Catherine Huber

-4 -2 0 2 4

050

100

150

200

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 répétitions est de 0.157. Si on fait l’hypothèse de normalité de F et de G, ce qui est nécessaire pour effectuer le test de Student, le dds=0.206. la différence entre les deux valeurs est assez importante.

Exemple 6: test pour un échantillon : Reprenons les données des rats traités de l’exemple précédent. Un autre chercheur, utilisant un échantillon beaucoup plus important a trouvé que la survie moyenne des rats traités est de 129.0. Nous allons tester l'hypothèse H0 : E(Z) = 129.0, contre H1: E (Z) < 129.0 au seuil alpha = 0.05. Sous H0, la fonction de répartition F de Z est libre sauf que sa moyenne est égale à 129.0. Une façon simple d’estimer cette loi est d’utiliser la fonction de répartition empirique des z' ainsi définis, qui est de moyenne 129.0 : 1.On tire B = 1000 échantillons bootstrap, avec remise, de même 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'*'*)(

zzzt −

=

0.129' +−= zzz ii

Page 36: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

bootstrap_6exemples_pratiques_splus_et_r_papier.doc 35 Catherine Huber

3. Le degré de signification pour le test bootstrap t de H0 contre H1: moyenne(F) < 129.0 est la proportion nb(t(z’*)<tt)/1000, des échantillons pour lesquels t(z'*) est inférieure à la valeur tt observée initialement de la statistique t.

Dans notre simulation 78 échantillons bootstrap avaient une valeur t(z’*) inférieure a –1.67, et donc le degré de signification dds du test t bootstrap était 0.078. Pour le t-test qui fait l'hypothèse que la loi F est normale, le degré de signification est P[t6<-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 après 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 supérieur à 0.05, le t bootstrap ne rejette pas Ho.

67.17/8.66

0.1299.867/)var(

0.129−=

−=

−=

zztt

Page 37: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

cours_bootstrap_3_en_R.doc Catherine Huber 36

################################################################# ##### Utilisation du bootstrap en R ##### ################################################################# rm(list = ls()) # nettoyage des données library(boot) # chargement de la bibliothèque "boot" # Saisie des données 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 médiane ############################################################## 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 ###################################################### ### Vérification en obtenant IC.perc.1 à la main #### ###################################################### a<-0.05 med.ord<-sort(boot.obj1$t)

Page 38: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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)

Page 39: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 corrélation ##### ### 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

Page 40: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

cours_bootstrap_3_en_R.doc Catherine Huber 39

################################################### # On peut aussi donner le même 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 #### ########################################################### ########################################################### ###### Régression 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) ################################################################ # prédiction 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é #######

Page 41: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

cours_bootstrap_3_en_R.doc Catherine Huber 40

#### en 2ème colonne: 1- spécificité ####### ################################################################ 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 - spécificité rocc[ii,2]<-1-sum((1- coron)*(Fit<=ii*.02))/sum(1-coron) } rocc ######################################################### ### On doit réordonner les abscisses ######################################################### ord <- order(rocc[,2], rocc[,1]) ord # ord contient les indices # des éléments du tableau ordonné # selon les valeurs croissantes # de la deuxième colonne, en séparant # les ex-aequo grâce à la première colonne rocc1 <- rocc[ord,] rocc1 ########################################################## win.graph() plot(rocc1[,2],rocc1[,1], type="l",lwd=4, xlab="1-Specificite",ylab="Sensibilite")

Page 42: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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 spécificité # seront calculées. 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

Page 43: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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)

Page 44: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 43

Exemple d'un cas où le bootstrap ne marche pas bien: Estimation du paramètre θ d'une loi uniforme sur [0 θ].

Xi de loi uniforme sur [0 θ] :

U[0 θ] Echantillon X1, X2,...,Xn Problème : estimer θ Estimateur MV : theta.hat = x(n) le maximum des xi. On connaît la loi de X(n) = max (X1, X2, ..., Xn). La fonction de répartition de l'estimateur est

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

et la densité : f(y) = nyn-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])

Page 45: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

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="densite 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)

Page 46: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 45

x

dens

ite d

u m

ax

0.90 0.92 0.94 0.96 0.98 1.00

020

4060

8010

012

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 connaît 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

Page 47: Le Bootstrap · Bootstrap 1 Une m´ethode de r´e´echantillonnage: le bootstrap. Catherine Huber Le terme de r´e´echantillonnage, ou, en anglais, ”bootstrap” , qui ´evoque

cours_bootstrap_4_uniform_counterexample.doc Catherine Huber 46

Donc p → 1 - e – 1 = 0.6321206 . Soit F une fonction de répartition de support [0 θ] Si on considère la statistique:

Rn(X | F) = n(θ – X(n))/ θ sa version bootstrap est

Rn*(X* | Fn) = n(X(n) – X*(n))/ X(n)

On voit que

P(Rn* = 0 | Fn) = 1 – exp(-1) = 0.6321

P(Rn = 0 | F ) = 0

Si F est la loi uniforme sur [0 θ], la loi asymptotique de Rn(X | F) est la loi exponentielle de paramètre 1:

P(Rn>x) = P (n(θ – X(n))/ θ >x)

= P(X(n)<(nθ- θx)/n)) = (1-x/n)n

→ e-x Alors que la loi asymptotique de Rn*(X* | Fn) ne peut pas converger vers la loi exponentielle de paramètre 1.