Probabilité d'une série de k succès dans une séquence de n essais de Bernoulli


13

J'essaie de trouver la probabilité d'obtenir 8 essais consécutifs corrects dans un bloc de 25 essais, vous avez 8 blocs au total (sur 25 essais) pour obtenir 8 essais corrects d'affilée. La probabilité d'obtenir un essai correct basé sur une supposition est de 1/3, après avoir obtenu 8 réponses consécutives correctes, les blocs se termineront (donc obtenir plus de 8 réponses consécutives n'est techniquement pas possible). Comment pourrais-je trouver la probabilité que cela se produise? J'ai pensé à utiliser (1/3) ^ 8 comme probabilité d'obtenir 8 de suite correctement, il y a 17 chances possibles d'obtenir 8 de suite dans un bloc de 25 essais, si je multiplie 17 possibilités * 8 blocs que j'obtiens 136, est-ce que 1- (1- (1/3) ^ 8) ^ 136 me donnerait la probabilité d'obtenir 8 de suite correctement dans cette situation ou est-ce que je manque quelque chose de fondamental ici?


1
Je crois que le problème de l'argument avancé est que les événements considérés ne sont pas indépendants. Par exemple, considérons un seul bloc. Si je vous dis que (a) il n'y a pas de course de huit qui commence à la position 6, (b) il y a une course qui commence à la position 7 et (c) il n'y a pas de course qui commence à la position 8, qu'est-ce que cela vous dit la probabilité d'une course commençant aux positions, disons, 9 à 15?
Cardinal

Réponses:


14

En gardant une trace des choses, vous pouvez obtenir une formule exacte .

Soit 1/3 la probabilité de succès et le nombre de succès consécutifs que vous souhaitez compter. Ceux-ci sont corrigés pour le problème. Les valeurs variables sont , le nombre d'essais restant dans le bloc; et , le nombre de succès successifs déjà observés. Laissez la chance de finalement atteindre succès dans une rangée avant essais sont soit épuisés par écrit . Nous recherchons .k = 8 m j k m f p , k ( j , m ) f une / 3 , 8 (p=1/3k=8mjkmfp,k(j,m)f1/3,8(0,25)

Supposons que nous venons de voir notre succès affilée avec essais à faire. Le prochain essai est soit un succès, avec une probabilité - dans ce cas est augmenté à -; ou bien c'est un échec, avec probabilité - auquel cas est remis à . Dans les deux cas, diminue de . D'où m > 0 p j j + 1 1 - p j 0jthm>0pjj+11pj01m1

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

Comme conditions de départ, nous avons les résultats évidents pour ( c'est -à- dire que nous avons déjà vu de suite) et pour ( c'est-à - dire qu'il n'y a pas assez d'essais pour obtenir de suite). Il est maintenant rapide et simple (en utilisant la programmation dynamique ou, parce que les paramètres de ce problème sont si petits, de récursivité) de calculerm 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.

Lorsque cela donne .80 897 / 43.046.721 p=1/380897/430467210.0018793

Un Rcode relativement rapide pour simuler ceci est

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

Après 3 secondes de calcul, la sortie est . Bien que cela semble élevé, ce n'est que de 1,7 erreur standard. J'ai exécuté itérations , ce donne : seulement erreur standard de moins que prévu. (À titre de vérification, parce qu'une version antérieure de ce code un bogue subtil, j'ai également exécuté 400 000 itérations dans Mathematica, obtenant une estimation de .)100.00213 0,001867 0,3 0,00184751060.0018670.30.0018475

Ce résultat est inférieur au dixième de l'estimation de dans la question. Mais peut-être que je ne l'ai pas bien compris: une autre interprétation de "vous avez 8 blocs au total ... pour obtenir 8 essais corrects d'affilée" est que la réponse recherchée est égale à .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

Alors que l'excellente solution de programmation dynamique de @ whuber vaut la peine d'être lue, son exécution est par rapport au nombre total d'essais et à la longueur d'essai souhaitée tandis que la méthode d'exponentiation matricielle est . Si est beaucoup plus grand que , la méthode suivante est plus rapide.m k O ( k 3 log ( m ) )O(k2m)mkO(k3log(m))kmk

Les deux solutions considèrent le problème comme une chaîne de Markov avec des états représentant le nombre d'essais corrects à la fin de la chaîne jusqu'à présent, et un état pour atteindre les essais corrects souhaités d'affilée. La matrice de transition est telle que voir un échec avec la probabilité vous renvoie à l'état 0, et sinon avec la probabilité vous fait passer à l'état suivant (l'état final est un état absorbant). En élevant cette matrice à la e puissance, la valeur dans la première ligne et la dernière colonne est la probabilité de voir têtes d'affilée. En Python:1 - p n k = 8p1pnk=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))

donne 0,00187928367413 comme souhaité.


10

Selon cette réponse , j'expliquerai un peu plus l'approche Markov-Chain de @Neil G et fournirai une solution générale à de tels problèmes en R. Notons le nombre souhaité d'essais corrects consécutifs par , le nombre d'essais comme et un essai correct par (victoire) et un essai incorrect par (échec). Dans le processus de suivi des essais, vous voulez savoir si vous avez déjà eu une séquence de 8 essais corrects et le nombre d'essais corrects à la fin de votre séquence actuelle. Il y a 9 états ( ):kW F k + 1nWFk+1

8 FA : Nous avons pas eu essais corrects dans une rangée encore, et le dernier procès était .8F

8 F WB : Nous n'avons pas encore eu essais corrects d'affilée, et les deux derniers essais étaient .8FW

8 F W WC : Nous n'avons pas encore eu essais corrects d'affilée, et les trois derniers essais étaient .8FWW

8 F W W W W W W WH : Nous n'avons pas encore eu essais corrects d'affilée, et les huit derniers essais étaient .8FWWWWWWW

8I : Nous avons eu essais corrects d'affilée!8

La probabilité de passer à l' état à partir de l' état est , et avec la probabilité on reste à l' état . De l' état , la probabilité de passer à l' état est et avec une probabilité nous retourner dans . Etc. Si nous sommes dans l'état , nous y restons.A p = 1 / 3 1 - p = 2 / 3 A B C 1 / 3 2 / 3 A IBAp=1/31p=2/3ABC1/32/3AI

À partir de cela, nous pouvons construire une matrice de transition (comme chaque colonne de somme à et toutes les entrées sont positives, est appelé une matrice stochastique gauche ):M M 1 M9×9 MM1M

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

Chaque colonne et ligne correspond à un état. Après essais, les entrées de donnent la probabilité de passer de l'état (colonne) à l'état (ligne) dans essais. La colonne la plus à droite correspond à l'état et la seule entrée est dans le coin inférieur droit. Cela signifie qu'une fois que nous sommes dans l'état , la probabilité de rester dans est de . Nous nous intéressons à la probabilité d'arriver à l'état partir de l'état en étapes, ce qui correspond à l'entrée en bas à gauche denMnjinI1II1IAn=25M25(c'est-à-dire ). Il ne nous reste plus qu'à calculer . Nous pouvons le faire avec la fonction de puissance de matrice du package :M9125M25Rexpm

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

La probabilité de passer de l'état à l'état en 25 étapes est de , comme l'ont établi les autres réponses.AI0.001879284


3

Voici du code R que j'ai écrit pour simuler ceci:

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

Je reçois des valeurs un peu plus petites que votre formule, donc l'un de nous a peut-être fait une erreur quelque part.


Votre fonction comprend-elle des essais où il est impossible d'obtenir 8 de suite correctement, par exemple là où la "course" a commencé lors de l'essai 20?
Michelle

Très probablement moi, ma simulation R me donne également des valeurs plus petites. Je suis simplement curieux de savoir s'il existe une solution algébrique pour résoudre ce problème comme un simple problème de probabilité au cas où quelqu'un contesterait une simulation.
AcidNynex

1
Je pense que cette réponse serait améliorée en fournissant la sortie que vous avez obtenue afin qu'elle puisse être comparée. Bien sûr, inclure quelque chose comme un histogramme en plus serait encore mieux! Le code me semble juste à première vue. À votre santé. :)
Cardinal

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

Cela peut également être évalué directement à l'aide des fonctions intégrées Probabilityet DiscreteMarkovProcess Mathematica :

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

0.00187928

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.