TL; DR: Çöp boyutları büyük olduğunda normal dağılımların karışımları düzgün görünebilir.
Bu cevap @ whuber'ın örnek kodundan ödünç alır (ki ilk olarak bir hata olduğunu düşündüm, ancak geriye dönükte muhtemelen bir ipucu oldu).
Popülasyonda altta yatan oranlar eşittir: a = b = 0.5
.
Her bir grup, A ve B 10000 üyesi vardır: N = 10000
.
Bir simülasyonun 5000 çoğaltır vereceklerini: for i in range(5000):
.
Aslında, ne yapıyoruz bir olduğunu bir . 5000 iterasyonun her birinde yapacağız . s i m u l a t i o n u n d e r l y i n g s i m u l a t i o n p r i m e s i m u l a t i o n us i m u l a t i o nprimesimulationunderlyingsimulationprimesimulationunderlying
Her yinelemede daha önce tanımlandığı eşit yatan oranlar belirli başarıları '(AKA dönüştürülmüş) ve rastgele A numarası ve B taklit edecek: . Nominal olarak bu A = 5000 ve B = 5000 verir, ancak A ve B sim çalışmasından sim çalışmasına değişir ve 5000 simülasyon çalışmasında bağımsız olarak ve (yaklaşık) normal olarak dağıtılır (buna geri döneceğiz).simulationprimeA = np.random.binomial(N, a); B = np.random.binomial(N, b)
Yoluyla edelim Şimdi aşama tek bir yineleme için (durum ortalama olacak şekilde), A ve B başarıların eşit sayıda almış olan. Her yinelemesinde, A ve B verildiğinde, her grup için beta dağılımının rastgele varyasyonlarını oluşturacağız. Sonra bunları karşılaştıracağız ve bir DOĞRU veya YANLIŞ (1 veya 0) vererek olup olmadığını öğreneceğiz . çalışmasının sonunda 15000 yinelemeyi tamamladık ve 15000 TRUE / FALSE değerine sahibiz. Bunların ortalaması (yaklaşık normal) örnekleme dağılımından tek bir değer verecektir. s i m u l a t i o n p r i m e s i m u l a t i o n u n d e r l y i n g B e t a A >simulationunderlyingsimulationprimesimulationunderlying simulatio n u n d e r l y i n g B e t a A > B e t a BBetaA>BetaBsimulationunderlyingBetaA>BetaB .
Şimdilik 5000 A ve B değerini seçecek. A ve B nadiren tam olarak eşit olacaktır, ancak A ve B başarılarının sayısındaki tipik farklılıklar, A ve B'nin toplam örnek büyüklüğü ile engellenir. Tipik As ve Bs, oranlarının örnekleme dağılımından daha fazla çekiş sağlar. , ancak A / B dağılımının kenarlarındaki olanlar da çekilir.B e t bir A > B e t bir BsimulationprimeBetaA>BetaB
Yani, aslında birçok sim çalışmasını çektiğimiz şey , A ve B kombinasyonları için örnekleme dağılımlarının bir kombinasyonudur ( ortak değerlerden yapılan örnekleme dağılımlarından daha fazla çekme ile) A ve B'nin nadir değerlerinden daha fazla). Bu, normal-ish dağılımlarının karışımları ile sonuçlanır. Bunları küçük bir kutu boyutu üzerinde birleştirdiğinizde (kullandığınız ve doğrudan orijinal kodunuzda belirtildiği histogram işlevi için varsayılan olarak), tekdüze bir dağılım gibi görünen bir şeyle sonuçlanırsınız.BetaA>BetaB
Düşünmek:
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()