Estoy leyendo el Estadísticas (Freeman, Pisani, Purves) y estoy tratando de reproducir un ejemplo en el que se lanza una moneda digamos 50 veces, se cuenta el número de caras y se repite esto digamos 1.000 veces.
-
En primer lugar, mantuve el número de lanzamientos (tamaño de la muestra) en 1000 y aumenté las repeticiones. Cuantas más repeticiones, mejor se ajustaban los datos a la curva normal.
-
A continuación, probé a mantener fijo el número de repeticiones en 1.000 y aumenté el tamaño de la muestra. Cuanto mayor era el tamaño de la muestra, peor parecía ajustarse la curva normal a los datos. Esto parece ser contradictorio con el ejemplo del libro, que se aproxima mejor a la curva normal a medida que aumenta el tamaño de la muestra.
-
Quería ver qué pasaba si aumentaba el tamaño de la muestra, pero con un mayor número de repeticiones que se fijaron en 10.000. Esto también parece contradecir el libro.
¿Alguna idea de lo que estoy haciendo mal?
Código y gráficos a continuación.
%matplotlib inline
def plot_hist(num_repetitions, num_tosses):
tosses = np.random.randint(0, 2, size=[num_repetitions, num_tosses])
sums = np.apply_along_axis(lambda a: np.sum(a == 1), 1, tosses)
xmin, xmax = min(sums), max(sums)
lnspc = np.linspace(xmin, xmax, len(sums))
m, s = stats.norm.fit(sums) # get mean and standard deviation
pdf_g = stats.norm.pdf(lnspc, m, s) # now get theoretical values in our interval
bins = np.arange(xmin, xmax) - 0.5
step = int((xmax - xmin)/5)
fig, ax = plt.subplots()
_ = ax.hist(sums, bins, edgecolor='black', linewidth=1.2, density=True)
_ = ax.plot(lnspc, pdf_g, label="Norm", color='red')
_ = ax.set_xticks(bins[::step] + 0.5)
_ = ax.set_title('{:,} tosses - {:,} repetitions'.format(num_tosses, num_repetitions))
1. Experimento con un número creciente de repeticiones (tamaño fijo de la muestra de 1000)
plot_hist(1000, 1000)
plot_hist(10000, 1000)
plot_hist(100000, 1000)
2. Experimento de aumento del tamaño de la muestra (fijado en 1000 repeticiones)
plot_hist(1000, 100)
plot_hist(1000, 1000)
plot_hist(1000, 10000)
3. Experimentar aumentando el tamaño de la muestra (fijado en 10.000 repeticiones)
plot_hist(10000, 100)
plot_hist(10000, 1000)
plot_hist(10000, 10000)
plot_hist(10000, 100000)