TL; DR: Суміші звичайних розподілів можуть виглядати рівномірно, коли розміри контейнерів великі.
Ця відповідь запозичує зразок коду @ whuber (який я вважав спочатку помилкою, але в ретроспективі, мабуть, натяк).
Основоположні пропорції в популяції рівні: a = b = 0.5
.
Кожна група, А і В мають 10000 членів: N = 10000
.
Ми будемо проводити 5000 повторів моделювання: for i in range(5000):
.
На насправді, що ми робимо це з . У кожному з 5000 ітерацій ми зробимо . 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 nп р я м еs i m u l a t i o nu n d e r l y i n gs i m u l a t i o nп р я м еs i m u l a t i o nu n d e r l y i n g
У кожній ітерації ми будемо моделювати випадкове число А і В , які є «успіхами» (АКА перетворена) , дані , що лежать в основі рівних пропорцій , визначені раніше: . Номінально це дасть A = 5000 та B = 5000, але A і B змінюються від sim run до sim run та розподіляються по 5000 циклів моделювання незалежно та (приблизно) нормально (ми повернемось до цього).s i m u l a t i o nп р я м еA = np.random.binomial(N, a); B = np.random.binomial(N, b)
Давайте тепер переглянемо для єдиної ітерації в якій A і B отримали рівну кількість успіхів (як це буде середній випадок). У кожній ітерації ми, задавши A і B, створимо випадкові величини бета-розподілу для кожної групи. Тоді ми порівняємо їх і з’ясуємо, чи , даючи ПРАВИЛЬНУ або (1 або 0). Наприкінці запуску ми виконали 15000 ітерацій та маємо 15000 значень TRUE / FALSE. Середнє значення цих показників дасть єдине значення з (приблизно нормального) розподілу вибірки на частку 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 >s i m u l a t i o nu n d e r l y i n gs i m u l a t i o nп р я м еs i m u l a t i o nu n d e r l y i n g simulatio n u n d e r l y i n g B e t a A > B e t a BБ е т аА> Б е т аБs i m u l a t i o nu n d e r l y i n gБ е т аА> Б е т аБ .
За винятком того, що зараз вибере 5000 значень A і B. A і B рідко будуть абсолютно рівними, але типові відмінності в кількості успіхів A і B спотворюються на загальний розмір вибірки A і B. Типовий As і B отримає більше витягів від їх вибіркового розподілу пропорцій , але ті, що знаходяться на краях розподілу A / B, також будуть витягнуті.B e t a A > B e t a Bs i m u l a t i o nп р я м еБ е т аА> Б е т аБ
Отже, що по суті ми перетягуємо на багато сим-прогонів - це комбінація розподілу вибірки для комбінацій A і B (з більшою кількістю витягів із розподілу вибірки, зроблених із загальних значень A і B, ніж нечасті значення A і B). Це призводить до отримання сумішей нормального розподілу. Якщо ви комбінуєте їх за невеликим розміром біна (як це за замовчуванням для функції гістограми, яку ви використовували, і була вказана безпосередньо у вихідному коді), ви отримуєте щось, схоже на рівномірний розподіл.Б е т аА> Б е т аБ
Поміркуйте:
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()