Hypothesis-Testing

為什麼這種分佈是均勻的?

  • May 12, 2014

我們正在研究貝葉斯統計檢驗,並遇到了一個奇怪的(至少對我而言)現象。

考慮以下情況:我們有興趣測量 A 或 B 哪個人群具有更高的轉化率。為了進行健全性檢查,我們設置,即兩組的轉化概率相等。我們使用二項式模型生成人工數據,例如

然後我們嘗試估計使用貝葉斯 beta-二項式模型,因此我們得到每個轉化率的後驗,例如

我們的檢驗統計量是通過計算計算得出的通過蒙特卡洛。

令我驚訝的是,如果, 然後. 我的想法是它將以 0.5 為中心,甚至收斂到 0.5 作為樣本量,, 成長。

我的問題是,為什麼 什麼時候?


下面是一些 Python 代碼來演示:

%pylab
from scipy.stats import beta
import numpy as np
import pylab as P

a = b = 0.5
N = 10000
samples = [] #collects the values of S
for i in range(5000):
   assert a==b
   A = np.random.binomial(N, a); B = np.random.binomial(N, b)
   S = (beta.rvs(A+1, N-A+1, size=15000) > beta.rvs(B+1, N-B+1, size=15000)).mean() 
   samples.append(S)

P.hist(samples)
P.show()

TL;DR: 當 bin 大小很大時,正態分佈的混合可能看起來很均勻。

這個答案借鑒了@whuber 的示例代碼(我首先認為這是一個錯誤,但回想起來可能是一個提示)。

人口中的基本比例是相等的:a = b = 0.5

每個組 A 和 B 有 10000 個成員:N = 10000.

我們將對模擬進行 5000 次重複:for i in range(5000):.

實際上,我們正​​在做的是一個. 在 5000 次迭代中的每一次我們會做的.

在每次迭代中我們將模擬一個隨機數的“成功”(AKA 轉換)的 A 和 B,給定前面定義的相等的基本比例:A = np.random.binomial(N, a); B = np.random.binomial(N, b). 名義上這將產生 A = 5000 和 B = 5000,但是 A 和 B 在不同的模擬運行中有所不同,並且獨立地(大約)正常地分佈在 5000 次模擬運行中(我們將回到那個)。

現在讓我們一步一步來 對於單次迭代其中 A 和 B 取得了相同數量的成功(這將是平均情況)。在每次迭代中給定 A 和 B,我們將為每個組創建 beta 分佈的隨機變量。然後我們將比較它們並找出是否,產生 TRUE 或 FALSE(1 或 0)。在運行結束時,我們已經完成了 15000 次迭代,並有 15000 個 TRUE/FALSE 值。這些的平均值將從(近似正態的)抽樣分佈中產生單個值.

除了現在將選擇 5000 A 和 B 值。A 和 B 很少會完全相等,但 A 和 B 成功次數的典型差異與 A 和 B 的總樣本量相比相形見絀。典型的 As 和 B 將從它們的抽樣比例分佈中產生更多的拉動,但那些在 A/B 分佈邊緣的也會被拉取。

所以,本質上我們拉過許多模擬運行的是抽樣分佈的組合對於 A 和 B 的組合(與 A 和 B 的不常見值相比,由 A 和 B 的共同值構成的抽樣分佈的拉動更多)。這導致了正態分佈的混合。當您將它們組合到較小的 bin 大小時(這是您使用的直方圖函數的默認值,並且直接在原始代碼中指定),您最終會得到看起來像均勻分佈的東西。

考慮:

a = b = 0.5
N = 10
samples = [] #collects the values of S
for i in range(5000):
   assert a==b
   A = np.random.binomial(N, a); B = np.random.binomial(N, b)
   S = (beta.rvs(A+1, N-A+1, size=15000) > beta.rvs(B+1, N-B+1, size=15000)).mean() 
   samples.append(S)

P.hist(samples,1000)
P.show()

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

comments powered by Disqus