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)
Respostas:
No segundo caso, aumentando o número de lançamentos, você aumenta o número de caixas em que uma única tentativa pode cair. Enquanto o primeiro caso do experimento 2 tem apenas um máximo de 100 posições que podem ser preenchidas, o último exemplo tem 10000 posições. Você aumentou a "resolução" da sua experiência em um fator 100 (ou seja, um compartimento no seu primeiro experimento agora é representado por aproximadamente 100 no seu segundo). Obviamente, isso significa que você esperaria exigir um fator 100 a mais de dados para preencher suas caixas.
fonte
_ = ax.hist(sums, bins=35, edgecolor='black', linewidth=1.2, density=True)
), o terceiro experimento agora se aproxima da curva normal.Você pode pensar em um lançamento individual de moedas como um teste independente de Bernoulli. Um teste dará a você cara / coroa ou sucesso / fracasso, respectivamente. Se você repetir isso, digamos 100.000 vezes, o número médio de cabeças estará muito próximo de 0,5, se a moeda for justa.
Agora, se você aumentar o número de tentativas para 1.000 e manter a repetição em 1, obterá uma sequência de 1.000 sucessos / falhas e não poderá dizer muito sobre a probabilidade de observar, em média, 500 cabeças, a menos que aumente o número de repetições para cada um desses ensaios independentes. À medida que o número de repetições aumenta, você obtém uma aproximação cada vez melhor da distribuição normal.
Para mim, é mais fácil pensar nos julgamentos não como "sorteios" ou "tamanhos de amostra", mas em vez de moedas separadas e as repetições como o número de lançamentos de cada uma dessas moedas. Depois, também faz sentido intuitivamente que, aumentando o número de moedas (ou tentativas), mantendo constante o número total de repetições (ou sacudidas), a aproximação dos dados à distribuição normal piora.
fonte
Eu acho que as outras respostas aqui são ótimas, mas queria adicionar uma resposta que se estende a outra ferramenta estatística.
Você está começando com uma linha de base que acha que deve se aproximar de uma curva normal e depois partindo para ver se consegue aproximar melhor uma curva normal. Tente ir na outra direção e veja o que você pode fazer para fazer um trabalho pior na aproximação. Tente simulações onde você tem 10 movimentos e 1000 repetições. Compare isso com simulações em que você tem 1000 movimentos e 10 repetições. Deve ficar claro que o primeiro caso tem uma melhor aproximação.
A extensão que eu quero fazer é a ANOVA (análise de variância). Você vê muitos cientistas de dados novos que não sabem muito bem desse problema e projetam seus estudos para que eles tenham muitos movimentos, mas poucas repetições. Eles têm muitos dados, mas são menos do que gostariam. É como medir todas as folhas de uma árvore, mas ter apenas duas. Podemos dizer um pouco sobre as folhas nessas duas árvores, mas não sobre as árvores em geral. Seria melhor obter uma amostra muito menor de folhas e obter muitas árvores.
fonte
Para obter alguma intuição adicional, considere o seguinte:
Imagine que você faça apenas uma única repetição.
Nesse caso, você pode aumentar o número de lançamentos o quanto quiser, mas não se parecerá com uma distribuição normal. E isso faz sentido, já que seu histograma terá apenas um único pico.
A distribuição normal é uma aproximação para a distribuição de probabilidade (da distribuição binomial).
O que você fez não foi criar esta distribuição. Mas, em vez disso, você aproximou essa distribuição usando um número limitado (e pequeno) de simulações. (e o que você descobriu é que essa aproximação fica pior quando você aumenta o número de posições no histograma)
Então, vocês dois precisam de um número alto de lançamentos e repetições.
fonte