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.
Pada latihan ini kita akan:
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:
set.seed(150): Menjamin hasil yang sama setiap kali
dijalankan.rnorm(1000, 30, 2.5): Membuat data simulasi sesuai
instruksi.sample(..., replace = TRUE): Inti dari bootstrap yaitu
pengambilan sampel dengan pengembalian.bootstrap_means: Vektor hasil mean dari 50 sample
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:
#d83737) untuk distribusi
bootstrap (menunjukkan sampling variability).#37aad8) untuk distribusi
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(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)
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)
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)
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 terhadap hasil praktikum memberikan beberapa insight penting sebagai berikut:
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.
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).
Bentuk Distribusi Sampling Melalui QQ-Plot dan overlay kurva normal pada histogram, terlihat bahwa distribusi Bootstrap means mendekati normalitas.
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.
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:
Praktikum ini tidak hanya memperkuat pemahaman teoritis mengenai Bootstrap, tetapi juga menekankan pentingnya teknik resampling dalam analisis data modern.