Rééchantillonnage bootstrap dans R
Implémentez des intervalles de confiance bootstrap avec sample() et remise.
Rééchantillonnage bootstrap dans R est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que le bootstrap ?
Le bootstrap est une méthode de rééchantillonnage qui estime la distribution d'échantillonnage d'une statistique en rééchantillonnant les données observées avec remise. Elle ne nécessite aucune hypothèse distributionnelle : les données constituent la distribution.
set.seed(42)
# Original sample of 20 observations
original_data <- c(14, 18, 11, 13, 6, 8, 2, 17,
20, 10, 15, 12, 9, 16, 7, 3,
19, 5, 4, 1)
n <- length(original_data)
# One bootstrap resample: sample WITH replacement
bootstrap_sample1 <- sample(original_data, n, replace = TRUE)
print(bootstrap_sample1)
# Contains repeats! Some original values are missing.
mean(original_data) # original mean
mean(bootstrap_sample1) # bootstrap mean (different)Distribution bootstrap de la moyenne
Générez de nombreux rééchantillons bootstrap, calculez la statistique sur chacun d'eux, puis rassemblez les résultats. Cette distribution bootstrap approxime la distribution d'échantillonnage de la statistique.
set.seed(42)
x <- c(14, 18, 11, 13, 6, 8, 2, 17, 20, 10,
15, 12, 9, 16, 7, 3, 19, 5, 4, 1)
n <- length(x)
B <- 5000 # number of bootstrap replicates
# Bootstrap distribution of the mean
boot_means <- replicate(B, {
x_star <- sample(x, n, replace = TRUE)
mean(x_star)
})
cat('Original mean:', mean(x), '\n')
cat('Bootstrap mean:', mean(boot_means), '\n')
cat('Bootstrap SE:', sd(boot_means), '\n')
cat('Theoretical SE:', sd(x)/sqrt(n))Bootstrap pour toute statistique
Le bootstrap fonctionne pour toute statistique : médiane, corrélation, coefficients de régression, moyenne tronquée. Il suffit de remplacer mean() par la statistique qui vous intéresse dans la boucle de réplication.
set.seed(42)
x <- c(2, 4, 6, 8, 10, 12, 100, 1, 3, 5)
# Notice the outlier 100 - makes the mean unreliable
B <- 5000; n <- length(x)
# Bootstrap distribution of the median
boot_medians <- replicate(B, {
median(sample(x, n, replace = TRUE))
})
# Bootstrap distribution of the trimmed mean (10%)
boot_tmeans <- replicate(B, {
mean(sample(x, n, replace = TRUE), trim = 0.1)
})
cat('Sample median:', median(x), '\n')
cat('Bootstrap SE of median:', sd(boot_medians), '\n')
cat('Bootstrap SE of trimmed mean:', sd(boot_tmeans))Intervalles de confiance bootstrap : méthode des percentiles
L'IC bootstrap le plus simple consiste à prendre les quantiles de la distribution bootstrap. L'IC à 95 % utilise les 2,5e et 97,5e percentiles. C'est rapide et intuitif, mais la couverture peut être problématique pour les statistiques asymétriques.
set.seed(42)
x <- rnorm(30, mean = 5, sd = 2)
B <- 5000; n <- length(x)
# Bootstrap CI for the mean
boot_means <- replicate(B, mean(sample(x, n, replace = TRUE)))
# Percentile CI
ci_percentile <- quantile(boot_means, c(0.025, 0.975))
cat('Percentile CI:', round(ci_percentile, 3), '\n')
# For comparison: t-interval (parametric)
t_ci <- mean(x) + qt(c(0.025, 0.975), df = n-1) * sd(x)/sqrt(n)
cat('t-interval CI:', round(t_ci, 3), '\n')
cat('True mean: 5')Erreur type bootstrap
L'erreur type bootstrap est simplement sd(boot_statistics). Elle estime la variation de la statistique entre des échantillons répétés issus de la population, sans hypothèse distributionnelle.
set.seed(42)
# Bootstrap SE for the ratio of two means
group_a <- rnorm(20, mean = 10, sd = 2)
group_b <- rnorm(20, mean = 8, sd = 2)
all_data <- data.frame(
value = c(group_a, group_b),
group = rep(c('A', 'B'), each = 20)
)
B <- 4000; n <- nrow(all_data)
boot_ratio <- replicate(B, {
idx <- sample(1:n, n, replace = TRUE)
d <- all_data[idx, ]
mean(d$value[d$group == 'A']) /
mean(d$value[d$group == 'B'])
})
cat('Observed ratio:', mean(group_a)/mean(group_b), '\n')
cat('Bootstrap SE:', round(sd(boot_ratio), 4), '\n')
cat('95% CI:', round(quantile(boot_ratio, c(.025,.975)), 3))Intervalle de confiance BCa
L'IC BCa (corrigé du biais et accéléré) est plus précis que l'IC fondé sur les percentiles, notamment pour les statistiques asymétriques ou biaisées. Il corrige le biais et l'asymétrie de la distribution bootstrap.
# BCa CI implementation
bca_ci <- function(data, stat_fn, B = 2000, alpha = 0.05) {
n <- length(data)
theta_hat <- stat_fn(data)
# Bootstrap replicates
boot_vals <- replicate(B, stat_fn(sample(data, n, replace = TRUE)))
# Bias correction z0
z0 <- qnorm(mean(boot_vals < theta_hat))
# Acceleration a (jackknife)
jk <- sapply(seq_len(n), function(i) stat_fn(data[-i]))
num <- sum((mean(jk) - jk)^3)
den <- 6 * (sum((mean(jk) - jk)^2))^(3/2)
a <- num / den
# Adjusted quantiles
z_alpha <- qnorm(c(alpha/2, 1 - alpha/2))
p_adj <- pnorm(z0 + (z0 + z_alpha) / (1 - a * (z0 + z_alpha)))
quantile(boot_vals, p_adj)
}
set.seed(42)
x <- rexp(25, rate = 0.5) # skewed distribution
bca_ci(x, median)Bootstrap pour la régression
Construisez des IC de régression par bootstrap en rééchantillonnant les lignes du tableau de données. Cette méthode gère les erreurs non normales et permet une inférence valide sans hypothèse de normalité.
set.seed(42)
n <- 40
x <- runif(n, 0, 10)
y <- 2 + 1.5 * x + rnorm(n, sd = 2)
df <- data.frame(x = x, y = y)
B <- 3000
# Bootstrap the slope coefficient
boot_slopes <- replicate(B, {
idx <- sample(1:n, n, replace = TRUE)
d_boot <- df[idx, ]
coef(lm(y ~ x, data = d_boot))[2]
})
cat('OLS slope:', round(coef(lm(y~x, data=df))[2], 3), '\n')
cat('Bootstrap SE of slope:', round(sd(boot_slopes), 4), '\n')
cat('Bootstrap 95% CI:', round(quantile(boot_slopes, c(.025,.975)), 3))Nombre de réplications bootstrap
De combien de réplications bootstrap B avez-vous besoin ? Pour les erreurs types : B=200-500. Pour les IC fondés sur les percentiles : B=1000-2000. Pour les IC BCa : B=2000-5000. Un nombre plus élevé est toujours préférable, mais les gains diminuent au-delà de 10 000.
set.seed(42)
x <- rnorm(50, mean = 3, sd = 1)
B_values <- c(100, 500, 1000, 2000, 5000, 10000)
# See how CI width varies with B
results <- sapply(B_values, function(B) {
boot_m <- replicate(B, mean(sample(x, length(x), replace = TRUE)))
q <- quantile(boot_m, c(0.025, 0.975))
q[2] - q[1] # CI width
})
result_df <- data.frame(B = B_values, ci_width = round(results, 4))
print(result_df)
# CI width stabilizes as B increasesBootstrap apparié
Pour les problèmes à deux échantillons, rééchantillonnez les paires (x, y) ensemble, et non x et y indépendamment. Cela préserve la structure de dépendance au sein des paires et fournit des IC valides pour la corrélation et les différences appariées.
set.seed(42)
# Paired data: before/after treatment
before <- c(10, 12, 8, 15, 11, 9, 14, 13)
after <- c(12, 14, 9, 16, 11, 10, 15, 12)
n <- length(before)
B <- 4000
# Bootstrap paired mean difference
boot_diff <- replicate(B, {
idx <- sample(1:n, n, replace = TRUE)
mean(after[idx] - before[idx])
})
observed_diff <- mean(after - before)
cat('Observed mean diff:', observed_diff, '\n')
cat('Bootstrap SE:', round(sd(boot_diff), 4), '\n')
cat('95% CI:', round(quantile(boot_diff, c(0.025, 0.975)), 3))Test d'hypothèse bootstrap
Le bootstrap peut également servir à tester des hypothèses. Pour tester H₀: θ=θ₀, générez la distribution sous l'hypothèse nulle en décalant ou en recentrant les échantillons bootstrap, puis calculez la valeur p comme la fraction dépassant la statistique observée.
set.seed(42)
# Test H0: mean = 0 vs H1: mean != 0
x <- rnorm(30, mean = 0.5, sd = 2)
theta0 <- 0 # null hypothesis
observed_t <- (mean(x) - theta0) / (sd(x) / sqrt(length(x)))
B <- 5000; n <- length(x)
# Shift x to have mean = theta0 under H0
x_centered <- x - mean(x) + theta0
boot_t <- replicate(B, {
x_star <- sample(x_centered, n, replace = TRUE)
(mean(x_star) - theta0) / (sd(x_star) / sqrt(n))
})
p_value <- mean(abs(boot_t) >= abs(observed_t))
cat('Observed t:', round(observed_t, 3), '\n')
cat('Bootstrap p-value:', round(p_value, 4))Présentation du paquet boot
Le paquet boot fournit boot(data, statistic, R) avec des fonctionnalités avancées : IC BCa via boot.ci(), calcul parallèle et échantillonnage stratifié. La fonction statistic reçoit les données et un vecteur d'indices.
# library(boot) # uncomment to use
# The boot() statistic function signature:
# statistic(data, indices) -> scalar or vector
# Example (conceptual - requires boot package):
# mean_stat <- function(data, indices) {
# mean(data[indices])
# }
# results <- boot(data = x, statistic = mean_stat, R = 5000)
# boot.ci(results, type = c('perc', 'bca')) # CIs
# plot(results) # histogram of bootstrap distribution
# Manual equivalent:
set.seed(42)
x <- rnorm(30, mean = 5)
B <- 2000
boot_vals <- replicate(B, mean(sample(x, length(x), replace = TRUE)))
quantile(boot_vals, c(0.025, 0.975))Vérification rapide
Vérifiez votre compréhension du rééchantillonnage bootstrap dans R.
Récapitulatif : rééchantillonnage bootstrap
Points clés : Le bootstrap rééchantillonne les données avec remise à l'aide de sample(x, n, replace=TRUE). Utilisez replicate(B, ...) pour générer B statistiques bootstrap. sd(boot_stats) fournit l'erreur type bootstrap. IC par percentiles : quantile(boot_stats, c(0.025, 0.975)). Utilisez B≥2000 pour les IC. Le paquet boot ajoute les IC BCa et le calcul parallèle. Le bootstrap fonctionne pour toute statistique sans hypothèse distributionnelle.
set.seed(42)
x <- c(3, 5, 7, 2, 9, 4, 6, 8, 1, 10)
n <- length(x); B <- 3000
# Generic bootstrap template:
boot_stat <- replicate(B, {
x_star <- sample(x, n, replace = TRUE)
median(x_star) # replace with any statistic
})
# Summary
cat('Original median:', median(x), '\n')
cat('Bootstrap SE:', round(sd(boot_stat), 3), '\n')
ci <- quantile(boot_stat, c(0.025, 0.975))
cat('95% Percentile CI: [', ci[1], ',', ci[2], ']')Questions Fréquemment Posées
La leçon « Rééchantillonnage bootstrap dans R » est-elle gratuite ?
Oui — le texte complet de « Rééchantillonnage bootstrap dans R » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Rééchantillonnage bootstrap dans R » ?
Implémentez des intervalles de confiance bootstrap avec sample() et remise. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Rééchantillonnage bootstrap dans R » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- set.seed() et reproductibilité
- Générer des distributions aléatoires
- Bases de la simulation de Monte-Carlo
- Rééchantillonnage bootstrap dans R