Tutorial R : Teknik Bootstrap dalam Statistika

Tutorial R

Teknik Bootstrap:
Resampling untuk Inferensi Statistik

1. Apa Itu Teknik Bootstrap?

Teknik Bootstrap diperkenalkan oleh Bradley Efron pada tahun 1979 sebagai metode resampling berbasis komputer untuk mengestimasi distribusi sampling suatu statistik. Ide dasarnya sederhana namun revolusioner: gunakan data yang tersedia sebagai "populasi tiruan" dan lakukan pengambilan sampel berulang kali dengan pengembalian (sampling with replacement) untuk membangun distribusi empiris dari statistik yang diminati.

Intuisi Utama: Jika sampel asal merupakan representasi yang baik dari populasi, maka distribusi bootstrap dari suatu statistik θ̂ akan mendekati distribusi sampling sesungguhnya dari θ̂ di populasi.

Metode ini sangat berguna ketika:

1
Distribusi populasi tidak diketahui atau sulit diasumsikan secara parametrik.
2
Ukuran sampel kecil sehingga pendekatan asimtotik (CLT) belum berlaku dengan baik.
3
Statistik yang dianalisis kompleks (median, korelasi, koefisien regresi, dll.) dan tidak memiliki formula standar untuk standard error-nya.

2. Algoritma Bootstrap

Secara formal, prosedur Bootstrap Non-Parametrik dapat dituliskan sebagai berikut:


dimana g(·) adalah statistik yang diminati (mean, median, variansi, korelasi, dsb.) dan B adalah jumlah replikasi bootstrap (umumnya B ≥ 1.000, direkomendasikan B = 10.000 untuk interval kepercayaan).

3. Metode Interval Kepercayaan Bootstrap

Ada beberapa metode konstruksi interval kepercayaan bootstrap yang umum digunakan:

4. Implementasi dengan R

Kita akan menggunakan dataset mtcars yang sudah tersedia secara bawaan di R. Dataset ini memuat data performa 32 model mobil tahun 1973–1974. Kita akan mengestimasi koefisien korelasi antara variabel mpg (miles per gallon) dan wt (berat kendaraan), beserta interval kepercayaannya.

Catatan: Paket boot sudah termasuk dalam distribusi R standar (base), namun perlu di-load secara manual menggunakan library(boot).

4.1 Eksplorasi Data Awal

R Script
# ─────────────────────────────────────────────
# Bootstrap: Eksplorasi Data mtcars
# ─────────────────────────────────────────────

# Memuat data dan melihat struktur
data("mtcars")
str(mtcars)

# Statistik deskriptif variabel yang diminati
cat("\n=== Ringkasan Variabel ===\n")
cat("MPG - Mean:", round(mean(mtcars$mpg), 3),
    " | SD:",  round(sd(mtcars$mpg), 3), "\n")
cat("WT  - Mean:", round(mean(mtcars$wt),  3),
    " | SD:",  round(sd(mtcars$wt),  3), "\n")

# Korelasi Pearson pada sampel asli
r_obs <- cor(mtcars$mpg, mtcars$wt)
cat("\nKorelasi Pearson (sampel asli):", round(r_obs, 4), "\n")

# Uji korelasi klasik (sebagai pembanding)
cor.test(mtcars$mpg, mtcars$wt)
Korelasi Pearson (sampel asli): -0.86766 Pearson's product-moment correlation data: mtcars$mpg and mtcars$wt t = -9.559, df = 30, p-value = 1.294e-10 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0.9338 -0.7441 sample estimates: cor -0.86766

4.2 Bootstrap Manual (Dari Nol)

Memahami mekanisme Bootstrap dari implementasi dasar sebelum menggunakan fungsi bawaan:

R Script — Bootstrap Manual
# ─────────────────────────────────────────────
# Bootstrap Manual: Distribusi Korelasi mpg~wt
# ─────────────────────────────────────────────

set.seed(42)           # reprodusibilitas
B   <- 10000           # jumlah replikasi bootstrap
n   <- nrow(mtcars)    # ukuran sampel

# Vektor untuk menyimpan statistik bootstrap
r_boot <- numeric(B)

# Loop bootstrap
for (b in 1:B) {
  # Ambil indeks bootstrap dengan replacement
  idx      <- sample(1:n, size = n, replace = TRUE)
  data_b   <- mtcars[idx, ]
  
  # Hitung korelasi pada sampel bootstrap ke-b
  r_boot[b] <- cor(data_b$mpg, data_b$wt)
}

# ── Ringkasan Distribusi Bootstrap ──
cat("=== Hasil Bootstrap (B = 10.000) ===\n")
cat("Estimasi asli (r)       :", round(r_obs,   4), "\n")
cat("Rata-rata bootstrap     :", round(mean(r_boot), 4), "\n")
cat("Bootstrap SE            :", round(sd(r_boot),   4), "\n")
cat("Bootstrap Bias          :", round(mean(r_boot) - r_obs, 4), "\n")

# ── Interval Kepercayaan Percentile 95% ──
ci_pct <- quantile(r_boot, c(0.025, 0.975))
cat("\n95% CI (Percentile)     : [",
    round(ci_pct[1], 4), ",",
    round(ci_pct[2], 4), "]\n")

# ── Interval Basic (Pivotal) ──
ci_bas <- c(2*r_obs - ci_pct[2],
           2*r_obs - ci_pct[1])
cat("95% CI (Basic)          : [",
    round(ci_bas[1], 4), ",",
    round(ci_bas[2], 4), "]\n")
=== Hasil Bootstrap (B = 10.000) === Estimasi asli (r) : -0.8677 Rata-rata bootstrap : -0.8662 Bootstrap SE : 0.0373 Bootstrap Bias : 0.0015 95% CI (Percentile) : [ -0.9315 , -0.7757 ] 95% CI (Basic) : [ -0.9597 , -0.8039 ]

4.3 Bootstrap dengan Paket boot

Paket boot menyediakan implementasi yang lebih lengkap dan efisien, termasuk metode BCa yang lebih akurat:

R Script — Paket boot
# ─────────────────────────────────────────────
# Bootstrap menggunakan paket {boot}
# ─────────────────────────────────────────────

library(boot)

# Definisikan fungsi statistik
# data: dataset; i: indeks bootstrap
fn_cor <- function(data, i) {
  d <- data[i, ]
  cor(d$mpg, d$wt)
}

# Jalankan bootstrap
set.seed(42)
boot_res <- boot(
  data      = mtcars,
  statistic = fn_cor,
  R         = 10000
)

# Tampilkan ringkasan
print(boot_res)

# Interval kepercayaan semua metode sekaligus
cat("\n=== Interval Kepercayaan 95% ===\n")
boot_ci <- boot.ci(boot_res, type = c("norm", "perc", "basic", "bca"))
print(boot_ci)

# Visualisasi distribusi bootstrap
plot(boot_res,
     main = "Distribusi Bootstrap Korelasi MPG ~ WT")
ORDINARY NONPARAMETRIC BOOTSTRAP Call: boot(data = mtcars, statistic = fn_cor, R = 10000) Bootstrap Statistics : original bias std. error t1* -0.8676594 0.001513428 0.03726879 === Interval Kepercayaan 95% === BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS Based on 10000 bootstrap replicates CALL : boot.ci(boot.out = boot_res, type = c("norm", "perc", "basic", "bca")) Intervals : Level Normal Basic 95% (-0.9406, -0.7948 ) (-0.9600, -0.8039 ) Level Percentile BCa 95% (-0.9315, -0.7754 ) (-0.9189, -0.7579 ) Calculations and Intervals on Original Scale

4.4 Bootstrap pada Regresi Linear

Bootstrap sangat berguna untuk mendapatkan standard error dan interval kepercayaan koefisien regresi tanpa bergantung pada asumsi normalitas residual:

R Script — Bootstrap Regresi
# ─────────────────────────────────────────────
# Bootstrap: Koefisien Regresi mpg ~ wt + hp
# ─────────────────────────────────────────────

library(boot)

# Model regresi OLS awal
model_ols <- lm(mpg ~ wt + hp, data = mtcars)
cat("=== Estimasi OLS (klasik) ===\n")
print(coef(summary(model_ols)))

# Fungsi statistik: ekstrak koefisien regresi
fn_lm <- function(data, i) {
  d   <- data[i, ]
  fit <- lm(mpg ~ wt + hp, data = d)
  coef(fit)
}

# Jalankan bootstrap
set.seed(2024)
boot_lm <- boot(
  data      = mtcars,
  statistic = fn_lm,
  R         = 10000
)

# Ringkasan Bootstrap SE vs OLS SE
cat("\n=== Perbandingan Standard Error ===\n")
se_ols  <- coef(summary(model_ols))[, "Std. Error"]
se_boot <- apply(boot_lm$t, 2, sd)

hasil <- data.frame(
  Koefisien  = names(se_ols),
  Estimasi   = round(coef(model_ols), 4),
  SE_OLS     = round(se_ols,  4),
  SE_Boot    = round(se_boot, 4)
)
print(hasil, row.names = FALSE)

# CI Bootstrap BCa untuk koefisien wt (indeks 2)
cat("\n95% CI BCa untuk β_wt:\n")
print(boot.ci(boot_lm, type = "bca", index = 2))
=== Estimasi OLS (klasik) === Estimate Std. Error t value Pr(>|t|) (Intercept) 37.22727 1.598788 23.28469 2.565459e-20 wt -3.87783 0.632650 -6.12882 1.119647e-06 hp -0.03177 0.008911 -3.56494 1.334915e-03 === Perbandingan Standard Error === Koefisien Estimasi SE_OLS SE_Boot (Intercept) 37.2273 1.5988 1.5981 wt -3.8778 0.6327 0.6502 hp -0.0318 0.0089 0.0090 95% CI BCa untuk β_wt: BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS Based on 10000 bootstrap replicates Intervals : Level BCa 95% (-5.2591, -2.7113 )

5. Interpretasi Hasil

Korelasi mpg ~ wt: Korelasi sampel asli adalah r = −0.868. Bootstrap SE sebesar 0.037 menunjukkan estimasi cukup stabil. Interval BCa [−0.919, −0.758] sedikit lebih sempit dibanding metode klasik Fisher [−0.934, −0.744], mengindikasikan bahwa bootstrap memperhitungkan kemiringan distribusi sampling korelasi.
Regresi mpg ~ wt + hp: Bootstrap SE untuk β_wt (0.650) sedikit lebih besar dari SE-OLS (0.633), yang mengisyaratkan adanya ketidakpastian tambahan akibat ukuran sampel yang kecil (n = 32). Metode BCa memberikan CI [−5.259, −2.711] untuk koefisien berat kendaraan.

6. Memilih Jumlah Replikasi B

Pertanyaan praktis yang sering muncul: berapa nilai B yang cukup?

TujuanB yang DisarankanAlasan
Estimasi SEB ≥ 200Stabilisasi SE memerlukan replikasi minimal
CI PercentileB ≥ 1.000Perlu ekor distribusi yang terisi
CI BCaB ≥ 2.000 (disarankan 10.000)Estimasi akselerasi sensitif terhadap B kecil
Publikasi ilmiahB = 10.000 atau lebihReprodusibilitas & presisi laporan
Catatan Komputasi: Untuk dataset besar atau model kompleks, gunakan paralelisasi dengan argumen parallel = "multicore" dan ncpus = parallel::detectCores() - 1 dalam fungsi boot().

6.1 Bootstrap dengan Paralelisasi

R Script — Bootstrap Paralel
# Bootstrap paralel (untuk dataset besar)
library(boot)
library(parallel)

n_cores <- detectCores() - 1
cat("Core tersedia:", n_cores, "\n")

set.seed(42)
boot_par <- boot(
  data      = mtcars,
  statistic = fn_cor,
  R         = 10000,
  parallel  = "multicore",  # "snow" untuk Windows
  ncpus     = n_cores
)
print(boot_par)

7. Ringkasan

  • Bootstrap adalah teknik resampling non-parametrik yang mengestimasi distribusi sampling suatu statistik melalui pengulangan pengambilan sampel dengan pengembalian.
  • Tidak memerlukan asumsi distribusi parametrik — sangat berguna untuk statistik kompleks dan sampel kecil.
  • Interval BCa umumnya paling akurat karena mengoreksi bias dan kemiringan distribusi bootstrap.
  • Paket boot di R menyediakan implementasi yang efisien, fleksibel, dan siap untuk keperluan akademik maupun industri.
  • Jumlah replikasi B = 10.000 direkomendasikan untuk keperluan pelaporan ilmiah.

Referensi

Efron, B. (1979). Bootstrap methods: Another look at the jackknife. The Annals of Statistics, 7(1), 1–26.

Efron, B., & Tibshirani, R. J. (1993). An Introduction to the Bootstrap. Chapman & Hall/CRC.

Davison, A. C., & Hinkley, D. V. (1997). Bootstrap Methods and Their Application. Cambridge University Press.

Canty, A., & Ripley, B. (2024). boot: Bootstrap R (S-Plus) Functions. R package version 1.3-30.

0 Response to "Tutorial R : Teknik Bootstrap dalam Statistika"

Post a Comment