2008-11-11 9 views
16

Cuando se utiliza la función POISSON en Excel (o en OpenOffice Calc), que toma dos argumentos:calcular el porcentaje de probabilidad de Poisson

  • un entero
  • un número 'promedio'

y devuelve un flotador.

En Python (probé RandomArray y NumPy) devuelve una matriz de números aleatorios de poisson. Lo que realmente quiero es el porcentaje que ocurrirá este evento (es un número constante y la matriz tiene cada vez números diferentes, ¿es un promedio?).

por ejemplo:

print poisson(2.6,6) 

vuelve [1 3 3 0 1 3] (y cada vez que lo dirige, que es diferente).

El número que obtengo de calc/excel es 3.19 (POISSON(6,2.16,0)*100).

¿Estoy usando el error de Poisson de la pitón (sin juego de palabras) o me falta algo?

Respuesta

13

Es fácil de hacer a mano, pero puede desbordarse haciéndolo de esa manera. Se puede hacer el exponente y 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 
1

This page explica por qué obtiene una matriz, y el significado de los números en ella, al menos.

23

scipy tiene lo que quiere

>>> 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, too.

+1

importación alternativa sería: 'de scipy.stats importar poisson' entonces' poisson.pmf (6, 2.6) '= ,031867055625524499 – Jarad

Cuestiones relacionadas