[Numpy-discussion] problem with poisson generators
Flavio Coelho
fccoelho at gmail.com
Wed Jul 13 08:17:21 EDT 2005
2005/7/13, Bruce Southey <bsouthey at gmail.com>:
>
> Hi,
> What is the seed used?
I am not setting the seed.
It is really important that you set the seed?
No.
Did you build Python and numarray from source?
Yes, I use Gentoo. I build everything from source.
Can you reduce your code to a few lines that have the problem?
Not really, poisson and binomial are the only two functions from Numeric
that I use but they are called inside a rather complex object oriented code
environment (objects within objetcs, being called recursively...) Bellow is
the function within which poisson is called:
def stepSEIR_s(self,inits=(0,0,0),par=(0.001,1,1,0.5,1,0,0,0),theta=0,
npass=0,dist='poisson'):
"""
Defines an stochastic model SEIR:
- inits = (E,I,S)
- par = (Beta, alpha, E,r,delta,B,w,p) see docs.
- theta = infectious individuals from neighbor sites
"""
E,I,S = inits
N = self.parentSite.totpop
beta,alpha,e,r,delta,B,w,p = par
Lpos_esp = beta*S*((I+theta)/(N+npass))**alpha #Number of new cases
if dist == 'poisson':
Lpos = poisson(Lpos_esp)
## if theta == 0 and Lpos_esp == 0 and Lpos > 0:
## print Lpos,Lpos_esp,S,I,theta,N,self.parentSite.sitename
elif dist == 'negbin':
prob = I/(I+Lpos_esp) #convertin between parameterizations
Lpos = negative_binomial(I,prob)
self.parentSite.totalcases += Lpos #update number of cases
Epos = (1-e)*E + Lpos
Ipos = e*E + (1-r)*I
Spos = S + B - Lpos
Rpos = N-(Spos+Epos+Ipos)
#self.parentSite.totpop = Spos+Epos+Ipos+Rpos
self.parentSite.incidence.append(Lpos)
if not self.parentSite.infected:
if Lpos > 0:
self.parentSite.infected = self.parentSite.parentGraph.simstep
self.parentSite.parentGraph.epipath.append((
self.parentSite.parentGraph.simstep,self.parentSite,self.parentSite.infector
))
return [Epos,Ipos,Spos]
I wonder if called by itself it would trigger the problem... The commented
Lines Is where I catch the errors: when poisson returns a greater than zero
number, when called with mean 0.
Ranlib uses static floats so it may relate to numerical precision (as
> well as the random uniform random number generator). Really the only
> way is for you to debug the ranlib.c file
I'll see what I can do.
Note that R provides a standalone math library in C that includes the
> random number generators so you could you those instead. SWIG handles
> it rather well.
I think thats what Rpy already does...is it not?
thanks Bruce,
Flávio
Regards
> Bruce
>
> On 7/13/05, Flavio Coelho <fccoelho at gmail.com> wrote:
> > Well,
> > I am definetly glad that someone has also stumbled onto the same
> problem.
> >
> > But it is nevertheless intriguing, that you can run poisson a million
> times
> > with mean zero or negative(it assumes zero mean inthis case) without any
> > problems by itself. But when I call it within my code, the rate of error
> is
> > very high (I would say it returns a wrong result every time, but I
> haven't
> > checked every answer).
> >
> > Meanwhile, my solution will be:
> >
> > import rpy
> >
> > n = rpy.r.rpois(n,mean)
> >
> > I don't feel I can trust poisson while this "funny" behavior is still
> > there...
> > If someone has any Idea of how I could trace this bug please tell me,
> and
> > I'll hunt it down. At least I can reproduce it in a very specific
> context.
> >
> > thanks,
> >
> > Flávio
> >
> > 2005/7/12, Sebastian Haase <haase at msg.ucsf.edu>:
> > > Hi Flavio!
> > > I had reported this long time ago and this list (about numarray).
> > > Somehow this got more or less dismissed. If I recall correctly the
> > argument
> > > was that nobody could reproduce it (I ran this on Debian Woody , py2.2
> ,
> > (with
> > > CVS numarray at the time).
> > >
> > > I ended up writting my own wrapper(s):
> > > def poissonArr(shape=defshape, mean=1):
> > > from numarray import random_array as ra
> > > if mean == 0:
> > > return zeroArrF(shape)
> > > elif mean < 0:
> > > raise "poisson not defined for mean < 0"
> > > else:
> > > return ra.poisson(mean, shape).astype(na.UInt16)
> > >
> > > def poissonize(arr):
> > > from numarray import random_array as ra
> > > return na.where(arr<=0, 0, ra.poisson(arr)).astype(na.UInt16)
> > >
> > > (I use the astype( na.UInt16) because of some OpenGL code)
> > >
> > > Just last week had this problem on a windows98 computer (python2.4).
> > >
> > > This should get sorted out ...
> > >
> > > Thanks for reporting this problem.
> > > Sebastian Haase
> > >
> > >
> > >
> > >
> > > On Tuesday 12 July 2005 13:32, Flavio Coelho wrote:
> > > > Hi,
> > > >
> > > > I am having problems with the poisson random number generators of
> both
> > > > Numarray and Numeric.
> > > > I can't replicate it when calling the function from the python
> cosonle,
> > but
> > > > it has consistently malfunctioned when used within one of my
> scripts.
> > > >
> > > > What happens is that it frequently return a value greater than zero
> when
> > > > called with zero mean: poisson(0.0)
> > > >
> > > > Unfortunately My program is too big to send attached but I have
> > confirmed
> > > > the malfunction by printing both the mean and the result whenever it
> > spits
> > > > out a wrong result.
> > > >
> > > > This is very weird indeed, I have run poisson millions of times by
> itsel
> > on
> > > > the python console, without any problems...
> > > >
> > > > I hope it is some stupid mistake, but when I replace the poisson
> > function
> > > > call within my program by the R equivalent command (rpois) via the
> rpy
> > > > wrapper, everything works just fine...
> > > >
> > > > any Ideas?
> > >
> >
> >
> >
> > --
> >
> > Flávio Codeço Coelho
> > registered Linux user # 386432
> > ---------------------------
> > Great spirits have always found violent opposition from mediocrities.
> The
> > latter cannot understand it when a man does not thoughtlessly submit to
> > hereditary prejudices but honestly and courageously uses his
> intelligence.
> > Albert Einstein
> >
>
--
Flávio Codeço Coelho
registered Linux user # 386432
---------------------------
Great spirits have always found violent opposition from mediocrities. The
latter cannot understand it when a man does not thoughtlessly submit to
hereditary prejudices but honestly and courageously uses his intelligence.
Albert Einstein
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20050713/a3c88678/attachment.html>
More information about the NumPy-Discussion
mailing list