[SciPy-User] the skellam distribution
Ernest Adrogué
eadrogue@gmx....
Sun Nov 8 09:16:25 CST 2009
Hi,
In case somebody is interested, or you want to include it
in scipy. I used these specs here from the R package:
cran.r-project.org/web/packages/skellam/skellam.pdf
Note that I am no statician, somebody who knows what he's
doing (as opposed to me ;) should verify it's correct.
import numpy
import scipy.stats.distributions
# Skellam distribution
ncx2 = scipy.stats.distributions.ncx2
class skellam_gen(scipy.stats.distributions.rv_discrete):
def _pmf(self, x, mu1, mu2):
if x < 0:
px = ncx2.pdf(2*mu2, 2*(1-x), 2*mu1)*2
else:
px = ncx2.pdf(2*mu1, 2*(x+1), 2*mu2)*2
return px
def _cdf(self, x, mu1, mu2):
x = numpy.floor(x)
if x < 0:
px = ncx2.cdf(2*mu2, x*(-2), 2*mu1)
else:
px = 1-ncx2.cdf(2*mu1, 2*(x+1), 2*mu2)
return px
def _stats(self, mu1, mu2):
mean = mu1 - mu2
var = mu1 + mu2
g1 = (mu1 - mu2) / numpy.sqrt((mu1 + mu2)**3)
g2 = 1 / (mu1 + mu2)
return mean, var, g1, g2
skellam = skellam_gen(a=-numpy.inf, name="skellam", longname='A Skellam',
shapes="mu1,mu2", extradoc="")
Bye.
--
Ernest
More information about the SciPy-User
mailing list