Praktikum Metode Resampling

Resampling adalah pendekatan statistik nonparametrik yang digunakan untuk mengevaluasi ketidakpastian dalam estimasi statistik. Teknik ini melibatkan pengambilan sampel ulang dari dataset yang tersedia.

1. Bootstrap

Pengantar

Bootstrap adalah metode resampling dengan pengembalian dari dataset asli. Metode ini digunakan untuk memperkirakan distribusi sampling dari suatu statistik tanpa asumsi bentuk distribusi populasi.

Kegunaan Bootstrap:

1. Mengestimasi galat baku (standard error)

2. Menyusun selang kepercayaan (confidence interval)

Prosedur:

  a.  Ambil sampel bootstrap sebanyak B kali dari data asli (dengan pengembalian)

  b.  Hitung statistik untuk tiap sampel

  c.  Analisis hasil dari distribusi bootstrap

Contoh: Estimasi Galat Baku dan Selang Kepercayaan dari Mean

set.seed(123)
data_asli <- c(5, 7, 8, 6, 9, 4, 7, 6, 5, 8)
n <- length(data_asli)
B <- 1000

bootstrap_means <- replicate(B, mean(sample(data_asli, n, replace = TRUE)))

hist(bootstrap_means, breaks = 30, col = "skyblue", main = "Bootstrap Distribution of Mean")

Histogram di atas menampilkan distribusi bootstrap dari rata-rata sampel yang diperoleh dengan mengambil 1.000 sampel ulang (resampling) dari data asli, menggunakan teknik bootstrap. Setiap sampel ulang berukuran sama dengan data asli dan diambil dengan pengembalian (replacement).

se_bootstrap <- sd(bootstrap_means)
se_bootstrap
## [1] 0.4571057

Standar error yang terbentuk dari resampling bootstrap diatas sebesar 0.4620514.

ci <- quantile(bootstrap_means, c(0.025, 0.975))
ci
##  2.5% 97.5% 
##   5.6   7.4

Berdasarkan metode bootstrap, diperoleh selang kepercayaan 95% untuk nilai rata-rata sebesar [5,6; 7,4].

3. Pengujian Hipotesis dengan Bootstrap secara nonparametrik

Bootstrapping dapat digunakan untuk pengujian hipotesis dengan membandingkan statistik yang teramati terhadap distribusi bootstrap berdasarkan hipotesis nol. Biasanya digunakan untuk satu populasi, seperti pengujian mean = nilai tertentu.

Ilustrasi: Misalkan kita ingin menguji:

Data asli: 5, 7, 8, 6, 9, 4, 7, 6, 5, 8

H0: mean = 6 vs H1: mean ≠ 6

  1. Hitung Statistik Teramati

Hitung rata-rata dari data asli sebagai statistik yang diamati: \(\bar{x}_{\text{obs}} = \text{mean(data_asli)}\)

set.seed(123)
data_asli <- c(5, 7, 8, 6, 9, 4, 7, 6, 5, 8)
n <- length(data_asli)
B <- 10000
mu0 <- 6  # nilai hipotesis nol

# Statistik teramati
t_obs <- mean(data_asli)
  1. Bangkitkan Sampel Bootstrap Berdasarkan H₀

    Pusatkan data asli agar memiliki rata-rata sama dengan nilai nol hipotesis (μ₀ = 6). Ini menciptakan sampel bootstrap di bawah asumsi H₀ benar:

\([\text{data_centered} = \text{data_asli} - \bar{x}_{\text{obs}} + \mu_0 ]\)

Kemudian lakukan resampling terhadap data tersebut sebanyak B kali:

data_centered <- data_asli - mean(data_asli) + mu0
bootstrap_null <- replicate(B, mean(sample(data_centered, n, replace = TRUE)))
  1. Hitung P-Value Empiris (Dua Sisi)

    Hitung proporsi nilai rata-rata bootstrap yang berbeda dari μ₀ sebesar atau lebih ekstrem daripada perbedaan yang diamati:

\([\text{p-value} = P\left( \left| \bar{x}_{\text{boot}} - \mu_0 \right| \geq \left| \bar{x}_{\text{obs}} - \mu_0 \right| \right)]\)

p_value <- mean(abs(bootstrap_null - mu0) >= abs(t_obs - mu0))
p_value
## [1] 0.3449

Diperoleh p-value sebesar 0.3373 > 0.05, maka terima H0. sehingga cukup bukti untuk mneyatakan bahwa data memiliki nilai rata-rata sebesar 6 pada taraf 5%.

  1. Visualisasi Distribusi Bootstrap

    Histogram menunjukkan distribusi nilai rata-rata bootstrap di bawah H₀. Dua garis vertikal ditambahkan:

  • Garis hitam: nilai rata-rata dari H₀ (μ₀ = 6)
  • Garis biru: nilai rata-rata dari data asli (statistik teramati)
hist(bootstrap_null, breaks = 40, col = "salmon", main = "Bootstrap Null Distribution")
abline(v = t_obs, col = "blue", lwd = 2, lty = 2)
abline(v = mu0, col = "black", lwd = 2)
legend("topright", legend = c("Mean Observed", "Mean Null"), 
       col = c("blue", "black"), lty = 2, bty = "n")

Gambar diatas menunjukkan bahwa abline biru (rata-rata data bootstrap) tidak jauh berbeda dari abline hitam (rata-rata hipotesis null). Dari hasil pengujian hipotesis menunjukkan bahwa data cenderung memiliki nilai rata-rata yang dirumuskan H0.

Notes: Apabila garis abline biru berada di ekor distribusi dan sangat jauh dari garis abline hitam, hal ini menunjukkan bahwa data cenderung menolak hipotesis nol H0.


2. Cross-Validation

Pengantar

Cross-validation (CV) adalah teknik resampling tanpa pengembalian yang digunakan untuk mengevaluasi performa model prediktif pada data yang belum terlihat.

Tujuan:

  • Menghindari overfitting
  • Menilai generalization error
  • Memilih model terbaik berdasarkan performa validasi

Prosedur Umum:

  1. Partisi data ke dalam K bagian (folds)
  2. Latih model pada K-1 bagian, uji pada 1 bagian
  3. Ulangi proses hingga setiap bagian pernah menjadi data uji
  4. Rata-ratakan metrik evaluasi

K-Fold Cross-Validation (K-CV)

  • Data dibagi menjadi K subset yang hampir sama besar
  • Proses pelatihan dan pengujian dilakukan K kali
  • Umumnya digunakan K = 5 atau 10
  • Hasil metrik evaluasi dirata-ratakan

Kelebihan:

  • Efisien secara komputasi
  • Variansi dan bias yang seimbang

Ilustrasi:

Kode berikut menunjukkan contoh penerapan metode k-fold cross-validation dengan 10 fold untuk mengevaluasi model regresi linier sederhana. Data sintetis dibuat dengan dua variabel, x dan y, di mana y merupakan kombinasi linear dari x dengan tambahan error. Fungsi train dari paket caret digunakan untuk melakukan pelatihan model dengan kontrol validasi silang, sehingga performa model dapat dinilai secara lebih andal dan menghindari overfitting.

library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
set.seed(123)

data <- data.frame(
  x = rnorm(100),
  y = 2 * rnorm(100) + rnorm(100)
)

fit_control <- trainControl(method = "cv", number = 10)
model_cv <- train(y ~ x, data = data, method = "lm", trControl = fit_control)
model_cv
## Linear Regression 
## 
## 100 samples
##   1 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 89, 91, 88, 90, 90, 90, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   2.172308  0.1378184  1.721652
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Penjelasan Syntax:

- Kode di atas menunjukkan penerapan K-Fold Cross Validation sebanyak 10 lipatan (cv, number = 10) menggunakan paket caret.

- Dengan trainControl(method = “cv”, number = 10), data dibagi menjadi 10 subset. Model dilatih sebanyak 10 kali, masing-masing menggunakan 9 bagian untuk pelatihan dan 1 bagian untuk validasi.

- Hasil akhir adalah rata-rata performa dari 10 model, memberikan estimasi yang lebih stabil dan dapat mengurangi risiko overfitting.


Leave-One-Out Cross-Validation (LOOCV)

  • Kasus khusus dari K-CV di mana K = jumlah data
  • Tiap kali, 1 observasi menjadi test, sisanya train
  • Diulang sebanyak N kali

Kelebihan:

  • Bias kecil karena model dilatih dengan hampir semua data

Kekurangan:

  • Sangat mahal secara komputasi untuk dataset besar
  • Variansi tinggi karena hasil evaluasi berdasarkan satu amatan

Perbandingan K-CV vs LOOCV

Aspek K-CV (K=5/10) LOOCV
Bias Lebih tinggi Lebih rendah
Variansi Lebih rendah Lebih tinggi
Waktu komputasi Relatif cepat Sangat lambat untuk data besar
Ukuran data train (K-1) folds N-1 amatan
Ukuran data test 1 folds 1 amatan

3. Monte Carlo Method

Pengantar

Metode Monte Carlo adalah teknik simulasi berdasarkan sampel acak untuk menghitung estimasi numerik. Cocok digunakan saat solusi analitik sulit ditemukan.

Prinsip Utama:

  • Pembangkitan bilangan acak
  • Hukum bilangan besar: rata-rata hasil mendekati nilai ekspektasi saat N besar

Contoh:

Mengestimasi nilai dari integral: \([ \int_2^5 \sin(x^2) \, dx ]\)

Integral ini sulit dihitung secara analitik, sehingga pendekatan Monte Carlo digunakan.

Prosedur Analisis Monte Carlo

  1. Pembangkitan Bilangan Acak: Generate \(N\) sampel acak \(x\) dari distribusi \(U(2,5)\).
set.seed(123)
N <- 10000
a <- 2
b <- 5
x <- runif(N, min = a, max = b)
  1. Evaluasi Fungsi: Hitung nilai fungsi \(g(x) = \sin(x^2)\) untuk setiap sampel \(x\).
g_x <- sin(x^2)
  1. Estimasi Nilai Integral: Estimasi nilai integral adalah rata-rata dari \(g(x)\) dikalikan dengan panjang interval \((b - a)\).
theta_hat <- (b - a) * mean(g_x)
theta_hat
## [1] -0.2753906

Hasil integral menggunakan resampling monte carlo menunjukkan hasil mendekati -0.3099078.

  1. Visualisasi Distribusi: Tampilkan histogram dari nilai \(\sin(x^2)\) untuk melihat penyebaran nilai fungsi.
hist(g_x, breaks = 30, col = "lightblue", main = "Distribusi sin(x^2) dari Uniform(2,5)")

Histogram yang ditampilkan menunjukkan sebaran nilai dari fungsi \(( \sin(x^2))\) ketika \(( x )\) dibangkitkan secara acak dari distribusi Uniform(2,5). Terlihat bahwa nilai \(( \sin(x^2) )\) bervariasi dari sekitar -1 hingga 1.


Kesimpulan

  • Bootstrap digunakan untuk estimasi galat baku dan selang kepercayaan saat distribusi tidak diketahui.
  • Cross-validation digunakan untuk mengevaluasi performa model, dengan K-CV sebagai metode umum dan LOOCV sebagai metode akurat namun mahal.
  • Monte Carlo adalah pendekatan berbasis simulasi acak untuk mengestimasi nilai ekspektasi/statistik dari distribusi kompleks.