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?
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?
Réponses:
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 et les chances de succès des deux essais sont , les chances de ne pas réussir sont , et les chances de un succès est . 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,p2,p4,p5,p6,p11,p12,p14,p151-p3,1-p7,…,1-p13,1-p16. 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 σ μ 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 .
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 i ∼ D i s t ( θ ) g ( p | θ ) θ
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 | μ , σ ) = 1μσ
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"):α , β
ψ(β)-ψ(α+β)=1
Où Est la fonction digamma - étroitement liée aux séries harmoniques.
Nous obtenons la distribution du composé "beta-binomial":
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 - L L<x<U l'intégrale bêta se transforme en:
Soit ~ avec fonction génératrice de probabilité (pgf):
Soit désignons la somme de telles variables aléatoires indépendantes. Alors, le pgf pour la somme de telles variables est:
Nous cherchons , qui est:
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.
Exemples
Si , alors:
Si , alors:
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.
Code Mathematica
Étant donné un vecteur de valeurs , disons:
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.pgfS
CoefficientList
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.
Table
pour 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. nRange
CoefficientList
Expand
CoefficientList
ParallelTable
CoefficientList
@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 ales 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 avecintToBits(x)
as.numeric(intToBits(x))
é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:
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:
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.
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é?
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. 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é . 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.
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 .
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 dudans 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.
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é à
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 à .
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.
R
qui 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 n
Le pmf (généralement insoluble) est Code R:
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:
Pr(S = 9) = 0.1982677
Quand grandit, utilisez une convolution .
R
code 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). R