Calcular el porcentaje de probabilidad de poisson
-
07-07-2019 - |
Pregunta
Cuando usa la función POISSON en Excel (o en OpenOffice Calc), toma dos argumentos:
- un entero
- un número 'promedio'
y devuelve un flotador.
En Python (probé RandomArray y NumPy) devuelve una matriz de números poisson aleatorios. Lo que realmente quiero es el porcentaje de que este evento ocurrirá (es un número constante y la matriz tiene cada vez números diferentes, entonces, ¿es un promedio?).
por ejemplo:
print poisson(2.6,6)
devuelve [1 3 3 0 1 3]
(y cada vez que lo ejecuto, es diferente).
El número que obtengo de calc / excel es 3.19 ( POISSON (6,2.16,0) * 100
).
¿Estoy usando mal el poisson del pitón (sin juego de palabras) o me estoy perdiendo algo?
Solución
Es fácil hacerlo a mano, pero puede desbordarse de esa manera. Puede hacer el exponente y el factorial en un bucle para evitar el desbordamiento:
def poisson_probability(actual, mean):
# naive: math.exp(-mean) * mean**actual / factorial(actual)
# iterative, to keep the components from getting too large or small:
p = math.exp(-mean)
for i in xrange(actual):
p *= mean
p /= i+1
return p
Otros consejos
scipy
tiene lo que quieres
>>> scipy.stats.distributions
<module 'scipy.stats.distributions' from '/home/coventry/lib/python2.5/site-packages/scipy/stats/distributions.pyc'>
>>> scipy.stats.distributions.poisson.pmf(6, 2.6)
array(0.031867055625524499)
Vale la pena señalar que es bastante fácil de calcular a mano, también .
Esta página explica por qué obtiene una matriz, y el significado de los números que contiene, al menos.