¿Cómo puedo modelar flips hasta N éxitos?

17

Tú y yo decidimos jugar un juego donde nos turnamos para lanzar una moneda. El primer jugador en voltear 10 cabezas en total gana el juego. Naturalmente, hay una discusión sobre quién debería ir primero.

Las simulaciones de este juego muestran que el jugador que voltea primero gana un 6% más que el jugador que voltea segundo (el primer jugador gana aproximadamente el 53% del tiempo). Estoy interesado en modelar esto analíticamente.

Esta no es una variable aleatoria binomial, ya que no hay un número fijo de ensayos (voltea hasta que alguien obtenga 10 caras). ¿Cómo puedo modelar esto? ¿Es la distribución binomial negativa?


Para poder recrear mis resultados, aquí está mi código de 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)
Demetri Pananos
fuente
3
Cuando se lanza una moneda hasta fracasos y luego mirar a la distribución del número de éxitos que ocurren antes de terminar experimento de este tipo, entonces esto es, por definición, la distribución binomial negativa . r
Tim
2
No puedo reproducir el valor del 2%. Me parece que el primer jugador gana del tiempo. 53.290977425133892%
whuber
1
@whuber sí, creo que tienes razón. Ejecuté mi simulación menos veces de lo que debería. Mis resultados son acordes con los tuyos.
Demetri Pananos
1
Si uno gana el 53% del tiempo, el otro debería ser el 47%, entonces ¿no debería la descripción leer "el primer jugador gana un 6% más que el segundo jugador" o "3% más de la mitad del tiempo"? No (como se dice actualmente) "3% más que el jugador que cambia de segundo"
JesseM
3
¿Recibiste esta pregunta del FiveThirtyEight Riddler Express ?
foutandabout

Respuestas:

19

La distribución del número de colas antes de lograr cabezas es10 negativa binomial con parámetros y 1 / 2 . Deje f ser la función de probabilidad y G la función de supervivencia: para cada n 0 , f ( n ) es la oportunidad del jugador de n colas antes de 10 cabezas y G ( n ) es la oportunidad del jugador de n o más colas antes de 10 cabezas.101/2fGn0f(n)n10G(n)n10

Debido a que los jugadores ruedan de manera independiente, la posibilidad de que el primer jugador gane tirando exactamente colas se obtiene multiplicando esa posibilidad por la posibilidad de que el segundo jugador lance n o más colas, igual a f ( n ) G ( n ) .nnf(n)G(n)

Al sumar todas las posibles , las posibilidades de ganar del primer jugador sonn

n=0f(n)G(n)53.290977425133892%.

Eso es aproximadamente un más de la mitad del tiempo.3%

En general, reemplazando por cualquier entero positivo m , la respuesta se puede dar en términos de una función hipergeométrica: es igual a10m

1/2+22m12F1(m,m,1,1/4).

Cuando se usa una moneda sesgada con una probabilidad de caras, esto generaliza ap

12+12(p2m)2F1(m,m,1,(1p)2).

Aquí hay una Rsimulación de un millón de tales juegos. Informa una estimación de . Una prueba de hipótesis binomial para compararlo con el resultado teórico tiene una puntuación Z de - 0,843 , que es una diferencia insignificante.0.53250.843

n.sim <- 1e6
set.seed(17)
xy <- matrix(rnbinom(2*n.sim, 10, 1/2), nrow=2)
p <- mean(xy[1,] <= xy[2,])
cat("Estimate:", signif(p, 4), 
    "Z-score:", signif((p - 0.532909774) / sqrt(p*(1-p)) * sqrt(n.sim), 3))
whuber
fuente
1
Solo como una nota que puede no ser obvia de un vistazo, nuestras respuestas concuerdan numéricamente: (.53290977425133892 - .5) * 2 es esencialmente la probabilidad exacta que di.
Dougal
1
@Dougal Gracias por señalar eso. Miré su respuesta, vi el , y sabiendo que no estaba de acuerdo con la forma de la respuesta solicitada en la pregunta, no reconocí que había calculado correctamente. En general, es una buena idea enmarcar una respuesta a cualquier pregunta en el formulario que se solicita, si es posible: eso hace que sea fácil reconocer cuándo es correcto y fácil de comparar respuestas. 6.6%
whuber
1
@whuber Estaba respondiendo a la frase "Las simulaciones de este juego muestran que el jugador que voltea primero gana 2% (EDITAR: 3% más después de simular más juegos) más que el jugador que voltea segundo". Interpretaría "gana 2% más" como ; el valor correcto es de hecho 6.6%. No estoy seguro de una forma de interpretar "gana 2% más" significa "gana 52% del tiempo", aunque aparentemente eso es lo que se pretendía. Pr(A wins)Pr(B wins)=2%
Dougal
@Dougal Estoy de acuerdo en que la descripción del OP es confusa e incluso incorrecta. Sin embargo, el código y su resultado dejaron en claro que quería decir "3% más de la mitad del tiempo" en lugar de "3% más que el otro jugador".
whuber
1
@whuber De acuerdo. Desafortunadamente, respondí la pregunta antes de que se publicara el código, y yo mismo no ejecuté una simulación. :)
Dougal
15

Podemos modelar el juego así:

  • El jugador A lanza una moneda repetidamente, obteniendo los resultados A1,A2, hasta obtener un total de 10 caras. Deje que el índice de tiempo de las cabezas de 10º la variable aleatoria X .
  • El jugador B hace lo mismo. Deje que el índice de tiempo de las cabezas de 10º sea la variable aleatoria Y , que es una copia iid de X .
  • Si XY , el jugador A gana; de lo contrario, el jugador B gana. Es decir,
    Pr(A wins)=Pr(XY)=Pr(X>Y)+Pr(X=Y)Pr(B wins)=Pr(Y>X)=Pr(X>Y).

La brecha en las tasas de ganancia es, por tanto,

Pr(X=Y)=kPr(X=k,Y=k)=kPr(X=k)2.

Como sospechaba, X (e Y ) se distribuyen esencialmente de acuerdo con una distribución binomial negativa. Las anotaciones para esto varían, pero en la parametrización de Wikipedia , tenemos cabezas como un "fracaso" y colas como un "éxito"; necesitamos r=10 "fallas" (cabezas) antes de que se detenga el experimento, y la probabilidad de éxito p=12 . Entonces el número de "éxitos", que esX10, tiene

Pr(X10=k)=(k+9k)210k,
y la probabilidad de colisión es
Pr(X=Y)=k=0(k+9k)222k20,
que Mathematica nos dice útilmente es7649952511622614676.6%.

Por lo tanto, la tasa de ganancia del jugador B es Pr(Y>X)46.7% , y la del jugador A es 619380496116226146753.3%.

Dougal
fuente
las cabezas no necesitan estar en una fila, solo 10 en total. Supongo que eso es lo que estás arreglando.
Demetri Pananos
66
(+1) Me gusta este enfoque mejor que el que publiqué porque es computacionalmente más simple: requiere solo la función de probabilidad, que tiene una expresión simple en términos de coeficientes binomiales.
whuber
1
He enviado una edición que reemplaza el último párrafo cuestionando la diferencia de la otra respuesta con una explicación de cómo sus resultados son realmente los mismos.
Monty Harder
1

EijX{hh,ht,th,tt}pijPr(Eij)

pij=Pr(Ei1j1|X=hh)Pr(X=hh)+Pr(Ei1j|X=ht)Pr(X=ht)+Pr(Eij1|X=th)Pr(X=th)+Pr(Eij|X=tt)Pr(X=tt)

Pr(X=)=1/4pij=1/4[pi1j1+pi1j+pij1+pij]

pij=1/3[pi1j1+pi1j+pij1]

p0j=p00=1pi0=0

O(ij)O(min(i,j)) . Aquí hay un pliegue simple implementado en Haskell:

Prelude> let p i j = last. head. drop j $ iterate ((1:).(f 1)) start where
  start = 1 : replicate i 0;
  f c v = case v of (a:[]) -> [];
                    (a:b:rest) -> sum : f sum (b:rest) where
                     sum = (a+b+c)/3 
Prelude> p 0 0
1.0
Prelude> p 1 0
0.0
Prelude> p 10 10
0.5329097742513388
Prelude> 

Ekl

pk,l=11/2[pl,k+1+pl,0]pil=pii=1,pki=0

i2

nϵ:

pk,l,n+1=1/(1+ϵ)[ϵpk,l,n+11/2(pl,k+1,n+pl,0,n)]

Choose ϵ and pk,l,0 wisely and run the iteration for a few steps and monitor the correction term.

John Rambo
fuente