Probability

如何在 N 次成功之前為翻轉建模?

  • January 20, 2017

你和我決定玩一個我們輪流擲硬幣的遊戲。第一個總共翻轉 10 個正面的玩家贏得遊戲。當然,關於誰應該先走存在爭論。

該遊戲的模擬表明,第一個翻轉的玩家比第二個翻轉的玩家多贏 6%(第一個玩家獲勝的機率約為 53%)。我有興趣對此進行分析建模。

這不是二項式隨機變量,因為沒有固定數量的試驗(翻轉直到有人得到 10 個正面)。我該如何建模?是負二項分佈嗎?


為了能夠重新創建我的結果,這是我的 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)

實現前的尾數分佈頭是帶參數的負二項式和. 讓是概率函數和生存函數:對於每個,是玩家的機會之前的尾巴頭和是玩家的機會或更多尾巴之前頭。

因為玩家獨立滾動,所以第一個玩家準確滾動獲勝的機會尾巴是通過將該機會乘以第二個玩家滾動的機會獲得的或更多尾巴,等於.

總結所有可能的給出第一個玩家的獲勝機會為

那是關於超過一半的時間。

一般來說,更換任意正整數,答案可以用超幾何函數給出:它等於

當有機會使用有偏見的硬幣時的頭,這概括為


這是R一百萬個此類游戲的模擬。它報告了一個估計. 將其與理論結果進行比較的二項式假設檢驗的 Z 分數為,這是一個微不足道的差異。

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

引用自:https://stats.stackexchange.com/questions/257317

comments powered by Disqus