Você e eu decidimos jogar um jogo em que revezamos o lançamento de uma moeda. O primeiro jogador a virar 10 cabeças no total ganha o jogo. Naturalmente, há uma discussão sobre quem deve ir primeiro.
Simulações deste jogo mostram que o jogador que vira primeiro ganha 6% a mais do que o jogador que vira o segundo (o primeiro jogador vence aproximadamente 53% do tempo). Estou interessado em modelar isso analiticamente.
Esta não é uma variável aleatória binomial, pois não há um número fixo de tentativas (vire até que alguém ganhe 10 cabeças). Como posso modelar isso? É a distribuição binomial negativa?
Para poder recriar meus resultados, aqui está o meu código python:
import numpy as np
from numba import jit
@jit
def sim(N):
P1_wins = 0
P2_wins = 0
for i in range(N):
P1_heads = 0
P2_heads = 0
while True:
P1_heads += np.random.randint(0,2)
if P1_heads == 10:
P1_wins+=1
break
P2_heads+= np.random.randint(0,2)
if P2_heads==10:
P2_wins+=1
break
return P1_wins/N, P2_wins/N
a,b = sim(1000000)
probability
python
binomial
negative-binomial
Demetri Pananos
fonte
fonte
Respostas:
A distribuição do número de caudas antes de atingir cabeças é negativo binomial com parâmetros 10 e 1 / 2 . Let f10 10 1 / 2 f a função de probabilidade e a função de sobrevivência: para cada n ≥ 0 , f ( n ) é a chance de n caudas antes de 10 cabeças e G ( n ) é a chance de n ou mais caudas antes de 10 cabeças.G n ≥ 0 f( N ) n 10 G ( n ) n 10
Como os jogadores rolam independentemente, a chance do primeiro jogador vencer rolando exatamente caudas é obtida multiplicando essa chance pela chance de o segundo jogador rolar n ou mais caudas, igual a f ( n ) G ( n ) .n n f( n ) G ( n )
A soma de todos os possíveis fornece as chances de vitória do primeiro jogador comon
Isso é cerca de mais da metade do tempo.3 %
Em geral, substituindo por qualquer número inteiro positivo m , a resposta pode ser dada em termos de uma função hipergeométrica: é igual a10 m
Ao usar uma moeda tendenciosa com uma chance de cabeças, isso generaliza parap
Aqui está uma0.5325 −0.843
R
simulação de um milhão desses jogos. Ele relata uma estimativa de . Um teste de hipótese binomial para compará-lo com o resultado teórico tem um escore Z de - 0,843 , que é uma diferença insignificante.fonte
Podemos modelar o jogo assim:
A diferença nas taxas de ganho é, assim,Pr(X=Y)=∑kPr(X=k,Y=k)=∑kPr(X=k)2.
Como você suspeitava,X (e Y ) são distribuídos essencialmente de acordo com uma distribuição binomial negativa. As notações para isso variam, mas na parametrização da Wikipedia , temos cabeças como "falha" e coroas como "sucesso"; precisamos de r=10 "falhas" (cabeças) antes que o experimento seja interrompido e a probabilidade de sucesso p=12 . Então o número de "sucessos", que éX−10 , temPr(X−10=k)=(k+9k)2−10−k,
e a probabilidade de colisão é
Pr(X=Y)=∑k=0∞(k+9k)22−2k−20,
que o Mathematica nos diz útil é764995251162261467≈6.6% .
Assim, a taxa de vitória do jogador B éPr(Y>X)≈46.7% e a do jogador A é 6193804961162261467≈53.3% .
fonte
Assuming a standard coinPr(X=∗)=1/4 means that pij=1/4∗[pi−1j−1+pi−1j+pij−1+pij]
solving forpij , =1/3∗[pi−1j−1+pi−1j+pij−1]
Butp0j=p00=1 and pi0=0 , implying that the recursion fully terminates. However, a direct naive recursive implementation will yield poor performance because the branches intersect.
An efficient implementation will have complexityO(i∗j) and memory complexity O(min(i,j)) . Here's a simple fold implemented in Haskell:
UPDATE: Someone in the comments above asked whether one was suppose to roll 10 heads in a row or not. So letEkl be the event that the player on roll flips i heads in a row before the other player flips i heads in a row, given that they already flipped k and l consecutive heads respectively.
Proceeding as before above, but this time conditioning on the first flip only,pk,l=1−1/2∗[pl,k+1+pl,0] where pil=pii=1,pki=0
This is a linear system withi2 unknowns and one unique solution.
To convert it into an iterative scheme, simply add an iterate numbern and a sensitivity factor ϵ :
Chooseϵ and pk,l,0 wisely and run the iteration for a few steps and monitor the correction term.
fonte