¿Cómo puedo (numéricamente) aproximar valores para una distribución beta con alfa y beta grandes


11

¿Existe una forma numéricamente estable de calcular los valores de una distribución beta para un entero grande alfa, beta (por ejemplo, alfa, beta> 1000000)?

En realidad, solo necesito un intervalo de confianza del 99% alrededor del modo, si eso de alguna manera facilita el problema.

Agregue : Lo siento, mi pregunta no fue tan clara como pensé. Lo que quiero hacer es esto: tengo una máquina que inspecciona productos en una cinta transportadora. Cierta fracción de estos productos es rechazada por la máquina. Ahora, si el operador de la máquina cambia alguna configuración de inspección, quiero mostrarle la tasa estimada de rechazo y alguna pista sobre cuán confiable es la estimación actual.

Entonces pensé que trataba la tasa de rechazo real como una variable aleatoria X, y calculo la distribución de probabilidad para esa variable aleatoria en función del número de objetos rechazados N y objetos aceptados M. Si supongo una distribución previa uniforme para X, esta es una distribución beta dependiendo de N y M. Puedo mostrar esta distribución al usuario directamente o encontrar un intervalo [l, r] para que la tasa de rechazo real esté en este intervalo con p> = 0,99 (usando la terminología de shabbychef) y mostrar esto intervalo. Para pequeñas M, N (es decir, inmediatamente después del cambio de parámetro), puedo calcular la distribución directamente y aproximar el intervalo [l, r]. Pero para grandes M, N, este enfoque ingenuo conduce a errores de flujo inferior, porque x ^ N * (1-x) ^ M es demasiado pequeño para ser representado como un flotador de doble precisión.

Supongo que mi mejor opción es usar mi ingenua distribución beta para M, N pequeña y cambiar a una distribución normal con la misma media y varianza tan pronto como M, N exceda algún umbral. ¿Tiene sentido?


1
¿Quieres conocer las matemáticas o simplemente una solución de código en R o algo así?
John

Necesito implementar esto en C #, por lo que las matemáticas serían buenas. Una muestra de código también estaría bien, si no se basa en alguna función incorporada de R / Matlab / Mathematica que no puedo traducir a C #.
nikie

PDF, CDF o CDF inverso?
JM no es un estadístico

Si no insiste en Beta, puede usar la distribución de Kumaraswamy que es muy similar y tiene una forma algebraica mucho más simple: en.wikipedia.org/wiki/Kumaraswamy_distribution
Tim

Respuestas:


13

α/(α+β)αβ(α+β)2(1+α+β)α=106,β=1080.000260.00006α=β=1060.0000001.) Por lo tanto, esta aproximación es excelente para esencialmente cualquier propósito que implique intervalos del 99%.

A la luz de las ediciones a la pregunta, tenga en cuenta que uno no calcula las integrales beta integrando realmente el integrando: por supuesto, obtendrá desbordamientos (aunque realmente no importan, porque no contribuyen de manera apreciable a la integral) . Hay muchas, muchas formas de calcular la integral o aproximarla, como se documenta en Johnson & Kotz (Distribuciones en estadística). Se encuentra una calculadora en línea en http://www.danielsoper.com/statcalc/calc37.aspx . Realmente necesitas el inverso de esta integral. Algunos métodos para calcular el inverso están documentados en el sitio de Mathematica en http://functions.wolfram.com/GammaBetaErf/InverseBetaRegularized/inverse beta regularized (.005, 1000000, 1000001)inverse beta regularized (.995, 1000000, 1000001)α=1000000,β=1000001


¡Perfecto! Tenía el libro NR en mi escritorio todo el tiempo, pero nunca pensé en mirar allí. Muchas gracias.
nikie

3

Un experimento gráfico rápido sugiere que la distribución beta se parece mucho a una distribución normal cuando alfa y beta son muy grandes. Al buscar en Google "el límite de distribución beta normal", encontré http://nrich.maths.org/discus/messages/117730/143065.html?1200700623 , que ofrece una "prueba" de saludo manual.

La página de wikipedia para la distribución beta proporciona su media, modo (v cercano a la media para alfa y beta grandes) y varianza, por lo que puede usar una distribución normal con la misma media y varianza para obtener una aproximación. Si es una aproximación lo suficientemente buena para sus propósitos depende de cuáles sean sus propósitos.


Pregunta estúpida: ¿Cómo hiciste ese experimento gráfico? Traté de trazar la distribución de alfa / beta alrededor de 100, pero no pude ver nada debido a errores de flujo insuficiente.
nikie

No desea trazar el integrando: desea trazar la integral. Sin embargo, puede obtener el integrando de muchas maneras. Una es ingresar "plot D (beta (x, 1000000, 2000000), x) / beta (1, 1000000, 2000000) de 0.3325 a 0.334" en el sitio Wolfram Alpha. La integral en sí se ve con "Plot beta (x, 1000000, 2000000) / beta (1, 1000000, 2000000) de 0.3325 a 0.334".
whuber

Tracé el integrando, es decir, el pdf de la distribución beta, en Stata; tiene una función integrada para el pdf. Para grandes alfa y beta, debe restringir el rango de la trama para ver que está cerca de lo normal. Si lo programara yo mismo, calcularía su logaritmo y luego lo expondría al final. Eso debería ayudar con los problemas de flujo inferior. La función beta en el denominador se define en términos de funciones gamma, equivalentes a factoriales para números enteros alfa y beta, y muchos paquetes / bibliotecas incluyen lngamma () o lnfactorial () en su lugar / así como funciones gamma () y factorial ().
parada el

2

[l,r]lr[l,r]α,β lr como números distintos, por lo que esta ruta puede ser lo suficientemente buena.


Cuando alfa y beta no están demasiado separados (es decir, alfa / beta están delimitados por encima y por debajo), la DE de Beta [alfa, beta] es proporcional a 1 / Sqrt (alfa). Por ejemplo, para alpha = beta = 10 ^ 6, la SD está muy cerca de 1 / Sqrt (8) / 1000. Creo que no habrá ningún problema con la representación de l y r, incluso si solo utiliza flotadores de precisión individuales .
whuber

106

1
Sí, es un número loco para una aplicación beta. Por cierto, esas desigualdades no producirán buenos intervalos en absoluto, porque son extremos sobre todas las distribuciones (que satisfacen ciertas restricciones).
whuber

@whuber: Tienes razón, son números locos. Con mi algoritmo ingenuo, los números "sanos" eran fáciles y funcionaban bien, pero no podía imaginar cómo calcularlo para parámetros "locos". De ahí la pregunta.
nikie

2
OK, tienes razón: una vez que alfa + beta supere los 10 ^ 30 más o menos, tendrás dificultades con los dobles :-). (Pero si representa l y r como diferencias con respecto a la media de alfa / (alfa + beta), estará bien hasta que alfa o beta excedan aproximadamente 10 ^ 303.)
whuber

1

pplog(p/(1p))min(α,β)>100

Por ejemplo

f <- function(n, a, b) {
    p <- rbeta(n, a, b)
    lor <- log(p/(1-p))
    ks.test(lor, 'pnorm', mean(lor), sd(lor))$p.value
}
summary(replicate(50, f(10000, 100, 1000000)))

normalmente produce una salida como

resumen (replicar (50, f (10000, 100, 1000000))) Mín. 1er Qu. Mediana media 3er Qu. Max. 0.01205 0.10870 0.18680 0.24810 0.36170 0.68730

es decir, los valores p típicos son alrededor de 0.2.

α=100,β=100000

p

f2 <- function(n, a, b) {
    p <- rbeta(n, a, b)
    ks.test(p, 'pnorm', mean(p), sd(p))$p.value
}
summary(replicate(50, f2(10000, 100, 1000000)))

produce algo como

summary(replicate(50, f2(10000, 100, 1000000)))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
2.462e-05 3.156e-03 7.614e-03 1.780e-02 1.699e-02 2.280e-01 

con valores p típicos alrededor de 0.01

La qqnormfunción R también proporciona una visualización útil, produciendo una gráfica de aspecto muy directo para la distribución log-odds que indica normalidad aproximada, la distribución de la variable beta dsitribute produce una curva distintiva que indica no normalidad

α,β

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.