Saturday, February 19, 2011

calculate poisson probability percentage in python

When you use the POISSON function in Excel (or in OpenOffice Calc), it takes two arguments:

  • an integer
  • an 'average' number and returns a float.

In python (i tried RandomArray and NumPy) it returns an array of random poisson numbers. What I really want is the percentage that this event will occur (it is a constant number and the array has every time different numbers - so is it an average?).

for example: print poisson(2.6,6)

returns [1 3 3 0 1 3] (and every time i run it, it's different).

The number is get from calc/excel is 3.19 (POISSON(6,2.16,0)*100).

Am I using the python's poisson wrong (no pun!) or am I missing something?

Thanks

From stackoverflow
  • This page explains why you get an array, and the meaning of the numbers in it, at least.

  • scipy has what you want

    >>> 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)
    

    It's worth noting that it's pretty easy to calculate by hand, too.

  • It is easy to do by hand, but you can overflow doing it that way. You can do the exponent and factorial in a loop to avoid the overflow:

    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
    
  • thank you very much guys! That did the trick!

    S.Lott : This isn't an answer. You checked the answer you liked. You don't need to post this kind of non-answer. Use comments or something. Feel free to delete this.

0 comments:

Post a Comment