Bootstrap adalah metode resampling yang mengambil sampel acak dengan pengembalian dari data yang ada, diulang berkali-kali. Tujuannya adalah mengestimasi distribusi sampling dari suatu statistik (seperti mean) tanpa asumsi distribusi tertentu.
Tugas ini terdiri dari dua latihan:
set.seed(150)
# Buat data asli: 1000 observasi normal, mean=30, sd=2.5
myData2 <- rnorm(1000, mean = 30, sd = 2.5)
cat("Jumlah observasi :", length(myData2), "\n")
## Jumlah observasi : 1000
cat("Mean :", round(mean(myData2), 4), "\n")
## Mean : 29.9207
cat("Standar Deviasi :", round(sd(myData2), 4), "\n")
## Standar Deviasi : 2.4752
Nilai mean mendekati 30 dan SD mendekati 2,5 — sesuai dengan
parameter yang dimasukkan ke rnorm(). Perbedaan kecil
muncul karena sifat acak dari proses pembangkitan data.
n_sampel <- 50
ukuran_sampel <- length(myData2)
vektor_mean <- numeric(n_sampel) # vektor untuk menyimpan hasil
for (i in 1:n_sampel) {
sampel_i <- sample(myData2, size = ukuran_sampel, replace = TRUE)
vektor_mean[i] <- mean(sampel_i)
}
cat("=== Isi Vektor Rata-Rata (50 nilai) ===\n")
## === Isi Vektor Rata-Rata (50 nilai) ===
print(round(vektor_mean, 4))
## [1] 29.9122 29.9511 29.8895 29.8387 29.8372 29.9644 29.8800 29.9810 29.8836
## [10] 29.8876 29.9222 29.8876 29.9202 29.8849 29.9030 29.9153 29.8711 29.8788
## [19] 30.0219 29.9459 29.9592 29.7464 29.9237 29.9411 29.8353 30.0110 29.9935
## [28] 30.0615 29.9701 29.9234 29.8469 29.9226 29.9114 29.9988 29.9690 29.9060
## [37] 29.8656 29.9739 29.9678 29.9775 29.8780 30.0148 30.1023 29.9179 29.8981
## [46] 29.9912 29.9383 29.8596 29.9018 29.9593
cat("Rata-rata dari 50 mean sampel :", round(mean(vektor_mean), 4), "\n")
## Rata-rata dari 50 mean sampel : 29.9268
cat("SD dari 50 mean sampel :", round(sd(vektor_mean), 4), "\n")
## SD dari 50 mean sampel : 0.0634
cat("Min :", round(min(vektor_mean), 4), "\n")
## Min : 29.7464
cat("Max :", round(max(vektor_mean), 4), "\n")
## Max : 30.1023
Rata-rata dari 50 nilai rata-rata sampel sangat mendekati mean populasi (30), menunjukkan bahwa bootstrap berhasil mereplikasi distribusi sampling dari mean.
par(mfrow = c(1, 2))
# Histogram 1: Distribusi rata-rata dari Latihan 1
hist(vektor_mean,
breaks = 15,
col = "#37aad8",
border = "white",
main = "Distribusi Rata-Rata\n50 Sampel Bootstrap",
xlab = "Rata-Rata Sampel",
ylab = "Frekuensi")
abline(v = mean(vektor_mean), col = "red", lwd = 2, lty = 2)
legend("topright",
legend = paste("Mean =", round(mean(vektor_mean), 2)),
col = "red", lty = 2, lwd = 2, cex = 0.85)
# Histogram 2: Distribusi data asli
hist(myData2,
breaks = 30,
col = "#f4a261",
border = "white",
main = "Distribusi Data Asli\n(1000 Observasi)",
xlab = "Value",
ylab = "Frekuensi")
abline(v = mean(myData2), col = "red", lwd = 2, lty = 2)
legend("topright",
legend = paste("Mean =", round(mean(myData2), 2)),
col = "red", lty = 2, lwd = 2, cex = 0.85)
par(mfrow = c(1, 1))
perbandingan <- data.frame(
Aspek = c("Pusat distribusi (Mean)",
"Sebaran (SD)",
"Bentuk"),
Data_Asli = c(
round(mean(myData2), 4),
round(sd(myData2), 4),
"Normal, lebih lebar"
),
Rata_Rata_Sampel = c(
round(mean(vektor_mean), 4),
round(sd(vektor_mean), 4),
"Normal, jauh lebih sempit"
)
)
knitr::kable(perbandingan,
col.names = c("Aspek", "Data Asli (myData2)", "Rata-Rata Sampel Bootstrap"),
align = "lcc")
| Aspek | Data Asli (myData2) | Rata-Rata Sampel Bootstrap |
|---|---|---|
| Pusat distribusi (Mean) | 29.9207 | 29.9268 |
| Sebaran (SD) | 2.4752 | 0.0634 |
| Bentuk | Normal, lebih lebar | Normal, jauh lebih sempit |
Histogram rata-rata sampel (kiri) jauh lebih sempit dibanding histogram data asli (kanan). Fenomena ini dapat dijelaskan melalui rumus Standar Error:
\[SE = \frac{SD}{\sqrt{n}}\]