Então, digamos que você jogue uma moeda 10 vezes e chame esse 1 de "evento". Se você executar 1.000.000 desses "eventos", qual a proporção de eventos com cabeças entre 0,4 e 0,6? A probabilidade binomial sugere que isso seja cerca de 0,65, mas meu código do Mathematica está me dizendo cerca de 0,24
Aqui está a minha sintaxe:
In[2]:= X:= RandomInteger[];
In[3]:= experiment[n_]:= Apply[Plus, Table[X, {n}]]/n;
In[4]:= trialheadcount[n_]:= .4 < Apply[Plus, Table[X, {n}]]/n < .6
In[5]:= sample=Table[trialheadcount[10], {1000000}]
In[6]:= Count[sample2,True];
Out[6]:= 245682
Onde está o acidente?
computational-statistics
mathematica
Tim McKnight
fonte
fonte
Respostas:
O contratempo é o uso de menos de estrito.
Com dez lançamentos, a única maneira de obter um resultado de proporção de cabeças estritamente entre 0,4 e 0,6 é se você obtiver exatamente 5 cabeças. Isso tem uma probabilidade de cerca de 0,246 ( ), que é sobre o que suas simulações (corretamente ) dar.(105)(12)10≈0.246
Se você incluir 0,4 e 0,6 em seus limites (ou seja, 4, 5 ou 6 cabeças em 10 lançamentos), o resultado terá uma probabilidade de cerca de 0,656, conforme o esperado.
Seu primeiro pensamento não deve ser um problema com o gerador de números aleatórios. Esse tipo de problema teria sido óbvio em um pacote muito usado como o Mathematica, muito antes de agora.
fonte
Alguns comentários sobre o código que você escreveu:
experiment[n_]
mas nunca o usou, em vez disso, repete sua definição emtrialheadcount[n_]
.experiment[n_]
poderia ser programado com muito mais eficiência (sem usar o comando internoBinomialDistribution
), poisTotal[RandomInteger[{0,1},n]/n
isso também tornariaX
desnecessário.experiment[n_]
é estritamente entre 0,4 e 0,6 é realizado com mais eficiência por escritoLength[Select[Table[experiment[10],{10^6}], 0.4 < # < 0.6 &]]
.Mas, para a pergunta propriamente dita, como Glen_b aponta, a distribuição binomial é discreta. De 10 lançamentos de moedas com cabeças observadas, a probabilidade de que a proporção da amostra de cabeças seja estritamente entre 0,4 e 0,6 é realmente apenas o caso ; ou seja, Enquanto que, se você calcular a probabilidade de que a proporção da amostra esteja entre 0,4 e 0,6 inclusive , isso seria Portanto, você só precisa modificar seu código para usarx p^= x / 10 x = 5 Pr[4≤X≤6]=6 ∑ x=4 ( 10
0.4 <= # <= 0.6
em vez de. Mas é claro, também poderíamos escreverEste comando é aproximadamente 9,6 vezes mais rápido que o seu código original. Imagino que alguém ainda mais competente do que eu sou no Mathematica possa acelerar ainda mais.
fonte
Total@Map[Counts@RandomVariate[BinomialDistribution[10, 1/2], 10^6], {4, 5, 6}]
. Eu suspeito queCounts[]
, sendo uma função interna, seja altamente otimizada em comparação comSelect[]
, que tem que trabalhar com predicados arbitrários.Fazendo experimentos de probabilidade no Mathematica
O Mathematica oferece uma estrutura muito confortável para trabalhar com probabilidades e distribuições e - embora a questão principal dos limites apropriados tenha sido abordada - eu gostaria de usar esta pergunta para tornar isso mais claro e talvez útil como referência.
Vamos simplesmente tornar os experimentos repetíveis e definir algumas opções de plotagem que se ajustem ao nosso gosto:
Trabalhando com Distribuições Paramétricas
Agora podemos definir a distribuição assintótica de um evento que é a proporção de cabeças em arremessos de uma moeda (justa):nπ n
O que nos dá o gráfico da distribuição discreta de proporções:
Podemos usar a distribuição imediatamente para calcular probabilidades para e :Prr[Pr[0.4≤π≤0.6|π∼B(10,12)] Pr[0.4<π<0.6|π∼B(10,12)]
Fazendo experiências em Monte Carlo
Podemos usar a distribuição para um evento para amostrá-lo repetidamente (Monte Carlo).
Comparando isso com a distribuição teórica / assintótica, mostra que tudo se encaixa:
fonte