Better implementation for the gamma distribution implementation
---------------------------------------------------------------

                 Key: MATH-753
                 URL: https://issues.apache.org/jira/browse/MATH-753
             Project: Commons Math
          Issue Type: Improvement
    Affects Versions: 2.2
            Reporter: Francesco Strino
            Priority: Minor
             Fix For: 2.2


The way the density of the gamma distribution function is estimated can be 
improved.

It's much more stable to calculate first the log of the density and then 
exponentiate, otherwise the function returns NaN for high values of the 
parameters alpha and beta. 

It would be sufficient to change line 204 in the file 
org.apache.commons.math.distribution.GammaDistributionImpl as follows (I write 
it down here because I don't know how to submit a patch with JIRA):

@Override
    public double density(double x) {
        if (x < 0) return 0;
        //return Math.pow(x / beta, alpha - 1) / beta * Math.exp(-x / beta) / 
Math.exp(Gamma.logGamma(alpha)); //unstable for large values
        return Math.exp(Math.log(x)*(alpha-1) - Math.log(beta)*alpha - x/beta - 
Gamma.logGamma(alpha)); 
    }



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to