Resampling sebagai jenis khusus simulasi Monte Carlo

Simulasi Monte Carlo di Python

Izzy Weber

Curriculum Manager, DataCamp

Resampling sebagai jenis khusus simulasi Monte Carlo

 

Simulasi Monte Carlo

  • Sampling dari distribusi probabilitas
  • Distribusi diketahui atau diasumsikan
  • Gunakan data historis atau keahlian untuk memilih distribusi

 

Resampling

  • Sampling acak dari data yang ada
  • Data yang ada = distribusi probabilitas implisit
  • Asumsikan data representatif
Simulasi Monte Carlo di Python

Metode resampling

  1. Sampling tanpa pengembalian
    • Untuk mengambil sampel acak
  2. Sampling dengan pengembalian (bootstrap)
    • Untuk mengestimasi distribusi sampling hampir semua statistik
  3. Permutasi
    • Sering untuk membandingkan dua grup
Simulasi Monte Carlo di Python

Sampling tanpa pengembalian

Ambil dua negara bagian berbeda secara acak dari enam negara bagian di New England

import random
def two_random_ne_states():

ne_states=["Maine", "Vermont", "New Hampshire", "Massachusetts", "Connecticut", "Rhode Island"]
return(random.sample(ne_states, 2))

 

 

two_random_ne_states()
two_random_ne_states()
['Massachusetts', 'Connecticut']
['New Hampshire', 'Maine']
Simulasi Monte Carlo di Python

Bootstrap

Perkirakan CI 95% untuk rata-rata tinggi pemain NBA

import random
import numpy as np

nba_heights = [196, 191, 198, 216, 188, 185, 211, 201,
               188, 191, 201, 208, 191, 183, 196]
simu_heights = []

for i in range(1000): bootstrap_sample = random.choices(nba_heights, k=15) simu_heights.append(np.mean(bootstrap_sample))
upper = np.quantile(simu_heights, 0.975) lower = np.quantile(simu_heights, 0.025) print([np.mean(simu_heights), lower, upper])
[196.26666666666668, 191.8, 201.2]
Simulasi Monte Carlo di Python

Visualisasi hasil bootstrap

Library plotting:

  • seaborn
  • matplotlib
import seaborn as sns
import matplotlib.pyplot as plt

sns.displot(simu_heights)
plt.axvline(191.8, color="red")
plt.axvline(201.2, color="red")
plt.axvline(196.3, color="green")

 

plot distribusi tinggi hasil simulasi

Simulasi Monte Carlo di Python

Permutasi

Perkirakan CI 95% untuk selisih rata-rata tinggi pemain NBA vs pria AS

us_heights = [165, 185, 179, 187, 193, 180, 178, 179, 171, 176, 
              169, 160, 140, 199, 176, 185, 175, 196, 190, 176]
nba_heights = [196, 191, 198, 216, 188, 185, 211, 201, 188, 191, 201, 208, 191, 183, 196]

all_heights = us_heights + nba_heights
simu_diff = [] for i in range(1000): perm_sample = np.random.permutation(all_heights) perm_nba, perm_adult = perm_sample[0:15], perm_sample[15:35]
perm_diff = np.mean(perm_nba) - np.mean(perm_adult) simu_diff.append(perm_diff)
Simulasi Monte Carlo di Python

Hasil permutasi

Selisih rata-rata tinggi pemain NBA dan pria dewasa AS:

np.mean(nba_heights) - np.mean(us_adult_height)
18.31666666666669

CI 95% untuk permutasi dua daftar acak:

upper = np.quantile(simu_diff, 0.975)
lower = np.quantile(simu_diff, 0.025)
print([lower, upper])
[-10.033333333333331, 10.033333333333331]
Simulasi Monte Carlo di Python

Visualisasi hasil permutasi

sns.distplot(simu_diff)
plt.axvline(-10.03, color="red")
plt.axvline(10.03, color="red")
plt.axvline(18.32, color="green")

plot distribusi tinggi hasil simulasi

Simulasi Monte Carlo di Python

Ayo berlatih!

Simulasi Monte Carlo di Python

Preparing Video For Download...