Estou lendo o livro Statistics (Freeman, Pisani, Purves) e estou tentando reproduzir um exemplo em que uma moeda é lançada, digamos 50 vezes, o número de cabeças contadas e isso é repetido, 1.000 vezes.
Primeiro, mantive o número de lançamentos (tamanho da amostra) em 1000 e aumentei as repetições. Quanto mais repetições, melhor os dados se ajustam à curva normal.
Então, tentei manter o número de repetições fixado em 1.000 e aumentei o tamanho da amostra. Quanto maior o tamanho da amostra, pior a curva normal parecia ajustar-se aos dados. Isso parece ser contraditório com o exemplo do livro, que se aproxima melhor da curva normal à medida que o tamanho da amostra aumenta.
Eu queria ver o que aconteceria se eu aumentasse o tamanho da amostra, mas com um número maior de repetições fixadas em 10.000. Isso também parece contradizer o livro.
Alguma idéia do que estou fazendo de errado?
Código e gráficos abaixo.
%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. Experimente aumentar o número de repetições (tamanho fixo da amostra de 1000)
plot_hist(1000, 1000)
plot_hist(10000, 1000)
plot_hist(100000, 1000)
2. Experimente aumentar o tamanho da amostra (fixado em 1000 repetições)
plot_hist(1000, 100)
plot_hist(1000, 1000)
plot_hist(1000, 10000)
3. Experimente aumentar o tamanho da amostra (fixado em 10.000 repetições)
plot_hist(10000, 100)
plot_hist(10000, 1000)
plot_hist(10000, 10000)
plot_hist(10000, 100000)