Ймовірність пробігу k успіхів у послідовності n випробувань Бернуллі


13

Я намагаюся знайти вірогідність правильного 8 випробувань підряд у блоці з 25 випробувань, у вас є 8 загальних блоків (з 25 випробувань), щоб отримати 8 випробувань правильних підряд. Ймовірність виправити будь-яку пробну версію на основі здогадок дорівнює 1/3, після отримання 8 підряд правильних блоків закінчиться (тому отримати більше 8 підряд правильних технічно неможливо). Як би я міг шукати ймовірність того, що це станеться? Я думав за принципом використання (1/3) ^ 8 як ймовірності отримати 8 підряд правильним, є 17 можливих шансів отримати 8 підряд у блоці з 25 випробувань, якщо я помножую 17 можливості * 8 блоків я отримую 136, чи дасть мені 1- (1- (1/3) ^ 8) ^ 136 ймовірність отримати 8 підряд правильних у цій ситуації чи я пропускаю тут щось принципове?


1
Я вважаю, що проблема з наведеним аргументом полягає в тому, що розглянуті події не є незалежними. Наприклад, розглянемо один блок. Якщо я скажу вам, що (а) немає прогону з восьми, який починається в положенні 6, (б) є пробіг, починаючи з позиції 7, і (в) немає запуску, починаючи з позиції 8, що це говорить про вас ймовірність пробігу, починаючи з позицій, скажімо, від 9 до 15?
кардинал

Відповіді:


14

Слідкуючи за речами, ви можете отримати точну формулу .

Нехай - ймовірність успіху, а - кількість успіхів у ряді, який потрібно підрахувати. Вони виправлені для проблеми. Змінні значення , кількість випробувань, залишених у блоці; і - кількість послідовних успіхів, що вже спостерігаються. Нехай шанс в кінцевому підсумку досягти успіхів підряд до вичерпання випробувань записаний . Шукаємо .до = 8 м J до м е р , до ( J , т ) е 1 / 3 , 8 ( 0 , 25 )p=1/3k=8mjkmfp,k(j,m)f1/3,8(0,25)

Припустимо, ми щойно бачили наш успіх поспіль з випробуваннями. Наступне випробування або є успішним, з ймовірністю --в тому випадку збільшується до -; інакше це збій, з ймовірністю --в тому випадку скидається до . В будь-якому випадку зменшується на . Звідси m > 0 p j j + 1 1 - p j 0 m 1jthm>0pjj+11pj0m1

fp,k(j,m)=pfp,k(j+1,m1)+(1p)fp,k(0,m1).

Як початкові умови ми маємо очевидні результати для ( тобто ми вже бачили підряд) і для ( тобто не вистачає випробувань, щоб отримати підряд). Тепер обчислити це швидко та просто (використовуючи динамічне програмування або, оскільки параметри цієї проблеми такі маленькі, рекурсія)m 0 k f p , k ( j , m ) = 0 k - j > m kfp,k(k,m)=1m0kfp,k(j,m)=0kj>mk

fp,8(0,25)=18p817p945p16+81p1736p18.

Коли це дає .80897 / +43046721 0,0018793p=1/380897/430467210.0018793

Відносно швидкий Rкод для моделювання цього

hits8 <- function() {
    x <- rbinom(26, 1, 1/3)                # 25 Binomial trials
    x[1] <- 0                              # ... and a 0 to get started with `diff`
    if(sum(x) >= 8) {                      # Are there at least 8 successes?
        max(diff(cumsum(x), lag=8)) >= 8   # Are there 8 successes in a row anywhere?
    } else {
        FALSE                              # Not enough successes for 8 in a row
    }
}
set.seed(17)
mean(replicate(10^5, hits8()))

Через 3 секунди обчислення, вихід становить . Хоча це виглядає високо, вимкнено лише 1,7 стандартних помилок. Я провів ще ітерацій, даючи : лише на стандартних помилок менше, ніж очікувалося. (В якості подвійної перевірки, оскільки попередня версія цього коду мала тонку помилку, я також запустив 400 000 ітерацій в Mathematica, отримавши оцінку .)10 6 0,001867 0,3 0,00184750.002131060.0018670.30.0018475

Цей результат становить менше однієї десятої частини оцінки у питанні. Але, мабуть, я не до кінця зрозумів це: інше тлумачення "у вас є 8 загальних блоків ... щоб отримати 8 випробувань правильними підряд", полягає в тому, що шукана відповідь дорівнює .1 - ( 1 - е 1 / 3 , 8 ( 0 , 25 ) ) 8 ) = 0.0149358 ...1(1(1/3)8)1360.02051(1f1/3,8(0,25))8)=0.0149358...


13

Хоча чудове рішення щодо динамічного програмування @ whuber заслуговує на читання, час його виконання становить щодо загальної кількості випробувань m та бажаної тривалості проби k, тоді як метод експозиції матриці - O ( k 3 log ( m ) ) . Якщо m набагато більший за k , наступний метод швидший.O(k2m)mkO(k3log(m))mk

Обидва рішення розглядають проблему як ланцюг Маркова зі станами, що представляють кількість правильних випробувань на кінці рядка досі, і стан досягнення бажаних правильних випробувань підряд. Матриця переходу така, що побачивши відмову з ймовірністю поверне вас у стан 0, а в іншому випадку з ймовірністю 1 - р переведе вас у наступний стан (остаточний стан є поглинаючим станом). Піднявши цю матрицю до n- ї потужності, значення в першому рядку та в останньому стовпчику - це ймовірність побачити k = 8 голов підряд. На Python:p1pnk=8

import numpy as np

def heads_in_a_row(flips, p, want):
    a = np.zeros((want + 1, want + 1))
    for i in range(want):
        a[i, 0] = 1 - p
        a[i, i + 1] = p
    a[want, want] = 1.0
    return np.linalg.matrix_power(a, flips)[0, want]

print(heads_in_a_row(flips=25, p=1.0 / 3.0, want=8))

дає 0,00187928367413 за бажанням.


10

Відповідно до цієї відповіді , я трохи більше поясню підхід Маркова-Ланця від @Neil G і запропоную загальне рішення таких проблем у R. Позначимо бажану кількість правильних випробувань підряд по , кількість випробувань як n і правильний випробування W (win), а неправильне випробування - F (fail). У процесі відстеження випробувань ви хочете дізнатися, чи вже у вас було коло 8 правильних випробувань та кількість правильних випробувань наприкінці поточної послідовності. Є 9 станів ( k + 1 ):knWFk+1

: У нас не було 8 правильних випробувань поспіль ще й останнє випробування було F .A8F

: У нас не було 8 правильних випробувань поспільж, і останні два випробування були F W .B8FW

: У нас не було 8 правильних випробувань поспільж, і останні три випробування були F W W .C8FWW

: У нас не було 8 правильних випробувань поспільж, і останні вісім випробувань були F W W W W W W W .H8FWWWWWWW

: У нас було 8 правильних випробувань поспіль!I8

Імовірність переходу до державної зі стану A є р = 1 / 3 , і з імовірністю 1 - р = 2 / 3 , ми залишатися в державній A . Зі стану B , ймовірність переходу до державного C становить 1 / 3 і з ймовірністю 2 / 3 ми переходимо назад до A . І так далі. Якщо ми перебуваємо в державі I , ми залишаємось там.BAp=1/31p=2/3ABC1/32/3AI

З цього ми можемо побудувати матриці переходу M (оскільки кожен стовпець M підсумовує до 1, а всі записи позитивні, M називається лівою стохастичною матрицею ):9×9 MM1M

M=(2/32/32/32/32/32/32/32/301/30000000001/30000000001/30000000001/30000000001/30000000001/30000000001/30000000001/31)

Кожен стовпець і рядок відповідає одному стану. Після випробувань записи M n дають ймовірність переходу зі стану j (стовпець) у стан i (рядок) у n випробувань. Крайній правий стовпець відповідає стану I, і єдиний запис - 1 у правому нижньому куті. Це означає, що як тільки ми перебуваємо в стані I , ймовірність залишитися в I дорівнює 1 . Нас цікавить ймовірність переходу в стан I зі стану A за n = 25 кроків, що відповідає нижньому лівому записуnMnjinI1II1IAn=25 (тобто М 25 91 ). Все, що нам зараз потрібно зробити - це обчислити M 25 . Це можна зробити задопомогою функції живлення матриці зпакета:M25M9125M25Rexpm

library(expm)

k <- 8   # desired number of correct trials in a row
p <- 1/3 # probability of getting a correct trial
n <- 25  # Total number of trials 

# Set up the transition matrix M

M <- matrix(0, k+1, k+1)

M[ 1, 1:k ] <- (1-p)

M[ k+1, k+1 ] <- 1

for( i in 2:(k+1) ) {

  M[i, i-1] <- p

}

# Name the columns and rows according to the states (A-I)

colnames(M) <- rownames(M) <- LETTERS[ 1:(k+1) ]

round(M,2)

     A    B    C    D    E    F    G    H I
A 0.67 0.67 0.67 0.67 0.67 0.67 0.67 0.67 0
B 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0
C 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0
D 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0
E 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0
F 0.00 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0
G 0.00 0.00 0.00 0.00 0.00 0.33 0.00 0.00 0
H 0.00 0.00 0.00 0.00 0.00 0.00 0.33 0.00 0
I 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.33 1

# Calculate M^25

Mn <- M%^%n
Mn[ (k+1), 1 ]
[1] 0.001879284

Ймовірність переходу зі стану в стан I за 25 кроків становить 0,001879284 , як це встановлено іншими відповідями.AI0.001879284


3

Ось декілька код R, який я написав, щоб імітувати це:

tmpfun <- function() {
     x <- rbinom(25, 1, 1/3)  
     rx <- rle(x)
     any( rx$lengths[ rx$values==1 ] >= 8 )
}

tmpfun2 <- function() {
    any( replicate(8, tmpfun()) )
}

mean(replicate(100000, tmpfun2()))

Я отримую значення трохи менші, ніж ваша формула, тому хтось із нас, можливо, десь помилився.


Чи включає Ваша функція випробування, коли неможливо отримати 8 підряд правильно, наприклад, де "пробіг" розпочався з пробної 20?
Мішель

Швидше за все, моє R моделювання дає мені і менші значення. Мені просто цікаво, чи є алгебраїчне рішення, яке може вирішити це як просте питання ймовірності у випадку, якщо хтось оскаржує моделювання.
AcidNynex

1
Я думаю, що цю відповідь можна було б покращити, надавши отриманий результат, щоб можна було порівняти. Звичайно, включити щось на зразок гістограми додатково було б ще краще! Код мені здається з першого погляду. Ура. :)
кардинал

3

10

M = Table[e[i, j] /. {
    e[9, 1] :> 0,
    e[9, 9] :> 1,
    e[_, 1] :> (1 - p),
    e[_, _] /; j == i + 1 :> p,
    e[_, _] :> 0
  }, {i, 1, 9}, {j, 1, 9}];

x = MatrixPower[M, 25][[1, 9]] // Expand

18p817p945p16+81p1736p18

p=1.03.0

x /. p -> 1/3 // N

0.00187928

Це також можна оцінити безпосередньо, використовуючи вбудовані Probabilityта функції DiscreteMarkovProcess Mathematica :

Probability[k[25] == 9, Distributed[k, DiscreteMarkovProcess[1, M /. p -> 1/3]]] // N

0.00187928

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