N Bernoulli denemelerinde bir dizi başarı elde etme olasılığı


13

25 deneme bloğunda bir satırda 8 deneme doğru alma olasılığını bulmaya çalışıyorum, arka arkaya 8 deneme doğru almak için 8 toplam blok (25 deneme) var. Tahminlere dayalı olarak herhangi bir denemeyi doğru yapma olasılığı 1/3'tür, arka arkaya 8 tane doğru girdikten sonra bloklar sona erer (bu nedenle doğru bir sırada 8'den fazla elde etmek teknik olarak mümkün değildir). Bunun gerçekleşme olasılığını nasıl bulabilirim? (1/3) ^ 8'i arka arkaya 8 alma olasılığı olarak kullanma çizgisi boyunca düşündüm, eğer 17 çarpma yaparsam, 25 deneme bloğunda arka arkaya 8 almak için 17 olası şans var. olasılıklar * 8 blok 136 olsun, 1- (1- (1/3) ^ 8) ^ 136 bana bu durumda arka arkaya 8 doğru alma olasılığını verir veya burada temel bir şey eksik mi?


1
Verilen argümandaki sorunun, düşünülen olayların bağımsız olmaması olduğuna inanıyorum. Örneğin, tek bir blok düşünün. I (a) 6 konumundaki başlar, (b) oradaki sekiz hiçbir çalışma olmadığını söylersem olan bu konuda size ne söyler pozisyon 7 ve (c) 8 konumundaki başlayan hiçbir çalışma yoktur başlayan bir çalışma, 9 ile 15 arasındaki pozisyonlarda başlayan bir koşunun olasılığı?
kardinal

Yanıtlar:


14

Bir şeyleri takip ederek tam bir formül elde edebilirsiniz .

Let başarı ve olasılık olması k = 8 saymak istediğiniz bir satırda başarıların sayısını olun. Bunlar sorun için düzeltildi. Değişken değerler m , blokta kalan deneme sayısı; ve j , daha önce gözlemlenen ardışık başarıların sayısı. M denemeleri tükenmeden nihayetinde üst üste k başarılarına ulaşma şansı f p , k ( j , m ) olarak yazılmalıdır . Biz aramaya f 1 / 3 , 8 (p=1/3k=8mjkmfp,k(j,m) .f1/3,8(0,25)

Biz sadece bizim gördüğümüz varsayalım ile üst üste başarı m > 0 denemeler gitmek. Bir sonraki deneme ya bir başarıdır, p - in olasılığı j'dir; bu durumda j , j + 1 - 'e yükseltilir ; ya da bu bir başarısızlıktır, olasılık 1 - p --'de, bu durumda j , 0'a sıfırlanır . Her iki durumda da, m 1 azalır . Neredenjthm>0pjj+11pj0m1

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

Başlangıç koşullarına olarak, belirgin sonuçlar için m 0 ( yani , daha önce gördüğümüz k arka arkaya) ve f p , k ( j , m ), = 0 için k - j > m ( yani , k elde etmek için yeterli deneme yokfp,k(k,m)=1m0kfp,k(j,m)=0kj>mküst üste). Şimdi hızlı ve anlaşılır (dinamik programlama kullanarak veya bu sorunun parametreleri çok küçük olduğu için, özyineleme)

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

Zaman , bu verimler 80897 / 43.046.721 0,0018793 .p=1/380897/430467210.0018793

RBunu simüle etmek için nispeten hızlı kod

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 saniyelik hesaplamadan sonra çıktı . Bu yüksek görünse de, sadece 1.7 standart hata kapalı. Başka bir 10 6 yineleme çalıştırdım ve 0,001867 verdi : beklenenden sadece 0,3 standart hata daha az. (Bir çift kontrol olarak, bu kodun önceki bir sürümünde ince bir hata olduğu için, Mathematica'da 400.000 yineleme çalıştırdım ve tahmini 0.0018475 elde ettim .)0.002131060.0018670.30.0018475

Bu sonuç, daha az onda biri tahmin daha söz konusu. Ama belki ben tam olarak anlaşılmış değil: "Eğer 8 denemeler arka arkaya düzeltmek almak için 8 toplam bloklar var ..." başka yorumudur cevap varlık eşittir aranan o 1 - ( 1 - f 1 / 3 , 8 ( 0 , 25 ) ) 8 ) = 0,0149358 ... .1(1(1/3)8)1360.02051(1f1/3,8(0,25))8)=0.0149358...


13

O(k2m)mkO(k3log(m))mk

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))

istendiği gibi 0.00187928367413 verir.


10

RknWFk+1

A8F

B8FW

C8FWW

H8FWWWWWWW

I8

BAp=1/31p=2/3ABC1/32/3AI

9×9 MM1M

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

nMnjinI1II1IAn=25M25M9125M25Rexpm

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

AI0.001879284


3

İşte bunu simüle etmek için yazdım bazı R kodu:

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()))

Formülünüzden biraz daha küçük değerler alıyorum, bu yüzden birimiz bir yerde bir hata yapmış olabiliriz.


İşlevin, arka arkaya 8 elde etmenin imkansız olduğu denemeleri içeriyor mu, örneğin "deneme" nin 20. denemede başladığı yer?
Michelle

Büyük olasılıkla ben, R simülasyonum bana daha küçük değerler veriyor. Birisinin bir simülasyona itiraz etmesi durumunda bunu basit bir olasılık sorunu olarak çözmek için bir cebirsel çözüm olup olmadığını merak ediyorum.
AcidNynex

1
Bence elde ettiğiniz çıktıyı karşılaştırabilmeniz için bu cevap geliştirilecektir. Tabii ki, histogram gibi bir şey eklemek de daha iyi olurdu! İlk bakışta kod bana doğru görünüyor. Şerefe. :)
kardinal

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

değerinde değerlendirmep=1.03.0

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

0.00187928

Bu ayrıca yerleşik Probabilityve DiscreteMarkovProcess Mathematica işlevleri kullanılarak doğrudan değerlendirilebilir :

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

0.00187928

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.