Rumusan Masalah: Apakah statistik dari sampel kecil bisa menduga parameter populasi dengan akurat?
Dalam percobaan ini, akan dibuktikan dua hal:
Konteks kasus: nilai ujian mahasiswa yang menyebar Normal dengan rata-rata 75 dan standar deviasi 10.
library(ggplot2)
set.seed(2024)
mu_pop <- 75
sigma_pop <- 10
ragam_pop <- sigma_pop^2
n <- 30
k <- 1000
populasi <- rnorm(10000, mean = mu_pop, sd = sigma_pop)
cat("Rata-rata populasi :", round(mean(populasi), 2), "\n")
## Rata-rata populasi : 74.94
cat("Ragam populasi :", round(var(populasi), 2), "\n")
## Ragam populasi : 100.05
Di sini kita ambil sampel 30 mahasiswa sebanyak 1000 kali, lalu hitung 3 statistik dari tiap sampel.
hasil_xbar <- numeric(k)
hasil_s2_bias <- numeric(k)
hasil_s2_unbias <- numeric(k)
for (i in 1:k) {
sampel <- sample(populasi, size = n, replace = TRUE)
xbar <- mean(sampel)
s2_bias <- sum((sampel - xbar)^2) / n
s2_unbias <- var(sampel)
hasil_xbar[i] <- xbar
hasil_s2_bias[i] <- s2_bias
hasil_s2_unbias[i] <- s2_unbias
}
cat("E(x̄) =", round(mean(hasil_xbar), 4),
" --> μ populasi =", mu_pop, "\n")
## E(x̄) = 74.9275 --> μ populasi = 75
cat("E(S² bias) =", round(mean(hasil_s2_bias), 4),
" --> σ² populasi =", ragam_pop, "\n")
## E(S² bias) = 96.5223 --> σ² populasi = 100
cat("E(S² tak bias) =", round(mean(hasil_s2_unbias), 4),
" --> σ² populasi =", ragam_pop, "\n")
## E(S² tak bias) = 99.8507 --> σ² populasi = 100
cat("============= Perbandingan Penduga vs Nilai Populasi =============\n")
## ============= Perbandingan Penduga vs Nilai Populasi =============
cat("Penduga | Nilai Populasi | Hasil Simulasi | Status\n")
## Penduga | Nilai Populasi | Hasil Simulasi | Status
cat("---------------------|----------------|----------------|----------\n")
## ---------------------|----------------|----------------|----------
cat("Rata-rata (x̄) |", mu_pop, " |", round(mean(hasil_xbar), 4), " | Tak Bias\n")
## Rata-rata (x̄) | 75 | 74.9275 | Tak Bias
cat("Ragam pembagi n |", ragam_pop, " |", round(mean(hasil_s2_bias), 4), " | BIAS\n")
## Ragam pembagi n | 100 | 96.5223 | BIAS
cat("Ragam pembagi n-1 |", ragam_pop, " |", round(mean(hasil_s2_unbias), 4), " | Tak Bias\n")
## Ragam pembagi n-1 | 100 | 99.8507 | Tak Bias
Histogram ini menunjukkan sebaran 1000 nilai rata-rata sampel. Kalau berpusat di μ = 75, berarti x̄ adalah penduga tak bias.
hist(hasil_xbar, breaks = 40, col = "lightblue",
main = "Sebaran 1000 Rata-rata Sampel (x̄)",
xlab = "Nilai x̄", ylab = "Frekuensi")
abline(v = mu_pop, col = "red", lwd = 2, lty = 2)
abline(v = mean(hasil_xbar), col = "blue", lwd = 2)
legend("topright",
legend = c("μ populasi (75)", "Rata-rata simulasi"),
col = c("red", "blue"), lwd = 2, lty = c(2, 1))
Plot ini membandingkan dua penduga ragam. Yang bias akan berpusat di bawah garis σ² = 100.
par(mfrow = c(1, 2))
hist(hasil_s2_bias, breaks = 40, col = "salmon",
main = "Ragam Pembagi n (Bias)",
xlab = "Nilai Ragam", ylab = "Frekuensi")
abline(v = ragam_pop, col = "black", lwd = 2, lty = 2)
hist(hasil_s2_unbias, breaks = 40, col = "lightblue",
main = "Ragam Pembagi n-1 (Tak Bias)",
xlab = "Nilai Ragam", ylab = "Frekuensi")
abline(v = ragam_pop, col = "black", lwd = 2, lty = 2)
par(mfrow = c(1, 1))
Rata-rata sampel (x̄):* Dari 1000 pengambilan sampel, rata-rata x̄ sangat mendekati μ = 75. Ini membuktikan bahwa x̄ adalah penduga tak bias bagi μ.
Ragam pembagi n: Hasilnya selalu sedikit lebih kecil dari σ² = 100 karena pembagi n menyebabkan underestimasi. Penduga ini bias.
Ragam pembagi n-1: Hasilnya sangat mendekati σ² = 100. Koreksi
pembagi (n-1) berhasil menghilangkan bias. Itulah kenapa fungsi
var() di R menggunakan (n-1) secara default.
Dari 1000 ulangan simulasi dengan ukuran sampel n=30, dapat diraih kesimpulan:
Kesimpulan: penggunaan pembagi n-1 pada perhitungan ragam sampel bukan sekadar konvensi, melainkan koreksi matematis yang terbukti secara empiris menghasilkan estimasi yang jauh lebih akurat terhadap ragam populasi sesungguhnya.