Probabilità di una serie di successi in una sequenza di prove di n Bernoulli


13

Sto cercando di trovare la probabilità di ottenere 8 prove di fila corrette in un blocco di 25 prove, hai 8 blocchi totali (di 25 prove) per ottenere 8 prove corrette di fila. La probabilità di ottenere una prova corretta basata sull'ipotesi è 1/3, dopo aver corretto 8 di fila i blocchi finiranno (quindi tecnicamente non è possibile ottenere più di 8 di fila). Come farei per trovare la probabilità che ciò accada? Ho pensato di usare (1/3) ^ 8 come probabilità di ottenere 8 di fila corretti, ci sono 17 possibili possibilità di ottenere 8 di fila in un blocco di 25 prove, se moltiplico 17 possibilità * 8 blocchi ottengo 136, 1- (1- (1/3) ^ 8) ^ 136 mi darebbe la probabilità di ottenere 8 di fila corretti in questa situazione o mi sto perdendo qualcosa di fondamentale qui?


1
Credo che il problema con l'argomento dato sia che gli eventi considerati non sono indipendenti. Ad esempio, considera un singolo blocco. Se ti dico che (a) non v'è alcun percorso di otto che inizia a posizione 6, (b) v'è una corsa a partire dalla posizione 7 e (c) non v'è nessuna corsa a partire dalla posizione 8, cosa che vi parli di la probabilità di una corsa che parte da posizioni, diciamo da 9 a 15?
cardinale il

Risposte:


14

Tenendo traccia delle cose è possibile ottenere una formula esatta .

Lasciate che p=1/3 la probabilità di successo e k=8 il numero di successi di fila che si desidera contare. Questi sono stati risolti per il problema. I valori delle variabili sono m , il numero di prove rimaste nel blocco; e j , il numero di successi successivi già osservato. Lasciate che la possibilità di raggiungere alla fine k successi di fila prima di m prove sono esauriranno scritto fp,k(j,m) . Cerchiamo f1/3,8(0,25) .

Supponiamo di avere appena visto la nostra jth successo di fila con m>0 prove di andare. La prossima prova è un successo, con probabilità p - nel qual caso j viene aumentato a j+1 -; altrimenti è un errore, con probabilità 1p - nel qual caso j viene resettato a 0 . In entrambi i casi, m diminuisce di 1 . da cui

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

Come condizioni iniziali abbiamo i risultati ovvi fp,k(k,m)=1 per m0 ( ovvero , abbiamo già visto k in una riga) e fp,k(j,m)=0 per kj>m ( cioè , non ci sono prove sufficienti per ottenere kdi fila). Ora è veloce e semplice (utilizzando la programmazione dinamica o, poiché i parametri di questo problema sono così piccoli, ricorsione) da calcolare

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

Quando questo rendimenti 80897 / 43,046721 millions ,0018,793 mila .p=1/380897/430467210.0018793

Il Rcodice relativamente veloce per simulare questo è

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

Dopo 3 secondi di calcolo, l'output è . Anche se questo sembra alto, sono solo 1,7 gli errori standard off. Ho eseguito altre 10 6 iterazioni, ottenendo 0,001867 : solo 0,3 errori standard in meno del previsto. (Come doppio controllo, poiché una versione precedente di questo codice aveva un bug sottile, ho anche eseguito 400.000 iterazioni in Mathematica, ottenendo una stima di 0,0018475 .)0.002131060.0018670.30.0018475

Questo risultato è meno di un decimo la stima di nella domanda. Ma forse non ho pienamente capito: un'altra interpretazione di "si dispone di 8 blocchi totali ... per ricevere 8 prove correggere di fila" è che l'essere risposta cercata eguali 1 - ( 1 - f 1 / 3 , 8 ( 0 , 25 ) ) 8 ) = ,0149,358 mila ... .1(1(1/3)8)1360.02051(1f1/3,8(0,25))8)=0.0149358...


13

Mentre l'eccellente soluzione di programmazione dinamica di @ whuber merita una lettura, il suo tempo di esecuzione è rispetto al numero totale di prove me la lunghezza di prova desiderata k mentre il metodo di esponenziazione della matrice è O ( k 3 log ( m ) ) . Se m è molto più grande di k , il seguente metodo è più veloce.O(k2m)mkO(k3log(m))mk

Entrambe le soluzioni considerano il problema come una catena di Markov con stati che rappresentano finora il numero di prove corrette alla fine della stringa e uno stato per ottenere le prove corrette desiderate di seguito. La matrice di transizione è tale che vedere un errore con probabilità ti riporta allo stato 0, e altrimenti con probabilità 1 - p ti porta allo stato successivo (lo stato finale è uno stato assorbente). Elevando questa matrice al n esima potenza, il valore nella prima riga e ultima colonna è la probabilità di vedere k = 8 teste di fila. In 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))

restituisce 0,00187928367413 come desiderato.


10

Secondo questa risposta , spiegherò un po 'di più l'approccio Markov-Chain di @Neil G e fornirò una soluzione generale a tali problemi R. Indichiamo il numero desiderato di prove corrette di fila per , il numero di prove come n e una prova corretta di W (vittoria) e una prova errata di F (esito negativo). Nel processo di tenere traccia delle prove, vuoi sapere se hai già avuto una serie di 8 prove corrette e il numero di prove corrette alla fine della sequenza corrente. Ci sono 9 stati ( k + 1 ):knWFk+1

: Non abbiamo avuto 8 prove corrette di fila ma, e l'ultimo processo è stato F .A8F

: Non abbiamo avuto 8 prove corrette in fila ancora, e gli ultimi due prove erano F W .B8FW

: Non abbiamo avuto 8 prove corrette in fila ancora, e gli ultimi tre prove erano F W W .C8FWW

: Non abbiamo avuto 8 prove corrette in fila ancora, e gli ultimi otto prove erano F W W W W W W W .H8FWWWWWWW

: Abbiamo avuto 8 prove corrette di seguito!I8

La probabilità di passare allo stato dallo stato A è p = 1 / 3 e con probabilità 1 - p = 2 / 3 restiamo in stato di A . Dallo stato B , la probabilità di passare allo stato C è 1 / 3 e con probabilità 2 / 3 si muovono di nuovo a A . E così via. Se siamo nello stato I , restiamo lì.BAp=1/31p=2/3ABC1/32/3AI

From this, we can construct a 9×9 transition matrix M (as each column of M sums to 1 and all entries are positive, M is called a left stochastic matrix):

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

Each column and row corresponds to one state. After n trials, the entries of Mn give the probability of getting from state j (column) to state i (row) in n trials. The rightmost column corresponds to the state I and the only entry is 1 in the right lower corner. This means that once we are in state I, the probability to stay in I is 1. We are interested in the probability of getting to state I from state A in n=25 steps which corresponds to the lower left entry of M25 (i.e. M9125). All we have to do now is calculating M25. We can do that in R with the matrix power function from the expm package:

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

The probability of getting from state A to state I in 25 steps is 0.001879284, as established by the other answers.


3

Here is some R code that I wrote to simulate this:

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

I am getting values a little smaller than your formula, so one of us may have made a mistake somewhere.


Does your function include trials where it is impossible to get 8 in a row right, e.g. where the "run" started on trial 20?
Michelle

Most likely me, my R simulation is giving me smaller values as well. I'm just curious if there is an algebraic solution to solve this as a simple probability issue in case someone disputes a simulation.
AcidNynex

1
I think this answer would be improved by providing the output you obtained so that it can be compared. Of course, including something like a histogram in addition would be even better! The code looks right to me at first glance. Cheers. :)
cardinale il

3

Here is a Mathematica simulation for the Markov chain approach, note that Mathematica indexes by 1 not 0:

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

This would yield the analytical answer:

18p817p945p16+81p1736p18

Evaluating at p=1.03.0

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

Will return 0.00187928

This can also be evaluated directly using builtin Probability and DiscreteMarkovProcess Mathematica functions:

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

Which will get us the same answer: 0.00187928

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.