Jackknife et bootstrap comparés Statistique linéaire θ(x 1,...,X n ) = c + n 1 n 1 α(x i) c constante, α fonction Exemples : X, 1 + n 1 Xi /n
Jackknife et bootstrap comparés Statistique linéaire θ(x 1,...,X n ) = c + n 1 n 1 α(x i) c constante, α fonction Exemples : X, 1 + n 1 Xi /n Estimation de la variance d une statistique : pour toute statistique linéaire le jackknife et le bootstrap sont égaux à la constante multiplicative (n 1)/n près.
Jackknife et bootstrap comparés Statistique linéaire θ(x 1,...,X n ) = c + n 1 n 1 α(x i) c constante, α fonction Exemples : X, 1 + n 1 Xi /n Estimation de la variance d une statistique : pour toute statistique linéaire le jackknife et le bootstrap sont égaux à la constante multiplicative (n 1)/n près. Pour une statistique non linéaire: les deux estimateurs de la variance peuvent être très différents. Pour des statistiques très éloignées de la linéarité, le jackknife est en général plus imprécis que le bootstrap.
Jackknife et bootstrap comparés Statistique linéaire θ(x 1,...,X n ) = c + n 1 n 1 α(x i) c constante, α fonction Exemples : X, 1 + n 1 Xi /n Estimation de la variance d une statistique : pour toute statistique linéaire le jackknife et le bootstrap sont égaux à la constante multiplicative (n 1)/n près. Pour une statistique non linéaire: les deux estimateurs de la variance peuvent être très différents. Pour des statistiques très éloignées de la linéarité, le jackknife est en général plus imprécis que le bootstrap. Exemples : le coeff. de corrélation de Pearson r X,Y est une statistique non linéaire
Jackknife et bootstrap comparés Exemple: X et coefficient de corrélation r X,Y pour normale bivariée moyennes 0, variances 1, corr. 0.7
Jackknife et bootstrap comparés Exemple: X et coefficient de corrélation r X,Y pour normale bivariée moyennes 0, variances 1, corr. 0.7 > library(mass) #package pour simuler la normale bivariée > mu = c(0,0) # vecteur des moyennes > sigma = matrix(c(1,.7,.7,1),ncol=2) # matrice de covariance
Jackknife et bootstrap comparés Exemple: X et coefficient de corrélation r X,Y pour normale bivariée moyennes 0, variances 1, corr. 0.7 > library(mass) #package pour simuler la normale bivariée > mu = c(0,0) # vecteur des moyennes > sigma = matrix(c(1,.7,.7,1),ncol=2) # matrice de covariance Simulation de 2000 vecteurs normaux bivariés > set.seed(601) > a = mvrnorm(2000,mu,sigma) #matrice 2000 2, lignes (X i,y i )
Estimation de σ(x) = 1/ n 200 estimations v Jack de X sur 200 échantillons de taille 10 (colonne X de la matrice a) > ja = numeric(200) #vecteur à 200 composantes 0 > for (i in 1:200) ja[i] = jackknife(a[(10*i-9):(10*i),1],mean)[[1]] #moyennes calculées sur la colonne X
Estimation de σ(x) = 1/ n 200 estimations v Jack de X sur 200 échantillons de taille 10 (colonne X de la matrice a) > ja = numeric(200) #vecteur à 200 composantes 0 > for (i in 1:200) ja[i] = jackknife(a[(10*i-9):(10*i),1],mean)[[1]] #moyennes calculées sur la colonne X Idem pour le bootstrap et v Boot > bo = numeric(200) > for (i in 1:200) + bo[i] = bootstrap(a[(10*i-9):(10*i),1],200,mean, func=sd)[[2]] #B = 200 réplications
Estimation de σ(x) (suite) 200 estimations selon le jackknife et le bootstrap. Echantillons de taille 10 d une normale N(0, 1).
Estimation de σ(x) (suite) 200 estimations selon le jackknife et le bootstrap. Echantillons de taille 10 d une normale N(0, 1). > boxplot(ja,bo,names=c( jackknife, bootstrap ), main= Ecart type de la moyenne ) > abline(h=1/sqrt(10)) # Var[X] = 1/ 10 = 0.316 #Rappel: v Boot = 9v Jack /10
Estimation de σ(r X,Y ) Création de 2 vecteurs de 200 composantes > rja = numeric(200) > rbo = numeric(200)
Estimation de σ(r X,Y ) Création de 2 vecteurs de 200 composantes > rja = numeric(200) > rbo = numeric(200) Définition de la corrélation de Pearson > theta = function(x,donnees) cor(donnees[x,1],donnees[x,2]) # x: nos des obs.
Estimation de σ(r X,Y ) Création de 2 vecteurs de 200 composantes > rja = numeric(200) > rbo = numeric(200) Définition de la corrélation de Pearson > theta = function(x,donnees) cor(donnees[x,1],donnees[x,2]) # x: nos des obs. Jackknife et bootstrap bivariés > for (i in 1:200) rja[i] = jackknife(1:10,theta, a[(10*i-9):(10*i),])[[1]] > for (i in 1:200) rbo[i] = bootstrap(1:10,200,theta, a[(10*i-9):(10*i),],func=sd)[[2]]
Estimation de σ(r X,Y ) (suite) 200 estimations selon le jackknife et le bootstrap. Echantillons de taille 10 normale bivariée.
Estimation de σ(r X,Y ) (suite) 200 estimations selon le jackknife et le bootstrap. Echantillons de taille 10 normale bivariée. > boxplot(rja,rbo,names=c("jackknife","bootstrap"), main="ecart type de rxy",ylab="200 estimations") > abline(h=(1-0.7ˆ2)/sqrt(10-3)) # σ(r) théorique 0.19
LE BOOTSTRAP (suite) Estimation de la variance d une médiane
LE BOOTSTRAP (suite) Estimation de la variance d une médiane Selon la théorie de l estimation par le maximum de vraisemblance, la médiane θ est asymptotiquement N(m, 1/(4nf 2 (m))), où m = médiane théorique, f = densité.
LE BOOTSTRAP (suite) Estimation de la variance d une médiane Selon la théorie de l estimation par le maximum de vraisemblance, la médiane θ est asymptotiquement N(m, 1/(4nf 2 (m))), où m = médiane théorique, f = densité. Estimateur possible: Var( θ) = 1/(4n f 2 (m)).
LE BOOTSTRAP (suite) Estimation de la variance d une médiane Selon la théorie de l estimation par le maximum de vraisemblance, la médiane θ est asymptotiquement N(m, 1/(4nf 2 (m))), où m = médiane théorique, f = densité. Estimateur possible: Var( θ) = 1/(4n f 2 (m)). Problème : estimer la densité f en m (vu plus loin).
LE BOOTSTRAP (suite) Estimation de la variance d une médiane Selon la théorie de l estimation par le maximum de vraisemblance, la médiane θ est asymptotiquement N(m, 1/(4nf 2 (m))), où m = médiane théorique, f = densité. Estimateur possible: Var( θ) = 1/(4n f 2 (m)). Problème : estimer la densité f en m (vu plus loin). Package boot, contient la fonction boot plus sophistiquée que la fonction bootstrap. > library(boot)
LE BOOTSTRAP (suite) Estimation de la variance d une médiane Selon la théorie de l estimation par le maximum de vraisemblance, la médiane θ est asymptotiquement N(m, 1/(4nf 2 (m))), où m = médiane théorique, f = densité. Estimateur possible: Var( θ) = 1/(4n f 2 (m)). Problème : estimer la densité f en m (vu plus loin). Package boot, contient la fonction boot plus sophistiquée que la fonction bootstrap. > library(boot) Jeu de données galaxies > library(mass)
Jeu galaxies > galaxies #vitesses d éloignement en km/s [1] 9172 9350 9483 9558 9775 10227 10406 16084 16170 18419 18552 18600 [13] 18927 19052 19070 19330 19343 19349 19440 19473 19529 19541 19547 19663 [25] 19846 19856 19863 19914 19918 19973 19989 20166 20175 20179 20196 20215 [37] 20221 20415 20629 20795 20821 20846 20875 20986 21137 21492 21701 21814 [49] 21921 21960 22185 22209 22242 22249 22314 22374 22495 22746 22747 22888...
Jeu galaxies > galaxies #vitesses d éloignement en km/s [1] 9172 9350 9483 9558 9775 10227 10406 16084 16170 18419 18552 18600 [13] 18927 19052 19070 19330 19343 19349 19440 19473 19529 19541 19547 19663 [25] 19846 19856 19863 19914 19918 19973 19989 20166 20175 20179 20196 20215 [37] 20221 20415 20629 20795 20821 20846 20875 20986 21137 21492 21701 21814 [49] 21921 21960 22185 22209 22242 22249 22314 22374 22495 22746 22747 22888... > length(galaxies) # n [1] 82
Jeu galaxies (suite) Histogramme #données non normales > hist(galaxies/1000,xlab= Vitesse en 1000 km/s,ylab=,main= Histogramme,col= blue,nclass=14) Histogramme 0 5 10 15 20 J.-C. Massé 10 15 20 25 30 35
Fonction boot Forme générale boot(data, statistic, R, sim="ordinary", stype="i", strata=rep(1,n), L=NULL, m=0, weights=null, ran.gen=function(d, p) d, mle=null,...)
Fonction boot Forme générale boot(data, statistic, R, sim="ordinary", stype="i", strata=rep(1,n), L=NULL, m=0, weights=null, ran.gen=function(d, p) d, mle=null,...) Arguments les plus importants: 4 premiers. data: données sous forme de vecteur, matrice ou tableau. Pour les deux derniers, une ligne est une observation multivariée. statistic: statistique exprimée comme fonction de 2 arguments: données data et le vecteur des indices des observations. R: n. échantillons bootstrap sim="ordinary": bootstrap non paramétrique (par défaut). Ce paramètre contrôle le type de simulation.
Fonction boot (suite) Résultats: liste de longueur 11
Fonction boot (suite) Résultats: liste de longueur 11 Noms des composantes: [1] "t0" "t" "R" "data" "seed" "statistic" [7] "sim" "call" "stype" "strata" "weights"
Fonction boot (suite) Résultats: liste de longueur 11 Noms des composantes: [1] "t0" "t" "R" "data" "seed" "statistic" [7] "sim" "call" "stype" "strata" "weights" Plus importantes en bootstrap non paramétrique: 2 premières. t0: valeur de la statistique sur les données t: vecteur (matrice) des réplications bootstrap de la statistique
Fonction boot (suite) Résultats: liste de longueur 11 Noms des composantes: [1] "t0" "t" "R" "data" "seed" "statistic" [7] "sim" "call" "stype" "strata" "weights" Plus importantes en bootstrap non paramétrique: 2 premières. t0: valeur de la statistique sur les données t: vecteur (matrice) des réplications bootstrap de la statistique La fonction boot estime automatiquement le biais et l écart type de la statistique
Fonction boot (suite) Résultats: liste de longueur 11 Noms des composantes: [1] "t0" "t" "R" "data" "seed" "statistic" [7] "sim" "call" "stype" "strata" "weights" Plus importantes en bootstrap non paramétrique: 2 premières. t0: valeur de la statistique sur les données t: vecteur (matrice) des réplications bootstrap de la statistique La fonction boot estime automatiquement le biais et l écart type de la statistique À la différence de la fonction bootstrap, boot a la même forme en univarié qu en multivarié.
Application de la fonction boot Avec boot, toute statistique doit être définie avec au moins 2 arguments.
Application de la fonction boot Avec boot, toute statistique doit être définie avec au moins 2 arguments. Exemple : θ = médiane échantillonnale > gal = galaxies/1000 #vitesse en milliers de km/s > set.seed(439) > gal.boot = boot(gal,function(x,i) {median(x[i])}, 1000) > gal.boot Bootstrap Statistics : original bias std. error t1* 20.8335 0.04957 0.5148366 Dans l ordre: la médiane, le biais estimé, l écart type estimé de la médiane échantillonnale.
Application de la fonction boot J.-C. Massé Avec boot, toute statistique doit être définie avec au moins 2 arguments. Exemple : θ = médiane échantillonnale > gal = galaxies/1000 #vitesse en milliers de km/s > set.seed(439) > gal.boot = boot(gal,function(x,i) {median(x[i])}, 1000) > gal.boot Bootstrap Statistics : original bias std. error t1* 20.8335 0.04957 0.5148366 Dans l ordre: la médiane, le biais estimé, l écart type estimé de la médiane échantillonnale. Histogramme + droite de Henry (= QQ-plot) sur les réplications bootstrap (composante $t) > plot(gal.boot)
Estimation de la loi par le bootstrap Non normalité de la médiane pour cette loi F Histogram of t Density 0.0 0.5 1.0 1.5 2.0 t* 20.0 20.5 21.0 21.5 22.0 20.0 21.0 22.0 3 1 0 1 2 3 J.-C. Massé t* Quantiles of Standard Normal
Influence de B sur v Boot Jeu de données law du package bootstrap > law # tableau LSAT GPA 1 576 339 2 635 330... 14 572 288 15 594 296
Influence de B sur v Boot Jeu de données law du package bootstrap > law # tableau LSAT GPA 1 576 339 2 635 330... 14 572 288 15 594 296 > cor(law[,1],law[,2]) #corrélation de Pearson r 15 [1] 0.7763745
Influence de B sur v Boot Jeu de données law du package bootstrap > law # tableau LSAT GPA 1 576 339 2 635 330... 14 572 288 15 594 296 > cor(law[,1],law[,2]) #corrélation de Pearson r 15 [1] 0.7763745 Estimation bootstrap de σ(r 15 ) = Var(r 15 )
Influence de B sur v Boot Jeu de données law du package bootstrap > law # tableau LSAT GPA 1 576 339 2 635 330... 14 572 288 15 594 296 > cor(law[,1],law[,2]) #corrélation de Pearson r 15 [1] 0.7763745 Estimation bootstrap de σ(r 15 ) = Var(r 15 ) Echantillons bootstrap bivariés
Estimation non paramétrique de σ(r 15 ) > theta = function(x,donnees) cor(donnees[x,1],donnees[x,2]) #x: nos des obs.
Estimation non paramétrique de σ(r 15 ) > theta = function(x,donnees) cor(donnees[x,1],donnees[x,2]) #x: nos des obs. Estimation bootstrap de σ(r 15 ): v (B) Boot B = 20, 50, 100, 200, 1000, 2000, 5000
Estimation non paramétrique de σ(r 15 ) > theta = function(x,donnees) cor(donnees[x,1],donnees[x,2]) #x: nos des obs. Estimation bootstrap de σ(r 15 ): v (B) Boot B = 20, 50, 100, 200, 1000, 2000, 5000 > set.seed(4756) > for (i in c(20,50,100,200,1000,2000,5000)) {print(bootstrap(1:15,i,theta,law,func=sd)$func.thetastar)} [1] 0.1120271 B = 20 [1] 0.132108 [1] 0.1379574 B = 100 [1] 0.133839 [1] 0.1349345 B = 1000 [1] 0.1346083 [1] 0.1344366 B = 5000
Estimation non paramétrique de σ(r 15 ) Estimation de la précision de v (B) Boot
Estimation non paramétrique de σ(r 15 ) Estimation de la précision de v (B) Boot > set.seed(4756) for (i in c(20,50,100,200,1000,2000,5000)) print(bootstrap(x = 1:15, nboot = i,theta, law, func = sd)$jack.boot.se) [1] 0.07540114 B = 20 [1] 0.09504396 [1] 0.08530572 B = 100 [1] 0.08619445 [1] 0.07342186 B = 1000 [1] 0.08598202 [1] 0.08224973 B = 5000
La statistique r 15 est-elle normale? Estimation par 3200 réplications bootstrap de r 15 > x = bootstrap(1:15,3200,theta,law)[[1]]
La statistique r 15 est-elle normale? Estimation par 3200 réplications bootstrap de r 15 > x = bootstrap(1:15,3200,theta,law)[[1]] > hist(x) (estimation de densité par bootstrap non paramétrique)
Loi de r 15 : autre approche Le jeu law est un échantillon de taille 15 sans remise des var. 2 (LSAT) et 3 (GPA) du tableau 82 3 law82. Population de ( 82 15) 9.97 10 15 échantillons possibles
Loi de r 15 : autre approche Le jeu law est un échantillon de taille 15 sans remise des var. 2 (LSAT) et 3 (GPA) du tableau 82 3 law82. Population de ( 82 15) 9.97 10 15 échantillons possibles Simulation de la loi échantillonnale de r 15 : 3200 échant. de taille 15 sans remise 3200 valeurs de r 15.
Loi de r 15 : autre approche Le jeu law est un échantillon de taille 15 sans remise des var. 2 (LSAT) et 3 (GPA) du tableau 82 3 law82. Population de ( 82 15) 9.97 10 15 échantillons possibles Simulation de la loi échantillonnale de r 15 : 3200 échant. de taille 15 sans remise 3200 valeurs de r 15. 3200 choix de 15 numéros d observations > a = matrix(0,nrow=3200,ncol=15); set.seed(51) > for (i in 1:3200) {a[i,] = sample(82,15)}#sur chaque ligne 15 indices différents parmi 82.
Loi de r 15 : autre approche Le jeu law est un échantillon de taille 15 sans remise des var. 2 (LSAT) et 3 (GPA) du tableau 82 3 law82. Population de ( 82 15) 9.97 10 15 échantillons possibles Simulation de la loi échantillonnale de r 15 : 3200 échant. de taille 15 sans remise 3200 valeurs de r 15. 3200 choix de 15 numéros d observations > a = matrix(0,nrow=3200,ncol=15); set.seed(51) > for (i in 1:3200) {a[i,] = sample(82,15)}#sur chaque ligne 15 indices différents parmi 82. Calcul de 3200 valeurs indépendantes de r 15 > b = numeric(3200) > for (i in 1:3200) b[i] = cor(law82[a[i,],2],law82[a[i,],3]) # [a[i,],2]: extraction de 15 val. de la variable LSAT
Loi de r 15 : autre approche Histogramme des 3200 valeurs de r 15 > hist(b,xlab= r,ylab= Fréquence, main= Histogramme estimant la loi de r_15, col= orange )
Loi de r 15 : autre approche Histogramme des 3200 valeurs de r 15 > hist(b,xlab= r,ylab= Fréquence, main= Histogramme estimant la loi de r_15, col= orange )
Le bootstrap paramétrique X 1,...,X n iid Fψ, ψ paramètre inconnu
Le bootstrap paramétrique X 1,...,X n iid Fψ, ψ paramètre inconnu ψ : estimateur de ψ vraisemblance) (par exemple, max. de
Le bootstrap paramétrique X 1,...,X n iid Fψ, ψ paramètre inconnu ψ : estimateur de ψ vraisemblance) (par exemple, max. de F bψ estimateur de la loi inconnue F ψ
Le bootstrap paramétrique X 1,...,X n iid Fψ, ψ paramètre inconnu ψ : estimateur de ψ vraisemblance) (par exemple, max. de F bψ estimateur de la loi inconnue F ψ X 1,...,X n iid F bψ : échantillon bootstrap de F bψ
Le bootstrap paramétrique X 1,...,X n iid Fψ, ψ paramètre inconnu ψ : estimateur de ψ vraisemblance) (par exemple, max. de F bψ estimateur de la loi inconnue F ψ X 1,...,X n iid F bψ : échantillon bootstrap de F bψ Jeu de données law #échant. de taille 15 > mx = mean(law[,1]) > my = mean(law[,2]) > mx [1] 600.2667 # score moyen au test LSAT > my [1] 309.4667 # moyenne des moyennes cumulatives
Le bootstrap paramétrique (suite) > sx = sd(law[,1]) > sy = sd(law[,2]) > sx [1] 41.79451 > sy [1] 24.3512 > covxy = cov(law[,1],law[,2]) > covxy [1] 790.1524
Le bootstrap paramétrique (suite) > sx = sd(law[,1]) > sy = sd(law[,2]) > sx [1] 41.79451 > sy [1] 24.3512 > covxy = cov(law[,1],law[,2]) > covxy [1] 790.1524 On veut estimer la loi de r 15 à partir du modèle normal bivarié et du bootstrap paramétrique. > library(mass) #package pour simuler la normale multivariée > mu = c(mx,my) > sigma = matrix(c(sxˆ2,covxy,covxy,syˆ2),ncol=2)
Le bootstrap paramétrique (suite) Simulation de 3200 échantillons normaux de taille 15 > a = mvrnorm(3200*15,mu,sigma) #matrice 48000 2
Le bootstrap paramétrique (suite) Simulation de 3200 échantillons normaux de taille 15 > a = mvrnorm(3200*15,mu,sigma) #matrice 48000 2 3200 réplications bootstrap de r 15 > r = numeric(3200) #vecteur à 3200 composantes > for (i in 1:3200) {r[i] = cor(a[(15*i-14):(15*i),1],a[(15*i-14):(15*i),2])} #calcul des 3200 valeurs de r 15 sur les 3200 échantillons bootstrap
Le bootstrap paramétrique (suite) Simulation de 3200 échantillons normaux de taille 15 > a = mvrnorm(3200*15,mu,sigma) #matrice 48000 2 3200 réplications bootstrap de r 15 > r = numeric(3200) #vecteur à 3200 composantes > for (i in 1:3200) {r[i] = cor(a[(15*i-14):(15*i),1],a[(15*i-14):(15*i),2])} #calcul des 3200 valeurs de r 15 sur les 3200 échantillons bootstrap Les réplications bootstrap de r 15 sont les valeurs de r 15 calculées sur les 3200 échantillons simulés.
Le bootstrap paramétrique (suite) Simulation de 3200 échantillons normaux de taille 15 > a = mvrnorm(3200*15,mu,sigma) #matrice 48000 2 3200 réplications bootstrap de r 15 > r = numeric(3200) #vecteur à 3200 composantes > for (i in 1:3200) {r[i] = cor(a[(15*i-14):(15*i),1],a[(15*i-14):(15*i),2])} #calcul des 3200 valeurs de r 15 sur les 3200 échantillons bootstrap Les réplications bootstrap de r 15 sont les valeurs de r 15 calculées sur les 3200 échantillons simulés. L histogramme permet de se faire une bonne idée de la loi de r 15 lorsque (X,Y ) est supposé normal bivarié.
Le bootstrap paramétrique (suite) Histogramme des 3200 réplications bootstrap de r 15