Bootstrap en R : intervalles de confiance et validation
Rééchantillonner avec remise pour quantifier l’incertitude et valider un modèle — avec rsample et yardstick
Un guide pratique du bootstrap en R. Utilisez le rééchantillonnage avec remise pour estimer l’erreur standard et un intervalle de confiance par percentiles pour n’importe quelle statistique (ici, des coefficients de régression) avec rsample::bootstraps(), visualisez la distribution bootstrap, et injectez les rééchantillons bootstrap dans fit_resamples() pour valider un modèle prédictif — et apprenez quand préférer le bootstrap à la validation croisée k-fold.
Date de publication
25 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Le bootstrap répond à la question « quelle est l’incertitude de cette estimation ? » en rééchantillonnant vos données avec remise un grand nombre de fois, en recalculant la statistique sur chaque rééchantillon, et en lisant la dispersion obtenue.
Cette dispersion est l’erreur standard ; les percentiles 2,5 et 97,5 des estimations bootstrap donnent un intervalle de confiance par percentiles à 95 % — sans formule ni hypothèse de distribution.
En R, rsample::bootstraps() construit les rééchantillons ; appliquez votre estimateur sur chacun, puis int_pctl() renvoie l’IC par percentiles. La fonction boot::boot() de R de base fait classiquement le même travail.
Le bootstrap a un second usage — comme méthode de rééchantillonnage pour la validation de modèles : passez bootstraps() directement à tune::fit_resamples() pour obtenir une estimation de performance à faible variance.
Chaque rééchantillon laisse de côté ~37 % des lignes (l’échantillon out-of-bag) qui devient le pli de test mis de côté — c’est ce qui rend l’estimation du modèle honnête.
Bootstrap vs validation croisée : le bootstrap donne des estimations d’erreur à faible variance mais légèrement pessimistes ; la validation croisée k-fold est quasiment sans biais avec un peu plus de variance. Les deux sont traitées dans validation croisée.
Vous ajustez un modèle linéaire et R vous renvoie un coefficient : Agriculture = -0.17. Mais à quel point êtes-vous sûr de ce nombre ? Si vous aviez collecté un échantillon légèrement différent de la même population, serait-il de nouveau −0.17, ou −0.25, ou −0.05 ? La statistique classique répond avec une formule pour l’erreur standard — mais cette formule s’appuie sur des hypothèses (erreurs normales, à variance constante) que les données réelles enfreignent souvent.
Le bootstrap contourne tout cela. L’idée est presque insolente de simplicité : traitez votre échantillon comme s’il était la population, tirez de nouveaux échantillons à partir de lui (avec remise), et observez de combien votre estimation fluctue. Cette fluctuation, c’est votre incertitude — mesurée directement à partir des données, sans aucune formule.
Le bootstrap a deux visages, et cette leçon enseigne les deux :
Quantifier l’incertitude de n’importe quelle statistique — ici, l’erreur standard et l’intervalle de confiance d’un coefficient de régression. C’est l’usage original et le plus emblématique.
Valider un modèle prédictif — en utilisant les rééchantillons bootstrap comme plis d’entraînement/test dans un workflow de rééchantillonnage, le même rôle que joue la validation croisée k-fold.
Si vous avez déjà rencontré la validation croisée, le second usage vous semblera familier ; le premier est ce qui rend le bootstrap unique en son genre. Nous nous appuyons sur le workflow tidymodels, donc une connaissance superficielle de rsample aide mais n’est pas indispensable.
Les données
Nous utiliserons le jeu de données intégré swiss : 47 provinces francophones de Suisse (vers 1888), avec une mesure standardisée de fertilité (Fertility) et cinq indicateurs socio-économiques. Nous modéliserons Fertility à partir des autres — le même cadre que celui utilisé pour enseigner les métriques de précision de régression — et nous demanderons quelle confiance accorder aux coefficients ajustés.
Chaque coefficient est une seule meilleure estimation. La question pour le reste de cette leçon : de combien ces nombres bougeraient-ils si nous avions tiré un échantillon différent ?
Comment fonctionne le bootstrap
Un échantillon bootstrap est un nouveau jeu de données de la même taille que l’original, tiré avec remise. « Avec remise » est toute l’astuce : après avoir choisi une ligne, vous la remettez, de sorte que la même province peut apparaître deux ou trois fois dans un même échantillon bootstrap — et d’autres n’apparaîtront pas du tout.
data("swiss")n <-nrow(swiss) # 47 provincesset.seed(123)idx <-sample(seq_len(n), size = n, replace =TRUE) # one bootstrap sample of row indiceslength(unique(idx)) # how many DISTINCT rows landed in this resample
[1] 29
Sur 47 lignes, seulement une trentaine de lignes distinctes apparaissent — le reste étant des doublons. Les provinces qui n’ont pas été retenues (ici ~17 d’entre elles, soit environ 37 %) forment l’échantillon out-of-bag. Nous y reviendrons : c’est exactement le jeu de test mis de côté lorsque le bootstrap est utilisé pour la validation de modèle.
NotePourquoi ~37 % sont laissés de côté
Chaque ligne a une probabilité \((1 - 1/n)^n\) d’être manquée lors d’un seul tirage bootstrap. À mesure que \(n\) croît, cela converge vers \(e^{-1} \approx 0.368\) — donc en moyenne environ 63 % des lignes apparaissent dans chaque échantillon bootstrap et ~37 % sont out-of-bag, quelle que soit la taille du jeu de données.
La procédure bootstrap n’est ensuite qu’une répétition :
Tirer un échantillon bootstrap (taille \(n\), avec remise).
Recalculer votre statistique dessus (ici, les coefficients de régression).
Répéter des centaines ou des milliers de fois.
La collection des statistiques recalculées est la distribution bootstrap — sa dispersion est l’ erreur standard, ses percentiles forment un intervalle de confiance.
Visage 1 — Quantifier l’incertitude d’un coefficient
Construire les rééchantillons avec rsample
rsample::bootstraps() crée les rééchantillons pour vous — chacun est un split qui connaît ses lignes en échantillon (analyse) et ses lignes out-of-bag (évaluation). Nous ajoutons apparent = TRUE, qui ajoute l’échantillon complet d’origine comme un rééchantillon supplémentaire ; la fonction d’intervalle de tidymodels l’utilise pour corriger le biais.
library(rsample)data("swiss")set.seed(123)boot_samples <-bootstraps(swiss, times =1000, apparent =TRUE)boot_samples
Nous avons 1000 rééchantillons bootstrap (plus l’apparent). Chaque <split [47/k]> indique que le jeu d’analyse compte 47 lignes et que le jeu d’évaluation compte k lignes out-of-bag — et k varie, exactement comme attendu.
Recalculer les coefficients sur chaque rééchantillon
Appliquez maintenant un petit estimateur sur chaque rééchantillon. Pour chaque split, nous extrayons son jeu d’analyse avec analysis(), ajustons le modèle linéaire, et mettons les coefficients au propre avec broom::tidy(). Stocker les résultats mis au propre dans une colonne-liste est l’idiome tidymodels pour une distribution bootstrap :
library(rsample)library(broom)data("swiss")set.seed(123)boot_samples <-bootstraps(swiss, times =1000, apparent =TRUE)# Fit the model on ONE resample and return tidy coefficientscoef_fun <-function(split) {tidy(lm(Fertility ~ ., data =analysis(split)))}# Apply to every resample; keep the results in a list-column called `coefs`boot_samples$coefs <-lapply(boot_samples$splits, coef_fun)boot_samples$coefs[[1]]
Voilà la table des coefficients ajustés à partir du premier échantillon bootstrap. Il y en a 1000 — la matière première de la distribution bootstrap.
Erreur standard + intervalle de confiance par percentiles
rsample::int_pctl() lit la colonne-liste et renvoie, par terme, l’intervalle de confiance par percentiles du bootstrap — les percentiles 2,5 et 97,5 des 1000 estimations :
library(rsample)library(broom)data("swiss")set.seed(123)boot_samples <-bootstraps(swiss, times =1000, apparent =TRUE)coef_fun <-function(split) tidy(lm(Fertility ~ ., data =analysis(split)))boot_samples$coefs <-lapply(boot_samples$splits, coef_fun)ci <-int_pctl(boot_samples, coefs)as.data.frame(ci)
Lisez ceci en langage clair. Prenez la ligne Agriculture : l’estimation bootstrap est d’environ −0.18, et l’intervalle par percentiles à 95 % s’étend grossièrement de [−0.30, −0.04]. Donc :
« En rééchantillonnant les données 1000 fois, l’effet d’Agriculture sur la fertilité s’est situé entre environ −0.30 et −0.04 dans 95 % des rééchantillons — systématiquement négatif. Nous sommes confiants que la relation est négative, même si son ampleur exacte reste incertaine. »
Comme l’intervalle exclut 0, ce coefficient est « significatif » au sens du bootstrap — pas de t-test, pas d’hypothèse de normalité, juste les données rééchantillonnées. Notez que l’intervalle d’Examinationchevauche 0, donc son effet est de signe incertain — la même conclusion à laquelle parviendrait une p-value classique.
Visualiser la distribution bootstrap
L’intervalle est un résumé ; la distribution bootstrap est l’image complète. Voici les 1000 estimations d’Agriculture, avec l’estimation d’origine et l’intervalle par percentiles marqués :
library(rsample)library(broom)library(ggplot2)data("swiss")set.seed(123)boot_samples <-bootstraps(swiss, times =1000, apparent =TRUE)coef_fun <-function(split) tidy(lm(Fertility ~ ., data =analysis(split)))boot_samples$coefs <-lapply(boot_samples$splits, coef_fun)# Pull the 1000 Agriculture estimates out of the list-columnagri <-do.call(rbind, boot_samples$coefs)agri <- agri[agri$term =="Agriculture", ]ci <-int_pctl(boot_samples, coefs)agri_ci <- ci[ci$term =="Agriculture", ]ggplot(agri, aes(x = estimate)) +geom_histogram(bins =40, fill ="#3a86d4", color ="white", alpha =0.9) +geom_vline(xintercept = agri_ci$.estimate, linewidth =1, color ="gray20") +geom_vline(xintercept =c(agri_ci$.lower, agri_ci$.upper),linetype ="dashed", color ="gray40") +labs(x ="Bootstrap estimate of the Agriculture coefficient",y ="Count (of 1000 resamples)" ) +theme_minimal()
La distribution est à peu près en forme de cloche et centrée près de l’estimation d’origine (ligne pleine) ; les lignes en pointillés sont les bornes de l’IC par percentiles. Voilà à quoi ressemble « l’erreur standard d’un coefficient » — la largeur de ce nuage, calculée directement à partir de vos données plutôt que supposée.
La voie classique : boot::boot()
Le package boot de R de base est la manière éprouvée de faire la même chose. Vous écrivez une fonction de (data, index) renvoyant la statistique, et boot() gère le rééchantillonnage :
library(boot)data("swiss")# Return the coefficients for a given set of row indicesmodel_coef <-function(data, index) {coef(lm(Fertility ~ ., data = data, subset = index))}set.seed(123)boot_out <-boot(swiss, model_coef, R =1000)boot_out
La colonne std. error est l’erreur standard bootstrap de chaque coefficient (t1 = ordonnée à l’origine, t2 = Agriculture, et ainsi de suite). Un intervalle à 95 % rapide par approximation normale est estimate ± 2 × SE :
library(boot)data("swiss")model_coef <-function(data, index) coef(lm(Fertility ~ ., data = data, subset = index))set.seed(123)boot_out <-boot(swiss, model_coef, R =1000)# Agriculture is the 2nd coefficient (index 2)est <- boot_out$t0[2]se <-sd(boot_out$t[, 2])c(estimate = est, lower = est -2* se, upper = est +2* se)
Cela tombe dans le même voisinage que l’intervalle par percentiles de rsample ci-dessus. La méthode par percentiles (int_pctl) est généralement préférée car elle ne suppose pas que la distribution bootstrap est symétrique ; l’approximation normale est une vérification rapide de cohérence.
NoteErreur standard bootstrap vs l’erreur standard de lm()
summary(lm(...))$coef rapporte aussi des erreurs standard — mais celles-ci proviennent d’une formule qui suppose que la structure d’erreur du modèle linéaire est valide. L’erreur standard bootstrap ne fait aucune telle hypothèse : elle mesure la variabilité empiriquement. Quand les hypothèses du modèle sont fragiles, le bootstrap est l’estimation la plus fiable ; quand elles tiennent, les deux concordent étroitement.
Visage 2 — Le bootstrap comme rééchantillonnage de validation de modèle
Le second usage transforme le bootstrap en une méthode de rééchantillonnage pour estimer la performance d’un modèle — le même travail que fait la validation croisée. Le mécanisme est l’échantillon out-of-bag : ajuster sur chaque échantillon bootstrap, évaluer sur ses ~37 % laissés de côté, répéter, faire la moyenne.
Comme bootstraps() produit un objet de rééchantillonnage rsample, il s’insère directement dans tune::fit_resamples() — exactement là où vous passeriez sinon vfold_cv() :
library(tidymodels)data("swiss")# A plain linear model in a workflowlm_spec <-linear_reg() |>set_engine("lm")swiss_wf <-workflow() |>add_formula(Fertility ~ .) |>add_model(lm_spec)# 100 bootstrap resamples as the train/test foldsset.seed(123)boot_folds <-bootstraps(swiss, times =100)boot_res <-fit_resamples( swiss_wf,resamples = boot_folds,metrics =metric_set(rmse, rsq, mae))collect_metrics(boot_res)
# A tibble: 3 × 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 mae standard 6.51 100 0.105 pre0_mod0_post0
2 rmse standard 8.10 100 0.124 pre0_mod0_post0
3 rsq standard 0.624 100 0.0132 pre0_mod0_post0
fit_resamples() a ajusté le modèle sur chacun des 100 échantillons bootstrap et l’a évalué sur les lignes out-of-bag correspondantes. collect_metrics() fait la moyenne sur les 100 :
mean — l’estimation bootstrap de chaque métrique (RMSE en unités de fertilité, R² comme part de variance, MAE l’erreur absolue moyenne). Voir métriques de précision pour savoir comment lire chacune.
std_err — de combien la métrique a varié d’un rééchantillon à l’autre. Une marque de fabrique du bootstrap est que cela est petit — les estimations de performance bootstrap ont une variance notablement faible.
Cette faible variance est la force du bootstrap comme méthode de validation ; sa faiblesse est un léger biais pessimiste (il tend à sous-estimer la précision réelle, car chaque modèle s’entraîne sur seulement ~63 % de lignes distinctes). Pour choisir entre des modèles, le biais s’annule en grande partie ; pour rapporter la précision d’un modèle, l’estimation quasiment sans biais de la validation croisée k-fold est généralement préférée.
Bootstrap vs validation croisée — laquelle, quand ?
Les deux rééchantillonnent les données pour estimer l’incertitude ; leurs compromis diffèrent :
Bootstrap
validation croisée k-fold
Comment il rééchantillonne
échantillons de taille \(n\)avec remise
\(k\) plis disjoints, sans remise
Pli de test
les ~37 % out-of-bag
le pli mis de côté (~1/\(k\))
Variance de l’estimation
faible
modérée
Biais
légèrement pessimiste
quasiment sans biais
Meilleur pour
l’incertitude d’une statistique (SE/IC) ; comparaison stable de modèles
une estimation de performance honnête à rapporter
Règle empirique : optez pour le bootstrap quand vous voulez l’erreur standard ou l’intervalle de confiance d’une estimation (un coefficient, une métrique, n’importe quoi) — c’est son don unique. Optez pour la validation croisée k-fold quand vous voulez une estimation honnête et quasiment sans biais de la façon dont un modèle se comportera sur de nouvelles données. Elles sont complémentaires, pas rivales.
NoteL’idée derrière le bootstrap (facultatif)
La logique est le principe de substitution (plug-in). Vous voulez une propriété d’un estimateur \(\hat\theta\) (disons son erreur standard) sous la vraie distribution génératrice des données \(F\) — mais vous ne connaissez pas \(F\). Le bootstrap remplace \(F\) par la distribution empirique\(\hat F\) (votre échantillon, chaque ligne de poids \(1/n\)) et échantillonne à partir de celle-ci. Un tirage de taille \(n\) depuis \(\hat F\) avec remise est exactement un échantillon bootstrap.
Recalculer \(\hat\theta\) sur \(B\) échantillons bootstrap donne \(\hat\theta^{*}_1, \dots, \hat\theta^{*}_B\) (le \(*\) marque une réplique bootstrap). Leur écart-type estime l’erreur standard de \(\hat\theta\) :
L’intervalle par percentiles prend simplement les quantiles empiriques 2,5 et 97,5 des \(\hat\theta^{*}_b\). Pourquoi avec remise, et pourquoi la taille \(n\) ? Pour que chaque échantillon bootstrap imite le tirage d’un échantillon frais de la même taille depuis la population — la variabilité entre échantillons bootstrap reflète alors la variabilité que vous observeriez entre échantillons réels. Quand \(B \to \infty\), l’erreur de Monte-Carlo s’évanouit ; \(B = 1000\)–\(2000\) suffit amplement pour un intervalle stable.
🟢 Avec un agent IA
Bloqué sur vos propres données ? Demandez à Prova« construire un intervalle de confiance bootstrap pour cette estimation en R » — elle répond avec du code rsample que vous pouvez exécuter sur votre jeu de données, puis vous aide à lire l’intervalle et à décider si l’effet est réel. The runtime is the judge.Demander à Prova →
Problèmes courants
Vous avez oublié set.seed() et l’intervalle bouge à chaque exécution. Le bootstrap est aléatoire — sans graine vous obtenez des rééchantillons (et des bornes d’IC) légèrement différents à chaque fois. Fixez une graine avant bootstraps() (ou boot()) pour un intervalle reproductible, comme vous le feriez pour tout rééchantillonnage.
int_pctl() lève une erreur ou avertit qu’il y a trop peu de rééchantillons. Les intervalles par percentiles ont besoin de beaucoup de rééchantillons pour être stables — utilisez times = 1000 ou plus pour un IC de coefficient (une poignée suffit seulement pour un aperçu rapide). Et n’oubliez pas apparent = TRUE lorsque vous comptez utiliser int_pctl()/int_bca().
Vous avez utilisé trop peu de rééchantillons et l’histogramme paraît irrégulier.times = 25 suffit pour valider un modèle mais bien trop peu pour estimer un IC de manière lisse. Augmentez times pour le travail sur l’incertitude ; le coût est juste du calcul.
Votre IC bootstrap diverge de summary(lm()). C’est souvent l’intérêt, pas un bug — l’erreur standard de lm() suppose des erreurs normales à variance constante ; pas le bootstrap. S’ils divergent fortement, faites confiance au bootstrap et vérifiez les hypothèses de votre modèle.
Questions fréquentes
NoteQu’est-ce que le rééchantillonnage bootstrap ?
Le rééchantillonnage bootstrap est une méthode pour mesurer l’incertitude d’une statistique en tirant à répétition de nouveaux échantillons à partir de vos données existantes, avec remise, et en recalculant la statistique sur chacun. La dispersion de ces valeurs recalculées estime l’erreur standard de la statistique, et leurs percentiles donnent un intervalle de confiance — le tout sans formule ni hypothèse de distribution. Il fait aussi office de méthode de rééchantillonnage pour la validation de modèle, où les lignes laissées de côté (out-of-bag) de chaque rééchantillon servent de jeu de test.
NoteComment calculer un intervalle de confiance bootstrap en R ?
Créez les rééchantillons avec rsample::bootstraps(data, times = 1000, apparent = TRUE), appliquez votre estimateur sur les splits (par ex. tidy(lm(...)) sur analysis(split)) dans une colonne-liste, puis appelez int_pctl(resamples, that_column) pour l’intervalle par percentiles. L’alternative classique est boot::boot(data, statistic, R = 1000) suivie de boot.ci() (ou estimate ± 2 × SE). Fixez toujours une graine d’abord pour que l’intervalle soit reproductible.
NoteBootstrap vs validation croisée — quelle est la différence ?
La validation croisée divise les données en plis disjoints (sans remise) et est quasiment sans biais, ce qui en fait la référence pour rapporter la performance attendue d’un modèle. Le bootstrap échantillonne avec remise (taille \(n\)), teste sur les ~37 % out-of-bag, et produit des estimations à variance plus faible mais légèrement pessimistes — et, de façon unique, vous donne l’erreur standard ou l’intervalle de confiance d’une estimation. Utilisez le bootstrap pour l’incertitude, la validation croisée pour un chiffre de performance honnête. Voir validation croisée.
NoteQu’est-ce que l’échantillon out-of-bag ?
Parce qu’un échantillon bootstrap est tiré avec remise, en moyenne environ 37 % des lignes d’origine ne sont pas sélectionnées pour un rééchantillon donné. Ces lignes laissées de côté forment l’échantillon out-of-bag (OOB). Lorsque le bootstrap est utilisé pour valider un modèle, les lignes OOB jouent le rôle du jeu de test mis de côté — le modèle s’entraîne sur les lignes sélectionnées et est évalué sur les lignes OOB. Les forêts aléatoires utilisent cette même idée pour leur erreur OOB.
NoteCombien de rééchantillons bootstrap me faut-il ?
Pour valider un modèle (estimer la performance), 25 à 100 rééchantillons suffisent généralement. Pour estimer un intervalle de confiance d’une statistique, utilisez 1000 ou plus — les intervalles par percentiles dépendent des queues de la distribution bootstrap, qui ont besoin de nombreux rééchantillons pour se stabiliser. Davantage de rééchantillons ne fait que coûter du calcul ; cela ne nuit jamais à la précision.
Testez vos connaissances
ImportantExercice : un intervalle bootstrap pour un coefficient de corrélation
Estimez un intervalle de confiance bootstrap à 95 % pour la corrélation entre Fertility et Education dans les données swiss. Utilisez rsample::bootstraps() avec times = 1000 et apparent = TRUE, calculez la corrélation sur le jeu d’analyse de chaque rééchantillon, et rapportez l’intervalle par percentiles avec int_pctl().
AstuceIndice
Votre fonction estimateur devrait renvoyer un tibble bien rangé d’une seule ligne, par ex. tibble::tibble(term = "cor", estimate = cor(d$Fertility, d$Education)), où d <- analysis(split). int_pctl() a besoin de cette forme term/estimate.
AstuceSolution
library(rsample)library(tibble)data("swiss")set.seed(123)boot_samples <-bootstraps(swiss, times =1000, apparent =TRUE)cor_fun <-function(split) { d <-analysis(split)tibble(term ="cor", estimate =cor(d$Fertility, d$Education))}boot_samples$cors <-lapply(boot_samples$splits, cor_fun)int_pctl(boot_samples, cors)
Vous obtiendrez un intervalle négatif (grossièrement −0.8 à −0.4) qui exclut 0 — fertilité et éducation sont de manière fiable négativement associées dans ces provinces, et le bootstrap quantifie à quel point de manière fiable sans aucune hypothèse de normalité sur la corrélation.
Vérification rapide. Un collègue exécute bootstraps(swiss, times = 20) et en rapporte un intervalle de confiance à 95 % pour un coefficient. Pourquoi devriez-vous être sceptique, et quelle est la solution ?
NoteAfficher la réponse
Vingt rééchantillons, c’est bien trop peu pour estimer les queues de la distribution bootstrap, et un intervalle par percentiles à 95 % est défini précisément par ces queues (les percentiles 2,5 et 97,5). L’intervalle sera instable et peu fiable. La solution : augmenter times à 1000 ou plus (et set.seed() pour la reproductibilité). Vingt rééchantillons conviennent pour valider un modèle, mais pas pour un IC.
Conclusion
Vous avez appris les deux visages du bootstrap sur les données swiss : quantifier l’incertitude — rééchantillonner avec remise, recalculer un coefficient 1000 fois, et lire l’erreur standard et l’intervalle de confiance par percentiles directement sur la distribution bootstrap (avec rsample::int_pctl() et le classique boot::boot()) — et valider un modèle, en injectant bootstraps() dans fit_resamples() et en évaluant sur les lignes out-of-bag. Optez pour le bootstrap quand vous avez besoin de l’incertitude d’une estimation, et pour la validation croisée quand vous avez besoin d’un chiffre de performance honnête à rapporter.
Prouvez que vous savez le faire. Maîtrisez toute la série Validation de modèles en R — suivez votre parcours, construisez des projets et obtenez un certificat.
Cette leçon est reproductible : chaque intervalle et chaque figure a été produit par le code montré — copiez n’importe quel bloc et exécutez-le pour les reproduire. The runtime is the judge.
Pour aller plus loin
Efron, B., & Tibshirani, R. J. An Introduction to the Bootstrap — la référence canonique sur le rééchantillonnage bootstrap et les intervalles de confiance.
Kuhn, M., & Silge, J. Tidy Modeling with R — le rééchantillonnage avec rsample, y compris le bootstrap et l’estimation out-of-bag. Gratuit en ligne (CC BY-NC-SA).
@online{2026,
author = {},
title = {Bootstrap en R : intervalles de confiance et validation},
date = {2026-06-25},
url = {https://www.datanovia.com/learn/machine-learning/model-validation/bootstrap-resampling},
langid = {fr}
}
Comment fonctionne le bootstrap
Un échantillon bootstrap est un nouveau jeu de données de la même taille que l’original, tiré avec remise. « Avec remise » est toute l’astuce : après avoir choisi une ligne, vous la remettez, de sorte que la même province peut apparaître deux ou trois fois dans un même échantillon bootstrap — et d’autres n’apparaîtront pas du tout.
Sur 47 lignes, seulement une trentaine de lignes distinctes apparaissent — le reste étant des doublons. Les provinces qui n’ont pas été retenues (ici ~17 d’entre elles, soit environ 37 %) forment l’échantillon out-of-bag. Nous y reviendrons : c’est exactement le jeu de test mis de côté lorsque le bootstrap est utilisé pour la validation de modèle.
Chaque ligne a une probabilité \((1 - 1/n)^n\) d’être manquée lors d’un seul tirage bootstrap. À mesure que \(n\) croît, cela converge vers \(e^{-1} \approx 0.368\) — donc en moyenne environ 63 % des lignes apparaissent dans chaque échantillon bootstrap et ~37 % sont out-of-bag, quelle que soit la taille du jeu de données.
La procédure bootstrap n’est ensuite qu’une répétition :