import pandas as pd #Manejo de datos
import seaborn as sns #Gráficos estadísticos
import matplotlib.pyplot as plt #Gráficos en general
import numpy as np #Manejo de datos matriciales
#Funciones
def bootstrap_replicate_1d(data, func):
"""Generate bootstrap replicate of 1D data."""
bs_sample = np.random.choice(data, len(data))
return func(bs_sample)
def draw_bs_reps(data, func, size=1):
"""Draw bootstrap replicates."""
# Initialize array of replicates: bs_replicates
bs_replicates = np.empty(size)
# Generate replicates
for i in range(size):
bs_replicates[i] = bootstrap_replicate_1d(data, func)
return bs_replicates
Un resumen estadístico
plt.style.use('ggplot')
iris = sns.load_dataset('iris')
print(iris.sample(5))
sepal_length sepal_width petal_length petal_width species
143 6.8 3.2 5.9 2.3 virginica
80 5.5 2.4 3.8 1.1 versicolor
5 5.4 3.9 1.7 0.4 setosa
49 5.0 3.3 1.4 0.2 setosa
81 5.5 2.4 3.7 1.0 versicolor
print(iris.describe())
sepal_length sepal_width petal_length petal_width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000 1.199333
std 0.828066 0.435866 1.765298 0.762238
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
En busca de los intervalos de confianza
sns.boxplot(x='species', y='sepal_length', data=iris)
versicolor_sepal_length = iris.query('species == "versicolor"')['sepal_length']
versicolor_sepal_length.values
sns.boxplot(data=versicolor_sepal_length, x=versicolor_sepal_length.values)
plt.xlabel('Longitud de sépalo, mm')
plt.title('Longitud de sépalo de Iris Versicolor')
plt.show()
versicolor_sepal_length.describe()
vers_replicates = draw_bs_reps(versicolor_sepal_length.values, np.mean, size=10000)
ci = np.percentile(vers_replicates, [2.5, 97.5])
print(ci)
[5.794 6.076]
¿Cómo interpretamos los intervalos de confianza?
plt.hist(vers_replicates, bins=20)
plt.xlabel('Longitud de sépalo, mm')
plt.ylabel('Frecuencias')
plt.title('Réplicas bootstrap de las medias')
plt.axvline(x=ci[0], color='#395d90')
plt.axvline(x=ci[1], color='#395d90')
plt.fill_between([ci[0], ci[1]], 1700, color='#395d90', alpha=0.6)
plt.show()