Pendahuluan

Metode Bootstrap adalah teknik resampling yang powerful untuk mengestimasi distribusi sampling suatu statistik (seperti mean, median, dll.) tanpa asumsi distribusi teoritis yang kuat. Teknik ini mengambil sampel ulang dengan pengembalian (with replacement) dari data asli sebanyak B kali (biasanya 1000 atau lebih), kemudian menghitung statistik yang diinginkan pada setiap sampel bootstrap.

Tujuan

Pada latihan ini kita akan:

  1. Membuat data simulasi distribusi normal.
  2. Melakukan bootstrap untuk estimasi mean.
  3. Memvisualisasikan hasil bootstrap dan distribusi data asli.

Latihan 1: Pembuatan Data dan Bootstrap Sampling

set.seed(150)
myData <- rnorm(1000, mean = 30, sd = 2.5)

n_bootstrap <- 50
bootstrap_means <- numeric(n_bootstrap)

for (i in 1:n_bootstrap) {
  boot_sample <- sample(myData, size = 1000, replace = TRUE)
  bootstrap_means[i] <- mean(boot_sample)
}

cat("=== Sanity Check Data Asli ===\n")
## === Sanity Check Data Asli ===
print(length(myData))
## [1] 1000
print(mean(myData))
## [1] 29.92068
print(sd(myData))
## [1] 2.475175
cat("\n")
cat("=== Ringkasan Distribusi Bootstrap Means ===\n")
## === Ringkasan Distribusi Bootstrap Means ===
print(summary(bootstrap_means))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   29.75   29.89   29.92   29.93   29.97   30.10
cat("Standard Deviation of Bootstrap Means :", round(sd(bootstrap_means), 5), "\n")
## Standard Deviation of Bootstrap Means : 0.06343

Penjelasan Kode Latihan 1:

  1. set.seed(150): Menjamin hasil yang sama setiap kali dijalankan.
  2. rnorm(1000, 30, 2.5): Membuat data simulasi sesuai instruksi.
  3. sample(..., replace = TRUE): Inti dari bootstrap yaitu pengambilan sampel dengan pengembalian.
  4. bootstrap_means: Vektor hasil mean dari 50 sample bootstrap.

Latihan 2: Visualisasi Distribusi Bootstrap

par(mfrow = c(2, 1), mar = c(4.5, 4.5, 3.5, 1), cex.main = 1.25)

hist(bootstrap_means, col = "#d83737", border = "white", breaks = 15,
     xlab = "Mean Bootstrap", ylab = "Frekuensi",
     main = "Distribusi 50 Bootstrap Sample Means")
abline(v = mean(bootstrap_means), col = "darkred", lwd = 2.5, lty = 2)

hist(myData, col = "#37aad8", border = "white", breaks = 30,
     xlab = "Nilai Observasi", ylab = "Frekuensi",
     main = "Distribusi Data Asli myData (n = 1000)")
abline(v = mean(myData), col = "darkblue", lwd = 2.5, lty = 2)

Penjelasan Kode Visualisasi:

  1. par(mfrow=c(2,1))`: Menggabungkan dua histogram dalam satu halaman.
  2. Warna merah (#d83737) untuk distribusi bootstrap (menunjukkan sampling variability).
  3. Warna biru (#37aad8) untuk distribusi data asli.
  4. Garis putus-putus menandakan nilai mean masing-masing distribusi.
  5. Histogram bootstrap biasanya jauh lebih sempit dibandingkan histogram data asli (efek Central Limit Theorem).

Boxplot Perbandingan Distribusi Bootstrap Means dan Data Asli

# Visualisasi Tambahan 1: Boxplot
boxplot(bootstrap_means, myData, 
        names = c("Bootstrap Means (50 sampel)", "Data Asli (n=1000)"),
        col = c("#d83737", "#37aad8"),
        main = "Boxplot Perbandingan Distribusi Bootstrap Means dan Data Asli",
        ylab = "Nilai")

Plot Urutan Bootstrap Means

plot(1:50, bootstrap_means, type = "o", pch = 19, col = "#d83737",
     main = "Urutan Nilai Mean dari 50 Kali Proses Bootstrap",
     xlab = "Nomor Bootstrap ke-", 
     ylab = "Mean Bootstrap Sample",
     ylim = range(c(29.7, 30.2)))
abline(h = mean(myData), col = "blue", lty = 2)
legend("bottomright", legend = "Mean Data Asli", col = "blue", lty = 2)

QQ Plot dan Distribusi Bootstrap dengan Kurva Normal

par(mfrow = c(1, 2), # 1 baris, 2 kolom
    mar = c(5, 5, 5, 2))
# Plot Kiri: QQ Plot
qqnorm(bootstrap_means, 
       main = "QQ Plot Distribusi Bootstrap Means",
       xlab = "Quantile Teoritis Normal",
       ylab = "Quantile Sampel Bootstrap",
       pch = 19, col = "#2c3e50")
qqline(bootstrap_means, col = "red", lwd = 2.5)

# Plot Kanan: Distribusi Bootstrap + Kurva Normal
hist(bootstrap_means, 
     prob = TRUE,
     col = "#d83737", 
     border = "white",
     breaks = 12,
     main = "Distribusi Bootstrap Kurva Normal",
     xlab = "Mean Bootstrap", 
     ylab = "Density")

curve(dnorm(x, mean(bootstrap_means), sd(bootstrap_means)), 
      add = TRUE, 
      col = "darkblue", 
      lwd = 3)

legend("topright", 
       legend = c("Histogram Bootstrap", "Kurva Normal"), 
       col = c("#d83737", "darkblue"), 
       lwd = c(8, 3), 
       bty = "n", cex = 0.95)

Visualisasi Gabungan

par(mfrow = c(2, 3), 
    mar = c(5, 5, 5, 2), 
    cex.main = 1.1, 
    cex.lab = 1.0)

# Plot 1: Histogram Data Asli
hist(myData, col = "#37aad8", border = "white", breaks = 30,
     main = "1. Distribusi Data Asli (n=1000)", 
     xlab = "Nilai Observasi", ylab = "Frekuensi")
abline(v = mean(myData), col = "darkblue", lwd = 2.5, lty = 2)

# Plot 2: Histogram Bootstrap Means
hist(bootstrap_means, col = "#d83737", border = "white", breaks = 15,
     main = "2. Distribusi Bootstrap Means", 
     xlab = "Mean Bootstrap", ylab = "Frekuensi")
abline(v = mean(bootstrap_means), col = "darkred", lwd = 2.5, lty = 2)

# Plot 3: Boxplot Perbandingan
boxplot(bootstrap_means, myData, 
        names = c("Bootstrap Means", "Data Asli"),
        col = c("#d83737", "#37aad8"),
        main = "3. Boxplot Perbandingan")

# Plot 4: Urutan Bootstrap Means
plot(1:50, bootstrap_means, type = "o", pch = 19, col = "#d83737",
     main = "4. Urutan Mean dari 50 Bootstrap",
     xlab = "Urutan Bootstrap ke-", ylab = "Mean")

# Plot 5: QQ Plot
qqnorm(bootstrap_means, 
       main = "5. QQ Plot Distribusi Bootstrap Means",
       xlab = "Quantile Teoritis Normal", 
       ylab = "Quantile Sampel Bootstrap")
qqline(bootstrap_means, col = "red", lwd = 2.5)

# Plot 6: Distribusi Bootstrap + Kurva Normal
hist(bootstrap_means, prob = TRUE, col = "#d83737", border = "white", breaks = 12,
     main = "6. Distribusi Bootstrap Kurva Normal",
     xlab = "Mean Bootstrap", ylab = "Density")
curve(dnorm(x, mean(bootstrap_means), sd(bootstrap_means)), 
      add = TRUE, col = "darkblue", lwd = 3)

mtext("Visualisasi Lengkap Metode Bootstrap", 
      side = 3, line = -1.5, outer = TRUE, font = 2, cex = 1.3)

Pembahasan

Pada praktikum ini, simulasi data dilakukan dengan membangkitkan 1000 observasi dari distribusi normal dengan parameter populasi mean = 30 dan standar deviasi = 2.5. Proses Bootstrap kemudian diterapkan dengan mengambil 50 sampel ulang berukuran sama (n = 1000) secara acak dengan pengembalian.

Pendekatan ini sesuai dengan prinsip dasar metode Bootstrap yang diperkenalkan oleh Efron (1979), yaitu menggunakan resampling empirik untuk memperkirakan distribusi sampling suatu statistik tanpa bergantung pada asumsi parametrik yang ketat. Teknik ini sangat berguna dalam situasi di mana distribusi populasi tidak diketahui atau sulit memenuhi asumsi klasik statistik parametrik.

Hasil analisis menunjukkan bahwa rata-rata dari distribusi Bootstrap sangat mendekati rata-rata sampel asli. Hal ini membuktikan bahwa estimator mean bersifat unbiased. Selain itu, variabilitas dari distribusi Bootstrap jauh lebih kecil dibandingkan variabilitas data asli. Fenomena ini selaras dengan konsep standard error yang menyatakan bahwa ketidakpastian estimasi akan mengecil seiring dengan bertambahnya ukuran sampel.

Dari segi visualisasi, histogram Bootstrap menunjukkan distribusi yang lebih simetris dan terkonsentrasi dibandingkan histogram data asli. Hal ini merupakan manifestasi dari Central Limit Theorem (Teorema Limit Pusat), di mana distribusi sampling mean cenderung mendekati distribusi normal ketika ukuran sampel cukup besar, meskipun distribusi populasi asli tidak harus normal. Selain itu, boxplot dan QQ-plot semakin memperkuat bukti bahwa estimasi yang dihasilkan melalui Bootstrap cukup stabil dan mendekati normalitas.

Analisis

Analisis terhadap hasil praktikum memberikan beberapa insight penting sebagai berikut:

  1. Ketidakbiasan Estimator Rata-rata Bootstrap (sekitar 29.94) sangat mendekati parameter populasi yang ditentukan (mean = 30). Hal ini menunjukkan bahwa prosedur Bootstrap berhasil mereproduksi sifat tidak bias dari estimator mean.

  2. Ukuran Ketidakpastian (Standard Error) Standar deviasi dari distribusi Bootstrap (sekitar 0.06–0.09) merupakan estimasi empiris dari standard error mean. Nilai ini jauh lebih kecil dibandingkan standar deviasi data asli (sekitar 2.5).

  3. Bentuk Distribusi Sampling Melalui QQ-Plot dan overlay kurva normal pada histogram, terlihat bahwa distribusi Bootstrap means mendekati normalitas.

  4. Perbandingan Visual Boxplot menunjukkan bahwa sebaran Bootstrap jauh lebih sempit, sementara plot urutan Bootstrap menggambarkan fluktuasi antar resampling. Semua visualisasi ini secara kolektif menggambarkan konsep sampling distribution dan sampling variability dengan sangat jelas.

Kesimpulan

Praktikum Metode Bootstrap ini telah berhasil memenuhi seluruh instruksi yang diberikan pada Latihan 1 dan Latihan 2. Melalui pendekatan resampling dengan pengembalian, kita dapat mengestimasi distribusi sampling mean secara empiris tanpa bergantung pada asumsi distribusi teoritis yang kuat. Secara keseluruhan, hasil praktikum menunjukkan bahwa:

  1. Metode Bootstrap merupakan teknik yang robust dan fleksibel untuk mengukur ketidakpastian estimasi statistik, terutama pada data yang tidak memenuhi asumsi parametrik.
  2. Estimator mean dari sampel berukuran 1000 cukup stabil, sebagaimana dibuktikan oleh rata-rata Bootstrap yang mendekati parameter populasi dan standard error yang relatif kecil.
  3. Semakin besar ukuran sampel, semakin kecil variabilitas estimasi (sesuai Hukum Bilangan Besar).
  4. Visualisasi yang komprehensif (histogram, boxplot, QQ-plot, dan line plot) memberikan pemahaman yang lebih baik terhadap konsep sampling distribution.

Praktikum ini tidak hanya memperkuat pemahaman teoritis mengenai Bootstrap, tetapi juga menekankan pentingnya teknik resampling dalam analisis data modern.