Distribution de probabilité pour différentes probabilités


36

Si je voulais obtenir la probabilité de 9 succès sur 16 essais, chaque essai ayant une probabilité de 0,6, je pourrais utiliser une distribution binomiale. Que pourrais-je utiliser si chacun des 16 essais a une probabilité de succès différente?


1
@whuber Dans votre explication de l'approximation normale, les calculs de la moyenne et de l'écart type sont différents de ceux décrits dans Wikipedia. Dans Wiki, la moyenne est np et l'écart-type est np (1-p). Ainsi, dans ce problème, pour l'approximation normale de la probabilité de succès variable dans la distribution binomiale, la moyenne est p1 + p2 + p3 + p4 + p5 + ... + pi et la variance est p1 (1-p1) + p2 ( 1-p2) + ... + pi (1-pi). Ai-je raison?
David

1
Voir Wikipedia sur la distribution binomiale de Poisson . Également un terme de recherche qui donne quelques résultats ici.
Glen_b -Reinstate Monica

@David Lorsque tous les pi sont égaux à une valeur commune p , alors p1+p2++pn=np et p1(1p1)++pn(1pn)=np(1p) , ce qui montre que la description de Wikipédia à laquelle vous faites référence n’est qu’un cas particulier.
whuber


Réponses:


22

C'est la somme de 16 procès binomiaux (supposés indépendants). L'hypothèse d'indépendance nous permet de multiplier les probabilités. Après deux essais avec probabilités de succès p1 et p2 les chances de succès des deux essais sont p1p2 , les chances de ne pas réussir sont (1p1)(1p2) , et les chances de un succès est p1(1p2)+(1p1)p2 . Cette dernière expression doit sa validité au fait que les deux manières d'obtenir exactement un succès sont mutuellement exclusives: au plus une d'entre elles peut réellement se produire. Cela signifie que leurs probabilitésajoutent.

Au moyen de ces deux règles - les probabilités indépendantes se multiplient et les exclusives s'ajoutent - vous pouvez trouver les réponses pour, par exemple, 16 essais avec probabilités . Pour ce faire, vous devez prendre en compte tous les moyens d’obtenir chaque nombre de succès (tel que 9). Il existe façons d’obtenir 9 succès. L'une d'elles, par exemple, se produit lorsque les essais 1, 2, 4, 5, 6, 11, 12, 14 et 15 sont des succès et que les autres sont des échecs. Les succès avaient des probabilités et et les échecs avaient des probabilitésp1,,p16p1,p2,p4,p5,p6,p11,p12,p14,p151-p3,1-p7,,1-p13,1-p16(169)=11440p1,p2,p4,p5,p6,p11,p12,p14,p151p3,1p7,,1p13,1p16. La multiplication de ces 16 nombres donne la chance de cette séquence particulière de résultats. La somme de ce nombre et des 11 439 restants donne la réponse.

Bien sûr, vous utiliseriez un ordinateur.

Avec beaucoup plus de 16 essais, il est nécessaire d'estimer la distribution. Si aucune des probabilités et devient trop petite, une approximation normale a tendance à bien fonctionner. Avec cette méthode, vous remarquerez que l’attente de la somme de essais est de et (étant donné que les essais sont indépendants) la variance est de . Vous prétendez alors que la distribution des sommes est normale avec une moyenne et un écart-type . Les réponses tendent à être bonnes pour calculer des probabilités correspondant à une proportion de succès différente de 1 - p i n μ = p 1 + p 2 + + p n σ 2 = p 1 ( 1 - p 1 ) + p 2 ( 1 - p 2 ) + + p n ( 1 - p n ) μ σ μ σ n σ μpi1pinμ=p1+p2++pnσ2=p1(1p1)+p2(1p2)++pn(1pn)μσμ par pas plus que quelques multiples de . Au fur et à mesure que grandit, cette approximation devient de plus en plus précise et fonctionne pour des multiples encore plus grands de loin de .σnσμ


9
Les informaticiens appellent ces "essais de Poisson" pour les distinguer des essais de Bernoulli. Outre les approximations du théorème de la limite centrale, il existe également de bonnes limites de queues disponibles. En voici un. Les recherches de Google sur "Les limites de Chernoff pour les essais de Poisson" donneront les résultats que vous pourriez trouver dans un traitement CS typique.
cardinal

@ Cardinal Cette nomenclature est intéressante. Il serait valable pour un très petit , mais semble par ailleurs trompeur, car la distribution n'est pas bien approximée par les distributions de Poisson. (Il y a une autre discussion sur le CV à propos de cette question, où "16" est remplacé par 10 000 et nous examinons les probabilités pi
extrêmes

1
oui, je suis d'accord sur le nom. Je l'ai trouvé un peu étrange quand je l'ai rencontré pour la première fois. Je l'ai donné ici plus comme un terme utile pour la recherche. Il semble que les informaticiens considèrent ces probabilités souvent dans le traitement de certains algorithmes. Je serais intéressé à lire cette autre question si vous la trouvez. Est- ce celui - ci peut-être?
cardinal

2
@ cardinal a raison de dire que nous, les "CS", les appelons procès de Poisson. En fait, dans ce cas, une borne standard de Chernoff-Hoeffding vous donnera exactement la limite demandée par le PO.
Suresh Venkatasubramanian

1
Selon le commentaire de @David hier, il y a quelque chose qui cloche dans votre déclaration de la moyenne approximative normale comme Nous additionnons 16 va-et-vient de Bernoulli, chacun pouvant prendre une valeur 0 ou 1, donc la somme aura un domaine de support de 0 à 16, pas entre 0 et 1. Cela vaut également la peine de vérifier votre SD.
μ=(p1+p2++pn)/n
Wolfies

12

Une alternative à l'approximation normale de @ whuber consiste à utiliser des probabilités de "mélange", ou un modèle hiérarchique. Ceci s’appliquerait lorsque les seraient similaires d’une certaine manière, et vous pouvez modéliser cela par une distribution de probabilité avec une fonction de densité de indexée par un paramètre . vous obtenez une équation intégrale:p iD i s t ( θ ) g ( p | θ ) θpipiDist(θ)g(p|θ)θ

Pr(s=9|n=16,θ)=(169)01p9(1p)7g(p|θ)dp

La probabilité binomiale provient de la configuration , l'approximation normale provient de (je pense) la configuration (avec et comme défini dans la réponse de @ whuber) et en notant le " queues "de ce PDF tombent brusquement autour du sommet.g ( p | θ ) = g ( p | μ , σ ) = 1g(p|θ)=δ(pθ)μσg(p|θ)=g(p|μ,σ)=1σϕ(pμσ)μσ

Vous pouvez également utiliser une distribution bêta, qui conduirait à une forme analytique simple et qui ne doit pas souffrir du problème du "petit p" que l’approximation normale fait, car la version bêta est très flexible. Utilisation d'une distribution avec définie par les solutions des équations suivantes (il s'agit des estimations de la "divergence minimale de KL"):α , βbeta(α,β)α,β

ψ(β)-ψ(α+β)=1

ψ(α)ψ(α+β)=1ni=1nlog[pi]
ψ(β)ψ(α+β)=1ni=1nlog[1pi]

Où Est la fonction digamma - étroitement liée aux séries harmoniques.ψ(.)

Nous obtenons la distribution du composé "beta-binomial":

(169)1B(α,β)01p9+α1(1p)7+β1dp=(169)B(α+9,β+7)B(α,β)

Cette distribution converge vers une distribution normale dans le cas où les points de @whuber - mais devrait donner des réponses raisonnables pour les petites et biaisé - mais pas pour multimodal , de la distribution bêta a un seul pic. Mais vous pouvez facilement résoudre ce problème en utilisant simplement les distributions bêta pour les modesVous divisez l'intégrale de en morceaux de sorte que chaque morceau ait un mode unique (et suffisamment de données pour estimer les paramètres) et adaptez une distribution bêta à l'intérieur de chaque morceau. puis additionnez les résultats, en notant que le changement de variables pourp i p i M M 0 < p < 1 M p = x - LnpipiMM0<p<1M L<x<Up=xLULL<x<U l'intégrale bêta se transforme en:

B(α,β)=LU(xL)α1(Ux)β1(UL)α+β1dx

+1 Cette réponse contient des suggestions intéressantes et intelligentes. Le dernier semble particulièrement flexible et puissant.
whuber

Pour prendre quelque chose de très simple et concret, supposons (i) et (ii) , pour à 16. Quelle serait la solution vos estimations et , et donc vos estimations pour étant donné , conformément au problème du PO? pi=i17pi=i/17i=1αβP(X=9)n=16
loups

Grande réponse et proposition, en particulier la version bêta! Ce serait cool de voir cette réponse écrite sous sa forme générale avec et . ns
pglpm

8

Soit ~ avec fonction génératrice de probabilité (pgf):XiBernoulli(pi)

pgf=E[tXi]=1pi(1t)

Soit désignons la somme de telles variables aléatoires indépendantes. Alors, le pgf pour la somme de telles variables est:S=i=1nXinSn=16

pgfS=E[tS]=E[tX1]E[tX2]E[tX16] (... by independence)=i=116(1pi(1t))

Nous cherchons , qui est:P(S=9)

19!d9pgfSdt9|t=0

TERMINÉ. Ceci produit la solution symbolique exacte en fonction du . La réponse est assez longue à imprimer à l’écran, mais elle est tout à fait traitable et prend moins de de seconde pour être évaluée à l’aide de Mathematica sur mon ordinateur.pi1100

Exemples

Si , alors: pi=i17,i=1 to 16P(S=9)=964794185433480818448661191875666868481=0.198268

Si , alors: pi=i17,i=1 to 16P(S=9)=0.000228613

Plus de 16 essais?

Avec plus de 16 essais, il n'est pas nécessaire d'estimer la distribution. La méthode exacte ci-dessus fonctionne aussi facilement pour des exemples avec disons ou . Par exemple, lorsque , il faut moins de ème de seconde pour évaluer la totalité du pmf ( c'est- à- dire à chaque valeur ) à l'aide du code ci-dessous.n=50n=100n=50110s=0,1,,50

Code Mathematica

Étant donné un vecteur de valeurs , disons:pi

n = 16;   pvals = Table[Subscript[p, i] -> i/(n+1), {i, n}];

... voici du code Mathematica pour tout faire:

pgfS = Expand[ Product[1-(1-t)Subscript[p,i], {i, n}] /. pvals];
D[pgfS, {t, 9}]/9! /. t -> 0  // N

0,198268

Pour dériver le PMF entier:

Table[D[pgfS, {t,s}]/s! /. t -> 0 // N, {s, 0, n}]

... ou utilisez le encore plus propre et plus rapide (grâce à une suggestion de Ray Koopman ci-dessous):

CoefficientList[pgfS, t] // N

Pour un exemple avec , le calcul ne prend que 1 seconde , puis 0,002 seconde pour dériver la totalité du pmf , ce qui le rend extrêmement efficace.n=1000pgfSCoefficientList


1
Cela peut être encore plus simple. With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]]donne la probabilité de 9 succès et With[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]]donne les probabilités de 0, ..., 16 succès.
Ray Koopman

@ RayKoopman C'est cool. Le Tablepour les valeurs est intentionnel pour permettre des formes plus générales ne convenant pas à . Votre utilisation de est très agréable! J'ai ajouté un code au-dessus qui accélère énormément l'approche directe. Même si, est encore plus rapide qu'un . Cela ne fait pas beaucoup de différence pour moins de 50 ans (les deux approches ne prennent qu'une fraction de seconde dans un sens ou dans l’autre pour générer l’ensemble des pmf), mais vous aurez également un réel avantage pratique lorsque n est vraiment grand. npRangeCoefficientListExpandCoefficientListParallelTablenCoefficientList
loups

5

@wolfies commenter, et ma tentative de réponse à celle-ci a révélé un problème important avec mon autre réponse, dont je parlerai plus tard.

Cas spécifique (n = 16)

Il existe un moyen assez efficace de coder la distribution complète en utilisant le "truc" consistant à utiliser des nombres de base 2 (binaires) dans le calcul. Il suffit de 4 lignes de code R pour obtenir la distribution complète de où . Fondamentalement, il existe un total de choix du vecteur que les variables binaires pourrait prendre. Supposons maintenant que nous numérotons chaque choix distinct de à . Cela en soi n’a rien de spécial, mais supposons maintenant que nous représentions le "nombre de choix" en utilisant l’arithmétique en base 2. Maintenant, prenons pour que je puisse écrire tous les choix, donc il y aY=i=1nZiPr(Zi=1)=pi2nz=(z1,,zn)Zi12nn=323=8les choix. Ensuite, en "nombres ordinaires" devient en "nombres binaires". Supposons maintenant que nous ces nombres sous forme de nombres à quatre chiffres, puis que nous ayons . Examinons maintenant les derniers chiffres de chaque numéro - peut être considéré comme , etc. Le comptage sous forme binaire constitue un moyen efficace d'organiser la sommation. . Heureusement, il existe une fonction R qui peut effectuer cette conversion binaire pour nous, appelée et nous convertissons la forme binaire brute en un via numérique , nous obtiendrons alors un vecteur avec1,2,3,4,5,6,7,81,10,11,100,101,110,111,10000001,0010,0011,0100,0101,0110,0111,10003001(Z1=0,Z2=0,Z3=1)Y=1intToBits(x)as.numeric(intToBits(x))32éléments, chaque élément étant le chiffre de la version base 2 de notre numéro (lu de droite à gauche, pas de gauche à droite). En combinant cette astuce avec d'autres vectorisations R, nous pouvons calculer la probabilité que sur 4 lignes de code R:y=9

exact_calc <- function(y,p){
    n       <- length(p)
    z       <- t(matrix(as.numeric(intToBits(1:2^n)),ncol=2^n))[,1:n] #don't need columns n+1,...,32 as these are always 0
    pz      <- z%*%log(p/(1-p))+sum(log(1-p))
    ydist   <- rowsum(exp(pz),rowSums(z))
    return(ydist[y+1])
}

Le branchement de la casse uniforme et de la casse racine racine donne une distribution complète pour y comme:pi(1)=i17pi(2)=i17

yPr(Y=y|pi=i17)Pr(Y=y|pi=i17)00.00000.055810.00000.178420.00030.265230.00260.243040.01390.153650.04910.071060.11810.024870.19830.006780.23530.001490.19830.0002100.11810.0000110.04910.0000120.01390.0000130.00260.0000140.00030.0000150.00000.0000160.00000.0000

Donc , pour le problème spécifique de succès dans essais, les calculs exacts sont simple. Cela fonctionne également pour un nombre de probabilités allant jusqu'à environ - au-delà de cela, vous allez probablement commencer à rencontrer des problèmes de mémoire, et différentes astuces informatiques sont nécessaires.y16n=20

Notez qu'en appliquant ma "distribution bêta" suggérée, nous obtenons des estimations de paramètres de , ce qui donne une estimation de probabilité presque uniforme dans , donnant une valeur approximative de . Cela semble étrange étant donné que la densité d'une distribution bêta avec se rapproche de l'histogramme des valeurs de . Qu'est ce qui ne s'est pas bien passé?α=β=1.3206ypr(y=9)=0.06799117α=β=1.3206pi

Cas général

Je vais maintenant aborder le cas plus général et pourquoi mon approximation bêta simple a échoué. Fondamentalement, en écrivant puis en mélangeant sur avec une autre distribution nous faisons une hypothèse importante - que nous pouvons approcher la probabilité réelle avec une probabilité binomiale unique - le seul problème qui reste est de savoir quelle valeur de utiliser. Une façon de voir cela consiste à utiliser la densité de mélange qui est discrète et uniforme sur le réel . Nous remplaçons donc la distribution bêta par une densité discrète de(y|n,p)Binom(n,p)ppf(θ)ppipBeta(a,b)pi=116wiδ(ppi). Ensuite, l’approximation de mélange peut être exprimée en mots en choisissant une valeur avec une probabilité et en supposant que tous les essais bernoulli ont cette probabilitépiwi . Clairement, pour que cette approximation fonctionne bien, la plupart des valeurs de doivent être similaires les unes aux autres. Cela signifie fondamentalement que pour la distribution uniforme des valeurs @wolfies, donne une approximation déplorable lors de l’utilisation de la distribution de mixage bêta. Cela explique également pourquoi l'approximation est bien meilleure pour - elles sont moins dispersées.pipi=i17pi=i17

Le mélange utilise ensuite le observé pour une moyenne sur tous les choix possibles d'un seul . Maintenant, parce que "mélanger" est comme une moyenne pondérée, il ne peut pas faire mieux que d’utiliser le meilleur . Donc, si les sont suffisamment étalés, il ne peut y avoir aucun qui puisse fournir une bonne approximation de tous les .pi pppippi

Une autre chose que j’ai dite dans mon autre réponse était qu’il serait peut-être préférable d’utiliser un mélange de distributions bêta sur une plage restreinte - mais cela n’aidera toujours pas ici, car cela continue à se mélanger sur un seul . Ce qui a plus de sens est de scinder l’intervalle en un morceau et d’avoir un binôme dans chaque morceau. Par exemple, nous pourrions choisir comme fractionnements et ajuster neuf binômes dans chaque intervalle de probabilité de . Fondamentalement, à l'intérieur de chaque division, nous ajusterions une approximation simple, telle que l'utilisation d'un binôme avec une probabilité égale à la moyenne dup(0,1)(0,0.1,0.2,,0.9,1)0.1pidans cette gamme. Si nous réduisons les intervalles suffisamment, l'approximation devient arbitrairement bonne. Mais notez que tout cela ne nous laisse que de devoir traiter une somme d'essais binomiaux indépendants avec des probabilités différentes, au lieu des essais de Bernoulli . Cependant, la partie précédente de cette réponse a montré que nous pouvons faire les calculs exacts à condition que le nombre de binômes soit suffisamment petit, disons 10-15 environ.

Pour étendre la réponse basée sur bernoulli à une réponse basée sur un binôme, nous "réinterprétons" simplement ce que sont les variables . Nous simplement que - cela revient au Z_i original basé sur mais indique maintenant de quels binômes les succès proviennent. Donc, le cas signifie maintenant que tous les "succès" proviennent du troisième binôme et aucun des deux premiers.ZiZi=I(Xi>0)Zi(Z1=0,Z2=0,Z3=1)

Notez que cela reste "exponentiel" en ce sens que le nombre de calculs est quelque chose comme où est le nombre de binômes et est la taille du groupe - vous avez donc où . Mais c’est mieux que le auquel vous auriez affaire en utilisant des variables aléatoires bernoulli. Par exemple, supposons que nous divisions les probabilités en groupes avec probabilités dans chaque groupe. Cela donne calculs, comparé àkggkYj=1gXjXjBin(k,pj)2gkn=16g=4k=444=256216=65536

En choisissant groupes et en notant que la limite était d'environ ce qui correspond à environ cellules, nous pouvons utiliser efficacement cette méthode pour augmenter le maximum de à .g=10n=20107nn=50

Si nous faisons une approximation plus crue, en diminuant , nous augmenterons la taille "réalisable" pour . signifie que vous pouvez avoir un effectif d'environ . Au-delà, l'approximation normale devrait être extrêmement précise.gng=5n125


@omo - Je pense que ça va, car mes réponses sont deux manières différentes d'aborder le problème. Cette réponse n’est pas une version éditée de ma première réponse
probabilitéislogic

1
Pour une solution Rqui est extrêmement efficace et gère des valeurs beaucoup plus grandes de , veuillez consulter stats.stackexchange.com/a/41263 . Par exemple, il a résolu ce problème pour , donnant la distribution complète en moins de trois secondes. (Une solution comparable de Mathematica 9 - voir la réponse de @wolfies - fonctionne également pour des plus petits mais ne peut pas terminer l'exécution avec une valeur de .)n = 10 4 n nnn=104nn
whuber

5

Le pmf (généralement insoluble) est Code R:

Pr(S=k)=A{1,,n}|A|=k(iApi)(j{1,,n}A(1pj)).
p <- seq(1, 16) / 17
cat(p, "\n")
n <- length(p)
k <- 9
S <- seq(1, n)
A <- combn(S, k)
pr <- 0
for (i in 1:choose(n, k)) {
    pr <- pr + exp(sum(log(p[A[,i]])) + sum(log(1 - p[setdiff(S, A[,i])])))
}
cat("Pr(S = ", k, ") = ", pr, "\n", sep = "")

Pour les utilisés dans les loups, nous avons:pi

Pr(S = 9) = 0.1982677

Quand grandit, utilisez une convolution .n


1
Faire cela avec le code R était vraiment utile. Certains d’entre nous sont des penseurs plus concrets et il est très utile d’avoir une version opérationnelle de la fonction génératrice.
DWin

@DWin Je fournis un Rcode efficace dans la solution au même problème (avec des valeurs différentes du ) à stats.stackexchange.com/a/41263 . Le problème ici est résolu en 0,00012 secondes de temps de calcul total (estimé en le résolvant 1000 fois), comparé à 0,53 seconde (estimé en le résolvant une fois) pour ce code et à 0,00058 secondes en utilisant le code Mathematica de Wolfies (estimé en le résolvant 1000 fois). piR
whuber

Donc, suivrait une distribution de Poisson-Binomiale. P(S=k)
fccoelho

+1 Message très utile dans ma tentative de répondre à cette question . Je me demandais si l'utilisation de journaux était davantage une formulation mathématique intéressante qu'un besoin réel. Je ne suis pas trop préoccupé par les temps de course ...
Antoni Parellada
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.