Additional numerical error could be surfacing with your use of Math.log. For your case, it might be better to use Math.log1p(-d.cumulativeProbability(7)) instead. For small values, log1p reportedly provides better accuracy.
Thanks, Brent On Tue, Sep 4, 2012 at 1:21 AM, Thomas Neidhart <[email protected]> wrote: > On 09/04/2012 04:14 AM, Guha, Rajarshi (NIH/NCATS) [C] wrote: >> Hi, I'm using commons math 2.2 and the values from the hypergeometric >> distribution do not seem to match an alternative implementation (from R >> 2.15.1). The code I'm using is >> >> HypergeometricDistributionImpl d = >> new HypergeometricDistributionImpl(2550, 61, 8); >> double logp = Math.log(1 - d.cumulativeProbability(7)); >> >> Using JDK 1.6.1, logp comes out to be -30.258290927468533 >> >> However, on R 2.15.1 when doing >> >> phyper(7, 61, 2489, 8, lower=F, log.p=T) >> >> I get -30.33188 >> >> This seems to be a pretty big difference and in the project that I'm using >> commons-math prevents me from porting some R code to Java. >> >> Can anybody confirm these results? Is this a bug? Or am I invoking something >> in the wrong way? > > Hi, > > there have been several improvements made to the Hypergeometric > distribution in the latest trunk version of commons math (3.1, to be > released soon). > > I tried your example and get the following result: > > logp = -30.333226371742285 > > Best regards, > > Thomas > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
