Calcule a porcentagem de probabilidade de Poisson
-
07-07-2019 - |
Pergunta
Quando você usa a função Poisson no Excel (ou no OpenOffice Calc), são necessários dois argumentos:
- um número inteiro
- um número 'médio'
e retorna um flutuador.
No Python (tentei aleatório e numpy), ele retorna uma variedade de números aleatórios de Poisson. O que eu realmente quero é a porcentagem que esse evento ocorrerá (é um número constante e a matriz tem sempre números diferentes - então é uma média?).
por exemplo:
print poisson(2.6,6)
retorna [1 3 3 0 1 3]
(E toda vez que eu o corro, é diferente).
O número que recebo de Calc/Excel é 3,19 (POISSON(6,2.16,0)*100
).
Estou usando o Poisson do Python errado (sem trocadilho!) Ou estou perdendo alguma coisa?
Solução
É fácil fazer à mão, mas você pode transbordar dessa maneira. Você pode fazer o expoente e o fatorial em um loop para evitar o transbordamento:
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
Outras dicas
scipy
tem o que você quer
>>> 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 a pena notar que é muito fácil calcular à mão, também.
Esta página Explica por que você recebe uma matriz e o significado dos números nela, pelo menos.