Digamos que sé que la probabilidad de un "éxito" es P. Ejecuto la prueba N veces, y veo S éxitos. La prueba es similar a arrojar una moneda desigualmente ponderada (quizás las cabezas son un éxito, las colas son un fracaso).¿Cómo puedo calcular eficientemente la función de distribución acumulativa binomial?
Quiero saber la probabilidad aproximada de ver los éxitos S, o un número de éxitos menos probable que los éxitos S. Por ejemplo, si P es 0.3, N es 100 y obtengo 20 éxitos, estoy buscando la probabilidad de obtener 20 o menos éxitos en.
Si, por otro lado, P es 0,3, N es 100 y obtengo 40 éxitos, estoy buscando la probabilidad de obtener 40 más éxitos. Sin embargo
Soy consciente de que este problema se refiere a encontrar el área bajo una curva binomial,:
- Mi matemáticas-fu no es hasta la tarea de traducir este conocimiento en código eficiente
- Mientras Entiendo que una curva binomial daría un resultado exacto, me da la impresión de que sería inherentemente ineficiente. Un método rápido para calcular un resultado aproximado sería suficiente.
Debo recalcar que este cálculo tiene que ser rápido, y idealmente podría determinarse con un cálculo de coma flotante de 64 o 128 bits estándar.
Estoy buscando una función que tome P, S y N, y devuelve una probabilidad. Como estoy más familiarizado con el código que con la notación matemática, preferiría que cualquier respuesta emplee pseudo-código o código.
¿Por qué son un problema los números grandes? Si está utilizando una distribución binomial para valores grandes, debe significar que no puede aceptar el error que resulta de aproximar la distribución binomial con una distribución continua, por lo que debe estar dispuesto a sacrificar la velocidad por precisión mediante el uso de una biblioteca bignum como GMP. – user57368
Me complace aproximarlo – sanity
En ese caso use la función de error Gaussian (http://en.wikipedia.org/wiki/Error_function), o más bien una aproximación a la misma. –