Distribución de probabilidad para diferentes probabilidades.

36

Si quisiera obtener la probabilidad de 9 éxitos en 16 ensayos con cada ensayo con una probabilidad de 0.6, podría usar una distribución binomial. ¿Qué podría usar si cada uno de los 16 ensayos tiene una probabilidad diferente de éxito?

Greg
fuente
1
@whuber En su explicación de la aproximación normal, los cálculos de la media y la desviación estándar son diferentes con la descripción en Wikipedia. En Wiki, la media es np y la desviación estándar es np (1-p). Entonces, en este problema, para la aproximación normal de la probabilidad variable de éxito en la distribución binomial, la media es p1 + p2 + p3 + p4 + p5 + ... + pi, y la varianza es p1 (1-p1) + p2 ( 1-p2) + ... + pi (1-pi). Estoy en lo cierto?
David
1
Ver Wikipedia en la distribución binomial de Poisson . También un término de búsqueda que muestra algunos resultados aquí.
Glen_b -Reinstalar Monica
@David Cuando todos los son iguales a un valor común , entonces y , mostrando que la descripción de Wikipedia a la que te refieres es solo un caso especial. pipp1+p2++pn=npp1(1p1)++pn(1pn)=np(1p)
whuber

Respuestas:

22

Esta es la suma de 16 (presumiblemente independientes) ensayos binomiales. El supuesto de independencia nos permite multiplicar las probabilidades. Por lo tanto, después de dos pruebas con probabilidades y de éxito, la probabilidad de éxito en ambas pruebas es , la probabilidad de no tener éxito es , y la probabilidad de un éxito es . Esa última expresión debe su validez al hecho de que las dos formas de obtener exactamente un éxito son mutuamente excluyentes: a lo sumo, una de ellas puede suceder. Eso significa que sus probabilidades se suman .p1p2p1p2(1p1)(1p2)p1(1p2)+(1p1)p2

Por medio de estas dos reglas - probabilidades independientes se multiplican y mutuamente exclusivos añaden los - se puede trabajar las respuestas para, por ejemplo, 16 ensayos con probabilidades . Para hacerlo, debe tener en cuenta todas las formas de obtener cada número dado de éxitos (como 9). Hay maneras de lograr éxitos 9. Uno de ellos, por ejemplo, ocurre cuando los ensayos 1, 2, 4, 5, 6, 11, 12, 14 y 15 son éxitos y los otros son fracasos. Los éxitos habían probabilidades y y los fracasos tenían probabilidades . Multiplicar estos 16 números da la oportunidad( 16p1,,p16(169)=11440p1,p2,p4,p5,p6,p11,p12,p14,p151p3,1p7,,1p13,1p16de esta secuencia particular de resultados. Sumar este número junto con los 11,439 números restantes da la respuesta.

Por supuesto que usarías una computadora.

Con muchos más de 16 ensayos, hay una necesidad de aproximar la distribución. No proporcionado de las probabilidades y sea demasiado pequeña, una aproximación normal tiende a funcionar bien. Con este método se tenga en cuenta que la expectativa de la suma de ensayos es y (debido a que los ensayos son independientes) la varianza es . A continuación, pretendas la distribución de sumas es normal con media y la desviación estándar . Las respuestas tienden a ser bueno para las probabilidades de computación que corresponden a una proporción de éxitos que difiere depi1pinμ=p1+p2++pnσ2=p1(1p1)+p2(1p2)++pn(1pn)μσμ por no más de unos pocos múltiplos de . A medida que aumenta de tamaño esta aproximación se pone cada vez más precisa y trabaja para múltiplos aún mayores de lejos de .n σ μσnσμ

whuber
fuente
99
Los informáticos llaman a estos "ensayos de Poisson" para distinguirlos de los ensayos de Bernoulli. Además de las aproximaciones del Teorema del límite central, también hay buenos límites de cola disponibles. Aquí hay uno. Las búsquedas de Google en "Límites de Chernoff para ensayos de Poisson" mostrarán los resultados que puede encontrar en un tratamiento típico de CS.
cardenal
@ Cardenal Esa nomenclatura es interesante. Sería válido para muy pequeño , pero de lo contrario parece engañoso, porque la distribución de otro modo no está bien aproximada por las distribuciones de Poisson. (Hay otra discusión sobre CV sobre esta cuestión, donde "16" se sustituye por 10.000 y lo hacemos examinar las probabilidades de la cola, pero no he sido capaz de encontrarlo de nuevo.)pi
whuber
1
Sí, estoy de acuerdo con el nombre. Lo encontré un poco extraño cuando lo encontré por primera vez. Lo he dado aquí más como un término útil para buscar. Parece que los informáticos consideran estas probabilidades a menudo al tratar con ciertos algoritmos. Me interesaría leer esa otra pregunta si la encuentras. ¿Es este quizás?
cardenal
2
@cardinal tiene razón en que los "amigos de CS" los llamamos ensayos de Poisson. De hecho, para este caso, un límite estándar de Chernoff-Hoeffding le dará exactamente el límite que está solicitando el OP.
Suresh Venkatasubramanian
1
Según el comentario de @David ayer, hay algo mal con su declaración de la media aproximada normal como Estamos sumando 16 rvs de Bernoulli, cada uno de los cuales puede tomar valor 0 o 1, por lo que la suma tendrá un dominio de soporte de 0 a 16, no entre 0 y 1. Vale la pena revisar su SD también.
μ=(p1+p2++pn)/n
Wolfies
12

Una alternativa a la aproximación normal de @ whuber es usar probabilidades de "mezcla" o un modelo jerárquico. Esto se aplicaría cuando los son similares de alguna manera, y puede modelar esto mediante una distribución de probabilidad con una función de densidad de indexada por algún parámetro . obtienes una ecuación integral:p iD i s t ( θ )pipiDist(θ)θg(p|θ)θ

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

La probabilidad binomial proviene de establecer , la aproximación normal proviene de (creo) establecer (con y como se define en la respuesta de @ whuber) y luego anota el " las colas "de este PDF se caen bruscamente alrededor del pico.g ( p | θ ) = g ( p | μ , σ ) = 1g(p|θ)=δ(pθ)μσg(p|θ)=g(p|μ,σ)=1σϕ(pμσ)μσ

También podría usar una distribución beta, que conduciría a una forma analítica simple, y que no tiene por qué sufrir el problema de "pequeña p" que tiene la aproximación normal, ya que la beta es bastante flexible. Usando una distribución con establecida por las soluciones a las siguientes ecuaciones (estas son las estimaciones de "divergencia mínima KL"):α , βbeta(α,β)α,β

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

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

Donde Es la función digamma, estrechamente relacionada con las series armónicas.ψ(.)

Obtenemos la distribución del compuesto "beta-binomial":

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

Esta distribución converge hacia una distribución normal en el caso en que @whuber señala, pero debería dar respuestas razonables para pequeña y sesgada , pero no para multimodal , ya que la distribución beta solo tiene un pico. Pero puede solucionar esto fácilmente, simplemente usando distribuciones beta para los modosDivide la integral de en piezas para que cada pieza tenga un modo único (y suficientes datos para estimar los parámetros), y ajuste una distribución beta dentro de cada pieza. luego sume los resultados, observando que haciendo el cambio de variables parap i p i M M 0 < p < 1 M p = x - LnpipiMM0<p<1M L<x<Up=xLULL<x<U la beta integral se transforma en:

B(α,β)=LU(xL)α1(Ux)β1(UL)α+β1dx
probabilidadislogica
fuente
+1 Esta respuesta contiene algunas sugerencias interesantes e inteligentes. El último parece particularmente flexible y poderoso.
whuber
Solo para tomar algo muy simple y concreto, suponga (i) y (ii) , para a 16. ¿Cuál sería la solución para sus estimaciones y , y por lo tanto sus estimaciones para dado , según el problema del OP? pi=pi=i17i=1αβP(X=9)n=16pi=i/17i=1αβP(X=9)n=16
Wolfies
¡Gran respuesta y propuesta, especialmente la beta! Sería genial ver esta respuesta escrita en su forma general con y . sns
pglpm
8

Deje ~ con función generadora de probabilidad (pgf): B e r n o u l l i ( p i )XiBernoulli(pi)

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

Supongamos que denota la suma de variables aleatorias independientes. Entonces, el pgf para la suma de tales variables es: n S n = 16S=i=1nXinSn=16

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

Buscamos , que es:P(S=9)

19!d9pgfSdt9|t=0

TODO LISTO. Esto produce la solución simbólica exacta en función de . La respuesta es bastante larga para imprimir en la pantalla, pero es completamente manejable y toma menos de de segundo para evaluar el uso de Mathematica en mi computadora.pi1100

Ejemplos

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

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

¿Más de 16 ensayos?

Con más de 16 ensayos, no hay necesidad de aproximar la distribución. El método exacto anterior funciona con la misma facilidad para ejemplos con digamos o . Por ejemplo, cuando , se tarda menos de de segundo para evaluar todo el pmf ( es decir, en cada valor ) utilizando el código a continuación.n=50n=100n=50110s=0,1,,50

Código de Mathematica

Dado un vector de valores , diga:pi

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

... aquí hay un código de Mathematica para hacer todo lo necesario:

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

0.198268

Para derivar todo el pmf:

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

... o use el más limpio y rápido (gracias a una sugerencia de Ray Koopman a continuación):

CoefficientList[pgfS, t] // N

Para un ejemplo con , toma solo 1 segundo calcular , y luego 0.002 segundos derivar todo el uso de pmf , por lo que es extremadamente eficiente.n=1000pgfSCoefficientList

lobos
fuente
1
Puede ser aún más simple. With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]]da la probabilidad de 9 éxitos y With[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]]da las probabilidades de 0, ..., 16 éxitos.
Ray Koopman
@ RayKoopman Eso es genial. El Tablepara los -valores es intencional para permitir formas más generales no adecuados con . Su uso de es muy agradable! He agregado un código al código anterior que acelera enormemente el enfoque directo. Aun así, es incluso más rápido que a . No hace mucha diferencia para por debajo de 50 (ambos enfoques toman solo una pequeña fracción de segundo en ambos sentidos para generar el pmf completo), pero también será una verdadera ventaja práctica cuando n es realmente grande. pRangeCoefficientListExpandCoefficientListParallelTablenCoefficientList
Wolfies
5

El comentario de @wolfies, y mi intento de respuesta reveló un problema importante con mi otra respuesta, que discutiré más adelante.

Caso específico (n = 16)

Hay una manera bastante eficiente de codificar la distribución completa utilizando el "truco" de usar números de base 2 (binarios) en el cálculo. Solo requiere 4 líneas de código R para obtener la distribución completa de donde . Básicamente, hay un total de elecciones del vector que las variables binarias podrían tomar. Ahora supongamos que numeramos cada opción distinta desde hasta . Esto por sí solo no es nada especial, pero ahora supongamos que representamos el "número de elección" usando la aritmética de base 2. Ahora tome para poder escribir todas las opciones para que hayaY=i=1nZiPr(Zi=1)=pi2nz=(z1,,zn)Zi12nn=323=8opciones Entonces en "números ordinarios" se convierte en en "números binarios". Ahora supongamos que los escribimos como números de cuatro dígitos, entonces tenemos . Ahora observe los últimos dígitos de cada número: puede considerarse como , etc. El conteo en forma binaria proporciona una manera eficiente de organizar la suma. . Afortunadamente, hay una función R que puede hacer esta conversión binaria por nosotros, llamada y convertimos la forma binaria en bruto en una vía numérica , luego obtendremos un vector con1,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))32elementos, cada elemento es el dígito de la versión base 2 de nuestro número (leer de derecha a izquierda, no de izquierda a derecha). Usando este truco combinado con algunas otras vectorizaciones R, podemos calcular la probabilidad de que en 4 líneas de código 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])
}

Al conectar la caja uniforme y la caja raíz sqrt obtiene una distribución completa para y como: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

Entonces, para el problema específico de éxitos en ensayos, los cálculos exactos son sencillos. Esto también funciona para una serie de probabilidades de hasta aproximadamente ; más allá de eso, es probable que comience a encontrarse con problemas de memoria, y se necesitan diferentes trucos informáticos.y16n=20

Tenga en cuenta que al aplicar mi "distribución beta" sugerida obtenemos estimaciones de parámetros de y esto da una estimación de probabilidad que es casi uniforme en , dando un valor aproximado de . Esto parece extraño dado que una densidad de una distribución beta con se aproxima mucho al histograma de los valores de . ¿Qué salió mal?α=β=1.3206ypr(y=9)=0.06799117α=β=1.3206pi

Caso general

Ahora analizaré el caso más general y por qué falló mi aproximación beta simple. Básicamente, al escribir y luego mezclar sobre con otra distribución realidad está haciendo una suposición importante: que podemos aproximar la probabilidad real con Una probabilidad binomial única: el único problema que queda es qué valor de usar. Una forma de ver esto es usar la densidad de mezcla que es discreta uniforme sobre el real . Por lo tanto, reemplazamos la distribución beta con una densidad discreta de(y|n,p)Binom(n,p)ppf(θ)ppipBeta(a,b)pi=116wiδ(ppi). Luego, el uso de la aproximación de mezcla se puede expresar en palabras como elegir un valor con probabilidad , y asumir que todos los ensayos de Bernoulli tienen esta probabilidadpiwi . Claramente, para que tal aproximación funcione bien, la mayoría de los valores de deberían ser similares entre sí. Esto básicamente significa que para la distribución uniforme de valores de @wolfies, resulta en una aproximación lamentablemente mala cuando se usa la distribución de mezcla beta. Esto también explica por qué la aproximación es mucho mejor para : están menos dispersos.pipi=i17pi=i17

La mezcla luego usa la observada para promediar todas las opciones posibles de una sola . Ahora, como "mezclar" es como un promedio ponderado, no puede ser mejor que usar el mejor . Entonces, si los están suficientemente extendidos, no puede haber un solo que pueda proporcionar una buena aproximación a todos los .pi pppippi

Una cosa que dije en mi otra respuesta fue que puede ser mejor usar una mezcla de distribuciones beta en un rango restringido, pero esto todavía no ayudará aquí porque todavía se está mezclando en una sola . Lo que tiene más sentido es dividir el intervalo en partes y tener un binomio dentro de cada pieza. Por ejemplo, podríamos elegir como nuestras divisiones y ajustar nueve binomios dentro de cada rango de probabilidad . Básicamente, dentro de cada división, tendríamos adaptarse a una aproximación simple, como el uso de una binomial con probabilidad igual a la media de lap(0,1)(0,0.1,0.2,,0.9,1)0.1pien ese rango Si hacemos los intervalos lo suficientemente pequeños, la aproximación se vuelve arbitrariamente buena. Pero tenga en cuenta que todo esto hace que tengamos que lidiar con una suma de ensayos binomiales independientes con diferentes probabilidades, en lugar de ensayos de Bernoulli . Sin embargo, la parte anterior de esta respuesta mostró que podemos hacer los cálculos exactos siempre que el número de binomios sea lo suficientemente pequeño, digamos 10-15 más o menos.

Para extender la respuesta basada en bernoulli a una respuesta basada en binomio, simplemente "reinterpretamos" cuáles son las variables . Simplemente que : esto se reduce al Z_i original basado en pero ahora dice de qué binomios provienen los éxitos. Por lo tanto, el caso ahora significa que todos los "éxitos" provienen del tercer binomio, y ninguno de los dos primeros.ZiZi=I(Xi>0)Zi(Z1=0,Z2=0,Z3=1)

Tenga en cuenta que esto sigue siendo "exponencial", ya que el número de cálculos es algo así como donde es el número de binomios, es el tamaño del grupo, por lo que tiene donde . Pero esto es mejor que el que estaría tratando con mediante el uso de variables aleatorias de Bernoulli. Por ejemplo, supongamos que dividimos las probabilidades en grupos con probabilidades en cada grupo. Esto da cálculos, en comparación conkggkYj=1gXjXjBin(k,pj)2gkn=16g=4k=444=256216=65536

Al elegir grupos, y observando que el límite era de aproximadamente que es de aproximadamente celdas, podemos utilizar efectivamente este método para aumentar el máximo de a .g=10n=20107nn=50

Si hacemos una aproximación más cruda, al bajar , aumentaremos el tamaño "factible" para . significa que puede tener un efectivo de aproximadamente . Más allá de esto, la aproximación normal debe ser extremadamente precisa.gng=5n125

probabilidadislogica
fuente
@momo: creo que esto está bien, ya que mis respuestas son dos formas diferentes de abordar el problema. Esta respuesta no es una versión editada de la primera, es solo una respuesta diferente
probabilidadislogica
1
Para obtener una solución Rque sea extremadamente eficiente y maneje valores mucho más grandes de , consulte stats.stackexchange.com/a/41263 . Por ejemplo, resolvió este problema para , dando la distribución completa, en menos de tres segundos. (Una solución comparable de Mathematica 9 - vea la respuesta de @wolfies - también funciona bien para una más pequeña pero no pudo completar la ejecución con un valor tan grande de .)n = 10 4 n nnn=104nn
whuber
5

El pmf (en general intratable) es Código 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 = "")

Para la respuesta de usada en wolfies, tenemos:pi

Pr(S = 9) = 0.1982677

Cuando crece, usa una convolución .n

zen
fuente
1
Hacer eso con el código R fue realmente útil. Algunos de nosotros somos pensadores más concretos y es de gran ayuda tener una versión operativa de la función generadora.
DWin
@DWin Proporciono un Rcódigo eficiente en la solución al mismo problema (con diferentes valores de ) en stats.stackexchange.com/a/41263 . El problema aquí se resuelve en 0.00012 segundos de tiempo total de cálculo (estimado resolviéndolo 1000 veces) en comparación con 0.53 segundos (estimado resolviéndolo una vez) para este código y 0.00058 segundos usando el código Mathematica de Wolfies (estimado resolviéndolo 1000 veces). piR
whuber
Entonces seguiría una distribución de Poisson-Binomial. P(S=k)
fccoelho
+1 Publicación muy útil en mi intento de responder esta pregunta . Me preguntaba si usar registros es más una formulación matemática genial que una necesidad real. No estoy demasiado preocupado por los tiempos de ejecución ...
Antoni Parellada