I ended up using a loggamma function to get more accurate values. I borrowed code from here. http://pokerai.org/pj2/code/ProbMath.java. They even have an N choose k method that you can probably use for your hypergeometric calculation.
On 9/4/12 2: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]
