Sto leggendo il libro Statistics (Freeman, Pisani, Purves) e sto provando a riprodurre un esempio in cui una moneta viene lanciata diciamo 50 volte, il numero di teste contate e questo viene ripetuto diciamo 1.000 volte.
Innanzitutto, ho mantenuto il numero di lanci (dimensione del campione) a 1000 e aumentato le ripetizioni. Più ripetizioni, migliore è la corrispondenza dei dati con la curva normale.
Quindi, ho provato a mantenere il numero di ripetizioni fissato a 1.000 e aumentato la dimensione del campione. Maggiore è la dimensione del campione, peggio la curva normale sembra adattarsi ai dati. Ciò sembra essere in contraddizione con l'esempio del libro che approssima meglio la curva normale all'aumentare della dimensione del campione.
Volevo vedere cosa sarebbe successo se avessi aumentato la dimensione del campione, ma con un numero maggiore di ripetizioni fissate a 10.000. Questo sembra contraddire anche il libro.
Qualche idea su cosa sto facendo di sbagliato?
Codice e grafici di seguito.
%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. Sperimenta con un numero crescente di ripetizioni (dimensione del campione fissa di 1000)
plot_hist(1000, 1000)
plot_hist(10000, 1000)
plot_hist(100000, 1000)
2. Sperimenta con l'aumento della dimensione del campione (fissato a 1000 ripetizioni)
plot_hist(1000, 100)
plot_hist(1000, 1000)
plot_hist(1000, 10000)
3. Sperimenta con l'aumento della dimensione del campione (fissato a 10.000 ripetizioni)
plot_hist(10000, 100)
plot_hist(10000, 1000)
plot_hist(10000, 10000)
plot_hist(10000, 100000)