Calcola la percentuale di probabilità di poisson
-
07-07-2019 - |
Domanda
Quando si utilizza la funzione POISSON in Excel (o in OpenOffice Calc), vengono utilizzati due argomenti:
- un numero intero
- un numero "medio"
e restituisce un float.
In Python (ho provato RandomArray e NumPy) restituisce un array di numeri casuali di Poisson. Quello che voglio davvero è la percentuale che si verificherà questo evento (è un numero costante e l'array ha ogni volta numeri diversi, quindi è una media?).
ad esempio:
print poisson(2.6,6)
restituisce [1 3 3 0 1 3]
(e ogni volta che lo eseguo, è diverso).
Il numero che ottengo da calc / excel è 3.19 ( POISSON (6,2.16,0) * 100
).
Sto usando il poisson del pitone nel modo sbagliato (niente gioco di parole!) o mi sto perdendo qualcosa?
Soluzione
È facile da fare a mano, ma puoi straripare facendolo in quel modo. Puoi fare l'esponente e il fattoriale in un ciclo per evitare l'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
Altri suggerimenti
scipy
ha quello che vuoi
>>> 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 notare che è abbastanza facile calcolare a mano, anche .
Questa pagina spiega perché ottieni un array, e il significato dei numeri in essa contenuti, almeno.