Reamostragem como um tipo especial de simulação de Monte Carlo

Simulações de Monte Carlo em Python

Izzy Weber

Curriculum Manager, DataCamp

Reamostragem como um tipo especial de simulação de Monte Carlo

 

Simulações de Monte Carlo

  • Amostrar de distribuições de probabilidade
  • Distribuições conhecidas ou assumidas
  • Basear-se em dados históricos ou expertise para escolher as distribuições

 

Reamostragem

  • Amostrar aleatoriamente dos dados existentes
  • Dados existentes são a distribuição de probabilidade implícita
  • Assumir que os dados são representativos
Simulações de Monte Carlo em Python

Métodos de reamostragem

  1. Amostragem sem reposição
    • Usada para sortear uma amostra aleatória
  2. Amostragem com reposição (ou bootstrap)
    • Usada para estimar a distribuição amostral de quase qualquer estatística
  3. Permutação
    • Muitas vezes usada para comparar dois grupos
Simulações de Monte Carlo em Python

Amostragem sem reposição

Sortear aleatoriamente dois estados diferentes entre os seis da Nova Inglaterra

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']
Simulações de Monte Carlo em Python

Bootstrap

Estimar o intervalo de confiança de 95% para a altura média de jogadores da 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]
Simulações de Monte Carlo em Python

Visualização dos resultados do bootstrap

Bibliotecas de visualização:

  • 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")

 

um gráfico de distribuição das alturas simuladas

Simulações de Monte Carlo em Python

Permutação

Estimar o intervalo de confiança de 95% da diferença média entre as alturas de jogadores da NBA e homens nos EUA

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)
Simulações de Monte Carlo em Python

Resultados da permutação

Diferença entre as médias das alturas da NBA e de homens adultos nos EUA:

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

Intervalo de confiança de 95% para a permutação de duas listas aleatórias:

upper = np.quantile(simu_diff, 0.975)
lower = np.quantile(simu_diff, 0.025)
print([lower, upper])
[-10.033333333333331, 10.033333333333331]
Simulações de Monte Carlo em Python

Visualizando os resultados da permutação

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

um gráfico de distribuição das alturas simuladas

Simulações de Monte Carlo em Python

Vamos praticar!

Simulações de Monte Carlo em Python

Preparing Video For Download...