Як я можу (чисельно) наблизити значення для бета-розподілу з великою альфа-бета-версією


12

Чи існує чисельно стійкий спосіб обчислення значень бета-розподілу для великих цілих альфа, бета (наприклад, альфа, бета> 1000000)?

Насправді мені потрібен лише 99% довірчий інтервал навколо режиму, якщо це якось полегшує проблему.

Додайте : Вибачте, моє запитання було не так чітко прописано, як я вважав, що це було. Я хочу зробити це: у мене є машина, яка перевіряє продукти на конвеєрі. Частина цих продуктів машина відкидає. Тепер, якщо оператор машини змінить деякі параметри перевірки, я хочу показати йому / її прогнозовану швидкість відхилення та деяку підказку щодо надійності поточної оцінки.

Тому я подумав, що я ставлюсь до фактичної швидкості відхилення як до випадкової величини X і обчислюю розподіл ймовірностей для цієї випадкової величини на основі кількості відхилених об'єктів N та прийнятих об'єктів M. Якщо я припускаю рівномірний попередній розподіл для X, це бета-розподіл залежно від N та M. Я можу або відобразити цей розподіл безпосередньо користувачеві, або знайти інтервал [l, r], щоб фактична швидкість відхилення знаходилась у цьому інтервалі з p> = 0,99 (використовуючи термінологію shabbychef) і відобразити це інтервал. Для малих M, N (тобто відразу після зміни параметра) я можу обчислити розподіл безпосередньо та наблизити інтервал [l, r]. Але для великих M, N цей наївний підхід призводить до помилок підтоку, оскільки x ^ N * (1-x) ^ M малий має бути представлений як поплавок подвійної точності.

Я вважаю, що найкращим моїм ставкою є використання мого наївного бета-розподілу для малих M, N та переходу до нормального розподілу з однаковим середнім значенням та дисперсією, як тільки M, N перевищить деякий поріг. Чи має це сенс?


1
Ви хочете знати математику чи просто рішення коду в R чи щось таке?
Іван

Мені потрібно реалізувати це в C #, щоб математика була б хорошою. Зразок коду теж буде добре, якщо він не покладається на якусь вбудовану функцію R / Matlab / Mathematica, яку я не можу перевести на C #.
nikie

PDF, CDF або зворотний CDF?
JM не є статистиком

Якщо ви не наполягаєте на бета-версії, ви можете використовувати розподіл Kumaraswamy, який дуже схожий і має набагато простішу алгебраїчну форму: en.wikipedia.org/wiki/Kumaraswamy_distribution
Тим

Відповіді:


13

α/(α+β)αβ(α+β)2(1+α+β)α=106,β=1080.000260.00006α=β=1060.0000001.) Таким чином, це наближення відмінно підходить для будь-яких цілей, що включають інтервали 99%.

Зважаючи на правки цього питання, зауважте, що бета-інтеграли не обчислюються, фактично інтегруючи інтегранд: звичайно, ви отримаєте підтоки (хоча вони насправді не мають значення, оскільки вони не роблять помітного внеску в інтеграл) . Існує багато, багато способів обчислити інтеграл або наблизити його, як це зафіксовано в Johnson & Kotz (Поширення в статистиці). Інтернет-калькулятор можна знайти на веб- сайті http://www.danielsoper.com/statcalc/calc37.aspx . Насправді вам потрібна обернена частина цього інтеграла. Деякі методи обчислення зворотного документуються на сайті Mathematica за адресою http://functions.wolfram.com/GammaBetaErf/InverseBetaRegularized/inverse beta regularized (.005, 1000000, 1000001)inverse beta regularized (.995, 1000000, 1000001)α=1000000,β=1000001


Ідеально! Я постійно мав на своєму столі книгу NR, але ніколи не думав шукати там. Дуже дякую.
nikie

3

Швидкий графічний експеримент дозволяє припустити, що бета-розподіл виглядає як звичайний розподіл, коли альфа і бета дуже великі. За допомогою googling "обмеження бета-версії нормального" я виявив http://nrich.maths.org/discus/messages/117730/143065.html?1200700623 , що дає "доказ" ручного розмахування.

Сторінка вікіпедії для розподілу бета-версії дає своє середнє значення, режим (v близький до середнього для великої альфа-бета-версії) та дисперсію, тому ви можете використовувати звичайний розподіл з тим самим середнім значенням та дисперсією, щоб отримати наближення. Чи буде це досить хорошим наближенням для ваших цілей, залежить від того, які цілі ви.


Дурне запитання: як ви зробили цей графічний експеримент? Я спробував побудувати розподіл для альфа / бета близько 100, але я не міг нічого побачити через помилки підтоплення.
nikie

Ви не хочете побудувати інтеграл: ви хочете побудувати інтеграл. Однак інтегрант можна отримати багатьма способами. Перше - ввести "ділянку D (бета (x, 1000000, 2000000), x) / beta (1, 1000000, 2000000) від 0,3325 до 0,334" на сайті Wolfram Alpha. Сам інтеграл розглядається з "Plot beta (x, 1000000, 2000000) / beta (1, 1000000, 2000000) від 0,3325 до 0,334".
whuber

Я побудував інтеграл, тобто pdf бета-розподілу, в Stata - він має вбудовану функцію для pdf. Для великих альфа-та бета-версій потрібно обмежити діапазон сюжету, щоб побачити його близький до нормального. Якби я сам її програмував, я б обчислював його логарифм, а потім в кінці виставляв. Це повинно допомогти у вирішенні проблем із переливом. Бета-функція в знаменнику визначається з точки зору гамма-функцій, еквівалентних факторіалам для цілої альфа-бета-версії, і багато пакунків / бібліотек включають замість / lngamma () або lnfactorial () функції, а також гамма () та факториальні () функції.
onestop

2

[l,r]lr[l,r]α,β lr як різні числа, тому цей маршрут може бути досить хорошим.


Коли альфа і бета не надто далеко один від одного (тобто альфа / бета обмежені вгорі і внизу), SD Beta [альфа, бета] пропорційний 1 / Sqrt (альфа). Наприклад, для альфа = бета = 10 ^ 6, SD дуже близький до 1 / Sqrt (8) / 1000. Я думаю, що з представленням l і r не буде проблем, навіть якщо ви використовуєте лише поодинокі поплавці точності .
whuber

106

1
Так, це шалений номер для бета-програми. До речі, ці нерівності взагалі не дадуть хороших інтервалів, оскільки вони є крайніми для всіх розподілів (задовольняючи певні обмеження).
whuber

@whuber: Ти маєш рацію, вони божевільні числа. З моїм наївним алгоритмом, "розумні" числа були легкими і працювали добре, але я не міг уявити, як обчислити це для "божевільних" параметрів. Звідси питання.
nikie

2
Гаразд, ви праві: як тільки альфа + бета перевищить 10 ^ 30 або близько того, у вас виникнуть труднощі з подвоєнням :-). (Але якщо ви представляєте l і r як відмінності від середнього альфа / (альфа + бета), вам буде добре, поки альфа або бета не перевищуватимуть приблизно 10 ^ 303.)
whuber

1

pplog(p/(1p))min(α,β)>100

Наприклад

f <- function(n, a, b) {
    p <- rbeta(n, a, b)
    lor <- log(p/(1-p))
    ks.test(lor, 'pnorm', mean(lor), sd(lor))$p.value
}
summary(replicate(50, f(10000, 100, 1000000)))

як правило, отримує подібний вихід

резюме (копія (50, f (10000, 100, 1000000))) Хв. 1-е Кв. Середнє середнє 3-е ква. Макс. 0,01205 0,10870 0,18680 0,24810 0,36170 0,68730

тобто типові р-значення становлять близько 0,2.

α=100,β=100000

p

f2 <- function(n, a, b) {
    p <- rbeta(n, a, b)
    ks.test(p, 'pnorm', mean(p), sd(p))$p.value
}
summary(replicate(50, f2(10000, 100, 1000000)))

виробляє щось подібне

summary(replicate(50, f2(10000, 100, 1000000)))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
2.462e-05 3.156e-03 7.614e-03 1.780e-02 1.699e-02 2.280e-01 

з типовими р-значеннями близько 0,01

Функція R qqnormтакож дає корисну візуалізацію, створюючи дуже прямий вигляд ділянки для розподілу журнальних коефіцієнтів, що вказує на приблизну нормальність, розподіл бета-змінної розподільної дистрибуції створює відмінну криву, що вказує на ненормальність

α,β

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.