Wie kann ich Flips modellieren, bis N Erfolge erzielt wurden?


17

Sie und ich beschließen, ein Spiel zu spielen, bei dem wir abwechselnd eine Münze werfen. Der erste Spieler, der insgesamt 10 Köpfe umdreht, gewinnt das Spiel. Natürlich gibt es einen Streit darüber, wer zuerst gehen sollte.

Simulationen dieses Spiels zeigen, dass der Spieler, der zuerst flippt, 6% mehr gewinnt als der Spieler, der als Zweiter flippt (der erste Spieler gewinnt ca. 53% der Zeit). Ich bin daran interessiert, dies analytisch zu modellieren.

Dies ist keine binomische Zufallsvariable, da es keine feste Anzahl von Versuchen gibt (drehen, bis jemand 10 Köpfe bekommt). Wie kann ich das modellieren? Ist es die negative Binomialverteilung?


Um meine Ergebnisse neu erstellen zu können, ist hier mein Python-Code:

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)

3
Wenn Sie eine Münze werfen , bis Ausfälle und dann Blick auf die Verteilung der Anzahl der Erfolge , die vor dem Abschluss solcher Versuch passieren, dann ist dies definitions Binomialverteilung negativ . r
Tim

2
Ich kann den 2% -Wert nicht reproduzieren. Ich finde, dass der erste Spieler der Zeit gewinnt . 53.290977425133892%
whuber

1
@whuber ja, ich glaube du hast recht. Ich habe meine Simulation weniger oft ausgeführt, als ich sollte. Meine Ergebnisse stimmen mit Ihren überein.
Demetri Pananos

1
Wenn einer 53% der Zeit gewinnt, sollte der andere 47% sein. Sollte die Beschreibung also nicht lauten "der erste Spieler gewinnt 6% mehr als der zweite Spieler" oder "3% mehr als die Hälfte der Zeit"? Nicht (wie es derzeit heißt) "3% mehr als der Spieler, der den zweiten
Schlag macht

3
Haben Sie diese Frage vom FiveThirtyEight Riddler Express erhalten ?
foutandabout

Antworten:


19

Die Verteilung der Anzahl der Schwänze vor Erreichen von Köpfen ist Negativbinomial mit den Parametern und . Sei die Wahrscheinlichkeitsfunktion und die Überlebensfunktion: Für jedes ist die Chance des Spielers, Schwänze vor Köpfen zu haben, und die Chance des Spielers, oder mehr Schwänze vor Köpfen zu haben .10 1 / 2 f G n 0 f ( n ) n 10 G ( n ) , n 1010101/2fGn0f(n)n10G(n)n10

Da die Spieler unabhängig würfeln, wird die Chance, dass der erste Spieler gewinnt , wenn er genau Schwänze würfelt, durch Multiplizieren dieser Chance mit der Chance, dass der zweite Spieler oder mehr Schwänze würfelt , gleich .n f ( n ) G ( n )nnf(n)G(n)

Das Summieren aller möglichen ergibt die Gewinnchancen des ersten Spielers alsn

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

Das sind ungefähr mehr als die Hälfte der Zeit.3%

Im Allgemeinen kann die Antwort durch Ersetzen von durch eine positive ganze Zahl in Form einer hypergeometrischen Funktion angegeben werden: Sie ist gleichm10m

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

Bei Verwendung einer voreingenommenen Münze mit einer Wahrscheinlichkeit von Köpfen verallgemeinert sich dies aufp

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

Hier ist eine RSimulation von einer Million solcher Spiele. Es gibt eine Schätzung von . Ein Binomialhypothesentest zum Vergleich mit dem theoretischen Ergebnis weist einen Z-Score von , was einen unbedeutenden Unterschied darstellt.- 0,8430.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))

1
Nur als Hinweis, der auf einen Blick nicht ersichtlich sein mag, stimmen unsere Antworten numerisch überein: (.53290977425133892 - .5) * 2 ist im Wesentlichen genau die Wahrscheinlichkeit, die ich angegeben habe.
Dougal

1
@Dougal Danke, dass Sie darauf hingewiesen haben. Ich habe mir Ihre Antwort angesehen, die , und da ich wusste, dass sie nicht mit der Form der in der Frage angeforderten Antwort übereinstimmt, habe ich nicht erkannt, dass Sie richtig berechnet haben. Im Allgemeinen ist es eine gute Idee, eine Antwort auf jede Frage in dem angeforderten Formular zu formulieren, wenn dies möglich ist: So können Sie leicht erkennen, wann sie richtig ist, und die Antworten können leicht verglichen werden. 6.6%
whuber

1
Pr(A wins)Pr(B wins)=2%

@Dougal Ich stimme zu, dass die Beschreibung des OP verwirrend und sogar falsch ist. Der Code und sein Ergebnis machten jedoch deutlich, dass er "3% mehr als die Hälfte der Zeit" und nicht "3% mehr als der andere Spieler" meinte.
whuber

1
@whuber Einverstanden. Leider beantwortete ich die Frage, bevor der Code veröffentlicht wurde, und führte selbst keine Simulation durch. :)
Dougal

15

Wir können das Spiel so modellieren:

  • Spieler A wirft wiederholt eine Münze und erhält die Ergebnisse A1,A2, bis er insgesamt 10 Köpfe hat. Lassen Sie den Zeitindex der 10. Köpfe der Zufallsvariable X .
  • Spieler B macht das Gleiche. Der Zeitindex der 10. Köpfe sei die Zufallsvariable Y , die eine iid-Kopie von X .
  • Wenn XY , gewinnt Spieler A; ansonsten gewinnt Spieler B. Das heißt,
    Pr(A wins)=Pr(XY)=Pr(X>Y)+Pr(X=Y)Pr(B wins)=Pr(Y>X)=Pr(X>Y).

Die Lücke in den Gewinnraten ist somit

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

Wie Sie vermutet haben, werden X (und ) im Wesentlichen gemäß einer negativen Binomialverteilung verteilt. Notationen dafür variieren, aber in der Parametrisierung von Wikipedia haben wir Köpfe als "Fehler" und Schwänze als "Erfolg"; wir brauchen r = 10 "Fehler" (Köpfe), bevor das Experiment gestoppt wird, und die Erfolgswahrscheinlichkeit p = 1Yr=10p=12 . Dann hat die Anzahl der "Erfolge", dieX10ist, und die Kollisionswahrscheinlichkeit ist was Mathematica hilfreich mitteilt, ist.

Pr(X10=k)=(k+9k)210k,
Pr(X=Y)=k=0(k+9k)222k20,
7649952511622614676.6%

Somit beträgt die Gewinnrate von Spieler B und die von Spieler A .Pr(Y>X)46.7%619380496116226146753.3%


Die Köpfe müssen nicht in einer Reihe sein, nur 10 insgesamt. Ich gehe davon aus, dass Sie das korrigieren.
Demetri Pananos

6
(+1) Mir gefällt dieser Ansatz besser als der von mir veröffentlichte, weil er rechenmäßig einfacher ist: Er erfordert nur die Wahrscheinlichkeitsfunktion, die einen einfachen Ausdruck in Form von Binomialkoeffizienten hat.
whuber

1
Ich habe eine Bearbeitung eingereicht, die den letzten Absatz ersetzt, in dem der Unterschied zur anderen Antwort in Frage gestellt und erläutert wird, wie die Ergebnisse tatsächlich gleich sind.
Monty Harder

1

Sei der Fall, dass der Spieler, der würfelt, i Köpfe dreht, bevor der andere Spieler j Köpfe dreht, und sei die ersten beiden Köpfe mit dem Abtastraum wobei h Köpfe bedeutet und t tails, und lass .EijX{hh,ht,th,tt}pijPr(Eij)

Dann ist 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)

Angenommen, eine Standardmünze bedeutet, dassPr(X=)=1/4pij=1/4[pi1j1+pi1j+pij1+pij]

Auflösen nach ,pij=1/3[pi1j1+pi1j+pij1]

Aber und , was bedeutet, dass die Rekursion vollständig endet. Eine direkt naive rekursive Implementierung führt jedoch zu einer schlechten Leistung, da sich die Zweige überschneiden.p0j=p00=1pi0=0

Eine effiziente Implementierung weist eine Komplexität und eine Speicherkomplexität . Hier ist eine einfache, in Haskell implementierte Falte:O(ij)O(min(i,j))

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> 

UPDATE: Jemand in den obigen Kommentaren fragte, ob man 10 Köpfe hintereinander würfeln sollte oder nicht. Also sei der Fall, dass der Spieler, der würfelt, i Köpfe in einer Reihe dreht, bevor der andere Spieler i Köpfe in einer Reihe dreht, vorausgesetzt, er hat bereits k bzw. l aufeinanderfolgende Köpfe gedreht.Ekl

Es wird wie oben vorgegangen, jedoch nur beim ersten Flip konditioniert: wobeipk,l=11/2[pl,k+1+pl,0]pil=pii=1,pki=0

Dies ist ein lineares System mit Unbekannten und einer einzigartigen Lösung.i2

Um es in ein iteratives Schema umzuwandeln, fügen Sie einfach eine iterative Zahl und einen Sensitivitätsfaktor :nϵ

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

Wählen Sie und Bedacht und führen Sie die Iteration für einige Schritte aus und überwachen Sie den Korrekturterm. ϵpk,l,0

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.