1. Monte Carlo

Simulasi Monte Carlo adalah teknik statistik yang memanfaatkan distribusi acak untuk memodelkan dan memperkirakan perilaku sistem kompleks yang tidak dapat diselesaikan secara analitik. Teknik ini sangat berguna dalam menguji dan mempelajari distribusi statistik dan estimasi parameter berdasarkan sampel acak dari populasi.

Contoh Aplikasi Monte Carlo:

Contoh 1: Menghitung Probabilitas \(P(Y > 2)\) pada Transformasi Variabel

Masalah: Misalkan \(X \sim N(0,1)\), dan kita ingin menghitung probabilitas bahwa \(Y = 2X\) lebih besar dari 2, yaitu \(P(Y > 2)\).

Algoritma:

  1. Bangkitkan \(X \sim N(0,1)\).
  2. Hitung \(Y = 2X\).
  3. Ulangi langkah 1 dan 2 sebanyak \(N = 100,000\) kali.
  4. Hitung proporsi dari nilai \(Y > 2\).

Aplikasi di R:

set.seed(123)

# Secara empirik
n = 100000
x = rnorm(n)  # Bangkitkan X ~ N(0,1)
y = 2 * x     # Hitung Y = 2X
y1 = ifelse(y > 2, 1, 0)  # Tentukan apakah Y > 2
mean(y1)  # P(Y > 2) secara empirik
## [1] 0.15939
# Secara teoritis
pnorm(2, 0, sqrt(4), lower.tail = FALSE)  # P(Y > 2) dari distribusi hipotetik
## [1] 0.1586553

Penjelasan Kode:

  • rnorm(n): Fungsi ini digunakan untuk membangkitkan \(n\) bilangan acak dari distribusi normal dengan rata-rata 0 dan deviasi standar 1.
  • ifelse(y > 2, 1, 0): Mengecek apakah \(Y > 2\) dan memberi nilai 1 jika benar, dan 0 jika tidak.
  • mean(y1): Menghitung proporsi \(Y > 2\) dari 100,000 percobaan.
  • pnorm(2, 0, 2, lower.tail = FALSE): Menghitung probabilitas \(P(Y > 2)\) dari distribusi normal \(N(0, 4)\), yang merupakan distribusi \(Y\).

Contoh 2: Menghitung Probabilitas pada Distribusi Eksponensial

Masalah: Misalkan kita ingin menghitung probabilitas \(P(X > 1)\) untuk distribusi eksponensial dengan parameter \(\lambda\). Kita akan menghitung probabilitas empiris dan membandingkannya dengan hasil dari distribusi eksponensial teoritis.

Algoritma:

  1. Bangkitkan \(X\) dari distribusi eksponensial \(\text{Exp}(\lambda)\).
  2. Tentukan apakah \(X > 1\).
  3. Ulangi langkah 1 dan 2 sebanyak \(N = 100,000\) kali.
  4. Hitung probabilitas empiris \(P(X > 1)\) dan bandingkan dengan nilai teoritis.

Aplikasi di R:

## Ilustrasi 2: Menghitung P(X > 1) pada distribusi eksponensial
lambda = 2
N = 100000
x = rexp(N, lambda)  # Bangkitkan X ~ Exp(2)
y = ifelse(x > 1, 1, 0)  # Tentukan apakah X > 1
prob_empirical = mean(y)  # Probabilitas empiris
prob_empirical
## [1] 0.13463
## Hasil Empirik: 0.1353

# Membandingkan dengan hasil teoritis
prob_theoretical = pexp(1, rate = lambda, lower.tail = FALSE)  # P(X > 1) dari distribusi teoritis
prob_theoretical
## [1] 0.1353353
## Hasil Teoritis: 0.1353

Penjelasan Kode:

  • rexp(N, lambda): Fungsi ini digunakan untuk membangkitkan \(N\) bilangan acak dari distribusi eksponensial dengan parameter \(\lambda\).
  • ifelse(x > 1, 1, 0): Mengecek apakah \(X > 1\), dan memberi nilai 1 jika benar, dan 0 jika tidak.
  • mean(y): Menghitung proporsi \(X > 1\) dari 100,000 percobaan.
  • pexp(1, rate = lambda, lower.tail = FALSE): Menghitung probabilitas teoritis \(P(X > 1)\) untuk distribusi eksponensial dengan parameter \(\lambda\).

Contoh 3: Uji Hipotesis untuk Distribusi Eksponensial

Masalah: Diberikan data dari distribusi eksponensial dengan \(\lambda = 1\), kita ingin menguji hipotesis \(H_0: \lambda = 1\) menggunakan statistik uji \(t\). Kita akan menghitung p-value dan membuat kesimpulan berdasarkan uji hipotesis.

Algoritma:

  1. Hitung statistik uji \(t_{\text{data}}\) menggunakan data yang diberikan.
  2. Bangkitkan 10.000 sampel acak dari distribusi \(\text{Exp}(\lambda = 1)\).
  3. Hitung statistik uji \(t_{\text{dist}}\) dari sampel yang dibangkitkan.
  4. Ulangi langkah 2 dan 3 sebanyak 10,000 kali untuk mendapatkan distribusi dari \(t_{\text{dist}}\).
  5. Hitung p-value sebagai \(P(t_{\text{dist}} > t_{\text{data}})\).
  6. Tentukan apakah \(p\)-value lebih kecil dari 0.05 (tanggapan terhadap \(H_0\)).

Aplikasi di R:

## Ilustrasi 3: Uji Hipotesis untuk Distribusi Eksponensial
lambda = 1
k = 10000
data1 = c(1.6876, 0.03037, 0.91673, 1.34939, 0.08164, 0.0312, 0.61068, 0.63169, 2.99986, 2.70955)
n = length(data1)
m = mean(data1)
s = sd(data1)
tdata = abs((m - 1 / lambda) / (s / sqrt(n)))

# Bangkitkan distribusi t dari sampel acak
data2 = matrix(rexp(n * k, lambda), k)
m1 = apply(data2, 1, mean)
s1 = apply(data2, 1, sd)
tdist = abs((m1 - 1 / lambda) / (s1 / sqrt(n)))

# Hitung p-value
y = ifelse(tdist > tdata, 1, 0)
pvalue = mean(y)
kesimpulan = ifelse(pvalue < 0.05, "Tolak H0", "Tidak Tolak H0")

# Menampilkan hasil
pvalue
## [1] 0.7691
kesimpulan
## [1] "Tidak Tolak H0"

Penjelasan Kode:

  • matrix(rexp(n * k, lambda), k): Membuat \(k\) sampel dari distribusi eksponensial untuk \(n\) data.
  • apply(data2, 1, mean): Menghitung rata-rata untuk setiap baris dalam matriks (setiap sampel).
  • apply(data2, 1, sd): Menghitung standar deviasi untuk setiap baris dalam matriks.
  • abs((m1 - 1 / lambda) / (s1 / sqrt(n))): Menghitung statistik uji \(t_{\text{dist}}\) untuk setiap distribusi acak.
  • ifelse(tdist > tdata, 1, 0): Mengecek apakah \(t_{\text{dist}}\) lebih besar dari \(t_{\text{data}}\), untuk menghitung p-value.
  • mean(y): Menghitung p-value berdasarkan distribusi \(t_{\text{dist}}\).

Kesimpulan:

  1. Contoh 1: Monte Carlo digunakan untuk menghitung probabilitas bahwa \(Y = 2X\) lebih besar dari 2.
  2. Contoh 2: Menggunakan simulasi Monte Carlo untuk menghitung probabilitas pada distribusi eksponensial dan membandingkan hasil empirik dengan teoritis.
  3. Contoh 3: Monte Carlo digunakan untuk melakukan uji hipotesis terhadap distribusi eksponensial dengan menghitung p-value berdasarkan statistik uji yang dibangkitkan secara acak.

Teknik Monte Carlo dapat digunakan dalam berbagai situasi statistik untuk memperkirakan probabilitas, menguji hipotesis, dan mengestimasi parameter distribusi dari data atau model yang kompleks.


2. Jackknife

Jackknife adalah teknik resampling yang digunakan untuk mengestimasi bias dan variansi dari statistik estimasi, terutama ketika kita memiliki sampel yang terbatas. Teknik ini bekerja dengan cara meninggalkan satu observasi dari sampel pada satu waktu dan menghitung statistik yang diinginkan pada data yang tersisa.

Metode Jackknife merupakan teknik pendugaan yang mirip dengan metode Bootstrap dalam menghitung kesalahan baku. Metode ini dapat dianggap sebagai bentuk validasi silang leave-one-out. Misalkan kita memiliki sampel acak \(\mathbf{x} = (x_1, x_2, \dots, x_n)\). Untuk setiap \(i = 1, 2, \dots, n\), kita membentuk himpunan Jackknife \(\mathbf{x}_{(i)}\), yaitu subset dari \(\mathbf{x}\) yang diperoleh dengan menghapus satu pengamatan \(x_i\). Secara matematis, himpunan ini dapat dinyatakan sebagai:

\([\mathbf{x}_{(i)} = (x_1, x_2, \dots, x_{i-1}, x_{i+1}, \dots, x_n)]\)

Jika suatu parameter \(\theta\) diduga menggunakan \(\hat{\theta} = f_n(\mathbf{x})\), maka untuk setiap subset Jackknife, penduga parameter tersebut dihitung sebagai:

\([\hat{\theta}_{(i)} = f_{n-1}(\mathbf{x}_{(i)}), \quad i = 1, 2, \dots, n]\)

Dengan demikian, metode Jackknife memberikan serangkaian estimasi parameter yang dapat digunakan untuk menghitung kesalahan baku atau bias dari penduga \(\hat{\theta}\). Teknik ini sering digunakan dalam statistik untuk meningkatkan keandalan estimasi serta mengurangi bias dalam analisis data.

Tujuan Jackknife

  • Estimasi Bias dan Variansi: Jackknife digunakan untuk mengukur seberapa akurat estimasi yang diperoleh dari sampel dan untuk memperkirakan standard error (SE) dari estimasi tersebut.
  • Peningkatan Ketelitian Statistik: Dengan cara ini, kita bisa mendapatkan gambaran yang lebih baik mengenai sebaran statistik tanpa perlu menggunakan lebih banyak data.

Cara Kerja Jackknife

  1. Misalkan kita memiliki sampel \(y = (y_1, y_2, \dots, y_n)\) untuk menduga suatu parameter \(\theta\) menggunakan penduga \(\hat{\theta} = f(y)\).
  2. Untuk setiap \(i = 1, 2, \dots, n\), kita membuat Jackknife Samples, yaitu sampel yang didapat dengan menghapus satu data \(y_i\) dari sampel asli. Sampel ini disebut \(y(i)\), yang terdiri dari \(y_1, \dots, y_{i-1}, y_{i+1}, \dots, y_n\).
  3. Statistik dari Jackknife Samples dihitung sebagai \(\hat{\theta}_i = f(y(i))\) untuk setiap \(i\).
  4. Variansi Jackknife dapat dihitung dengan menggunakan nilai statistik dari semua Jackknife Samples.

Contoh

Contoh Kasus: Rasio Item1 dengan Total Item Menggunakan Jackknife

Masalah: Misalkan kita memiliki data tentang dua item yang terjual di beberapa toko. Kita ingin menghitung rasio rata-rata penjualan item1 terhadap total penjualan (item1 + item2) di seluruh toko. Kita akan menggunakan teknik Jackknife untuk menghitung estimasi variansi dan standar error (SE) dari rasio ini.

Algoritma:

  1. Hitung Estimasi Awal (\(\hat{\theta}\)):
    • \(\hat{\theta} = \frac{\text{mean(item1)}}{\text{mean(item1)} + \text{mean(item2)}}\)
  2. Bangkitkan Jackknife Samples:
    • Untuk setiap toko \(i\), buat sampel yang tidak mencakup penjualan di toko \(i\).
  3. Hitung Statistik Jackknife (\(\hat{\theta}_i\)):
    • Hitung rasio rata-rata penjualan item1 terhadap total penjualan untuk setiap Jackknife sample.
  4. Hitung Variansi dan Standar Error (SE) Jackknife:
    • Gunakan statistik Jackknife untuk menghitung variansi dan SE.

Aplikasi di R:

# Data Penjualan di beberapa toko
store = LETTERS[1:6]  # Nama toko
item1 = c(1363, 670, 761, 746, 991, 798)  # Penjualan item1
item2 = c(1087, 571, 518, 612, 770, 655)  # Penjualan item2

# Menggabungkan data menjadi data frame
data1 = data.frame(store, item1, item2)
n = nrow(data1)  # Jumlah toko

# Menghitung estimasi awal (theta_hat)
theta_hat = mean(data1$item1) / (mean(data1$item1) + mean(data1$item2))

# Menyiapkan matriks untuk Jackknife samples
y = matrix(NA, n, n-1)  # Matriks untuk item1 tanpa toko i
x = matrix(NA, n, n-1)  # Matriks untuk item2 tanpa toko i

# Membuat Jackknife samples untuk setiap toko
for (i in 1:n) {
  y[i,] = data1$item1[-i]  # Item1 tanpa toko i
  x[i,] = data1$item2[-i]  # Item2 tanpa toko i
}

# Menghitung rata-rata untuk setiap Jackknife sample
ybar = apply(y, 1, mean)  # Rata-rata item1 untuk setiap Jackknife sample
xbar = apply(x, 1, mean)  # Rata-rata item2 untuk setiap Jackknife sample

# Menghitung statistik Jackknife (theta_i)
theta_i = ybar / (xbar + ybar)

# Menghitung estimasi Jackknife untuk theta (teta_jk)
theta_jk = n * theta_hat - (n - 1) * mean(theta_i)

# Menghitung variansi Jackknife
var_jk = (n - 1) / n * (sum(theta_i^2) - n * mean(theta_i)^2)

# Menghitung standar error (SE) Jackknife
se_jk = sqrt(var_jk)

# Menampilkan hasil estimasi Jackknife
theta_jk  # Estimasi theta dengan Jackknife
## [1] 0.5584068
se_jk     # Standar error dengan Jackknife
## [1] 0.006207102

Penjelasan Kode:

  1. Data Penjualan: Data penjualan dua item di beberapa toko disimpan dalam data1. Kita mengasumsikan bahwa item1 dan item2 adalah penjualan barang yang berbeda di setiap toko.
  2. Estimasi Awal \(\hat{\theta}\): Rasio rata-rata penjualan item1 terhadap total penjualan dihitung menggunakan mean(item1) / (mean(item1) + mean(item2)).
  3. Jackknife Samples: Untuk setiap toko, kita membuat sampel yang tidak mencakup data toko tersebut, baik untuk item1 maupun item2.
  4. Statistik Jackknife (\(\hat{\theta}_i\)): Rata-rata dihitung untuk setiap Jackknife sample untuk mendapatkan \(\hat{\theta}_i\).
  5. Estimasi Jackknife: Estimasi Jackknife untuk \(\hat{\theta}\) dihitung menggunakan rumus \(\hat{\theta}_{JK} = n \hat{\theta} - (n-1) \cdot \text{mean}(\hat{\theta}_i)\).
  6. Variansi dan SE: Variansi Jackknife dihitung dengan rumus variansi klasik dan SE dihitung sebagai akar dari variansi.

Kesimpulan:

Teknik Jackknife adalah metode yang sangat berguna untuk mengestimasi variansi dan bias dari statistik estimasi. Dalam contoh di atas, kita berhasil menghitung rasio rata-rata penjualan item1 terhadap total penjualan di beberapa toko menggunakan Jackknife dan memperkirakan standar error (SE) dari estimasi tersebut.

  • Jackknife memberikan hasil yang lebih robust dan tidak bergantung pada distribusi asumsi yang kuat.
  • Teknik ini sangat berguna untuk memperkirakan ketelitian dari statistik dalam situasi yang kompleks.

3. Bootstrap Resampling

Pengertian Bootstrap

Bootstrap adalah teknik resampling yang digunakan untuk mengatasi masalah yang muncul ketika ukuran sampel kecil, atau ketika tidak ada informasi yang cukup tentang distribusi populasi. Tujuan utama dari metode bootstrap adalah untuk mengestimasi distribusi sampel dari statistik estimasi tanpa memerlukan asumsi kuat tentang distribusi populasi. Teknik ini dapat memberikan hasil yang robust meskipun ukuran sampel sangat kecil.

Ide Dasar Bootstrap:

  1. Membangun Data Semu: Data semu dibangkitkan dengan cara menarik sampel ulang secara acak (dengan pengembalian) dari data asli.

  2. Pengulangan: Sampel semu ini digunakan untuk menghitung statistik estimasi, dan proses ini dilakukan berulang kali (misalnya 1000 kali).

  3. Mempelajari Statistik: Statistik yang dihitung pada setiap iterasi dipelajari untuk memahami distribusi dari statistik tersebut, yang akan digunakan untuk menduga parameter populasi yang lebih baik.

Langkah-Langkah dalam Metode Bootstrap:

  1. Ambil Sampel Asli \(y = (y_1, y_2, \dots, y_n)\) untuk menduga parameter \(\theta\) dengan estimator \(\hat{\theta} = f(y)\).

  2. Simulasikan Sampel Berulang: Buat sampel semu \(y_b^{(i)}\) dari \(y\) sebanyak \(N\) kali, masing-masing dengan ukuran \(n\).

  3. Hitung Statistik \(\hat{\theta}_b^{(i)} = f(y_b^{(i)})\) untuk setiap sampel semu.

  4. Estimasi Parameter Bootstrap: Hitung estimator \(\hat{\theta}_b\) sebagai rata-rata dari semua \(\hat{\theta}_b^{(i)}\).

  5. Estimasi Variansi dan Standar Error: Hitung variansi bootstrap dan standar error dari estimator.

Rumus untuk estimator dan variansi Bootstrap adalah sebagai berikut:

\[ \hat{\theta}_b = \frac{1}{N} \sum_{i=1}^{N} \hat{\theta}_b^{(i)} \]

\[ V_b(\hat{\theta}) = \frac{1}{N-1} \sum_{i=1}^{N} (\hat{\theta}_b^{(i)} - \hat{\theta}_b)^2 \]

Contoh Kasus: Menghitung Rasio Penjualan Item1 dengan Total Penjualan Menggunakan Bootstrap

Masalah:
Diberikan data penjualan untuk dua item di beberapa toko, kita ingin mengestimasi rasio antara penjualan item1 terhadap total penjualan (item1 + item2) menggunakan teknik bootstrap.

Algoritma:

  1. Hitung Estimator Awal (\(\hat{\theta}\)):
  • Estimator \(\hat{\theta}\) untuk rasio adalah \(\hat{\theta} = \frac{\text{mean(item1)}}{\text{mean(item1) + mean(item2)}}\).
  1. Bootstrap Sampel: Buat sampel semu \(y_b^{(i)}\) dan \(x_b^{(i)}\) untuk item1 dan item2 secara acak dari data asli.

  2. Hitung Statistik Bootstrap: Hitung rasio untuk setiap sampel semu \(\hat{\theta}_b^{(i)}\).

  3. Estimasi dengan Bootstrap: Hitung rata-rata rasio bootstrap \(\hat{\theta}_b\), serta variansi dan standar error.

Aplikasi di R:

## Aplikasi Bootstrap untuk Menghitung Rasio Item1 terhadap Total Penjualan
store  = LETTERS[1:6]  # Nama Toko
item1  = c(1363, 670, 761, 746, 991, 798)  # Penjualan item1
item2  = c(1087, 571, 518, 612, 770, 655)  # Penjualan item2

# Membuat Data Frame
data1  = data.frame(store, item1, item2)
n      = nrow(data1)  # Jumlah toko
k      = 1000         # Jumlah iterasi atau pengulangan dalam proses bootstrap

# Membuat sampel bootstrap untuk item1 dan item2
y      = matrix(sample(data1$item1, n * k, replace = TRUE), k)
x      = matrix(sample(data1$item2, n * k, replace = TRUE), k)

# Menghitung rata-rata untuk setiap sampel bootstrap
ybar   = apply(y, 1, mean)  # Rata-rata item1 untuk setiap sampel bootstrap
xbar   = apply(x, 1, mean)  # Rata-rata item2 untuk setiap sampel bootstrap

# Menghitung rasio bootstrap (teta_i)
teta_i = ybar / (xbar + ybar)

# Menghitung rata-rata rasio bootstrap (teta_b)
teta_b = mean(teta_i)

# Menghitung variansi bootstrap
var_b  = (sum(teta_i^2) - (k * teta_b^2)) / (k - 1)

# Menghitung standar error (SE) bootstrap
se_b   = sqrt(var_b)

# Menampilkan hasil estimasi rasio bootstrap dan SE
teta_b  # Estimasi rasio dengan bootstrap
## [1] 0.5578302
se_b    # Standar error dengan bootstrap
## [1] 0.0374347

Penjelasan Kode:

  1. Data Penjualan: Data penjualan item1 dan item2 di beberapa toko disusun dalam data frame data1.

  2. Sample Bootstrap: Fungsi sample() digunakan untuk membuat sampel semu (bootstrap samples) dari data asli untuk item1 dan item2.

  3. Rata-rata Bootstrap: Fungsi apply() digunakan untuk menghitung rata-rata item1 dan item2 dari setiap sampel semu.

  4. Rasio Bootstrap: Rasio antara rata-rata item1 dan total penjualan dihitung untuk setiap sampel semu, dan hasilnya digunakan untuk mengestimasi rasio yang lebih akurat.

  5. Estimasi Variansi dan SE: Variansi bootstrap dihitung menggunakan rumus variansi klasik, dan standar error dihitung sebagai akar dari variansi.

Kesimpulan:

  1. Bootstrap memberikan estimasi yang lebih akurat untuk parameter yang sulit dihitung, terutama ketika ukuran sampel kecil atau distribusi populasi tidak diketahui.

  2. Rasio penjualan antara item1 dan total penjualan dihitung menggunakan teknik Bootstrap, dan estimasi standar error (SE) digunakan untuk memahami seberapa tepat rasio tersebut.

  3. Dengan menggunakan Bootstrap, kita dapat mendapatkan hasil yang lebih robust dan efisien untuk menduga parameter populasi meskipun hanya dengan sedikit data.