為什麼這種分佈是均勻的?
我們正在研究貝葉斯統計檢驗,並遇到了一個奇怪的(至少對我而言)現象。
考慮以下情況:我們有興趣測量 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()