edu.ksu.cis.kdd.util.stat.distribution
Class Gamma

java.lang.Object
  extended byedu.ksu.cis.kdd.util.stat.distribution.Constants
      extended byedu.ksu.cis.kdd.util.stat.distribution.Gamma

public class Gamma
extends Constants

This class is for generating Gamma distribution. Adapted from COLT.jar library.
http://hoschek.home.cern.ch/hoschek/colt/

The adaptation is taken from cern.jet.random.Gamma class:

(Roby Joehanes' note) What I did: ++ Put Sean Luke's MersenneTwisterFast instead of their implementation. ++ Modify the implementation so that random generators are taken from Settings (so that we can set the seed from the command line while being used by other modules). ++ Remove the toString() and xstaticSetRandomGenerator(RandomElement) methods. ++ Put a function logGamma(double) from cern.jet.random.Fun and rename it to logGammaApprox(double) ++ Copy cern.jet.stat.Gamma to the same package as this class and rename it to BetaGamma to avoid naming conflicts. ++ Copy cern.jet.stat.Probability to the same package as this class and replace all occurrence of Gamma to BetaGamma in accordance to the renaming ++ Apply beautifier.

Below is the original comment:

Gamma distribution; math definition, definition of gamma function and animated definition.

p(x) = k * x^(alpha-1) * e^(-x/beta) with k = 1/(g(alpha) * b^a)) and g(a) being the gamma function.

Valid parameter ranges: alpha > 0.

Note: For a Gamma distribution to have the mean mean and variance variance, set the parameters as follows:

 alpha = mean*mean / variance; lambda = 1 / (variance / mean); 
 

Instance methods operate on a user supplied uniform random number generator; they are unsynchronized.

Static methods operate on a default uniform random number generator; they are synchronized.

Implementation:

Method: Acceptance Rejection combined with Acceptance Complement.
High performance implementation. This is a port of RandGamma used in CLHEP 1.4.0 (C++). CLHEP's implementation, in turn, is based on gds.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

J.H. Ahrens, U. Dieter (1974): Computer methods for sampling from gamma, beta, Poisson and binomial distributions, Computing 12, 223-246.

and

J.H. Ahrens, U. Dieter (1982): Generating gamma variates by a modified rejection technique, Communications of the ACM 25, 47-54.

Version:
1.0, 09/24/99
Author:
wolfgang.hoschek@cern.ch (Original author)

Field Summary
protected  double alpha
           
protected  double lambda
           
protected  MersenneTwisterFast randomGenerator
           
 
Fields inherited from class edu.ksu.cis.kdd.util.stat.distribution.Constants
big, biginv, LOGPI, MACHEP, MAXGAM, MAXLOG, MINLOG, SQRTH, SQTPI
 
Constructor Summary
Gamma(double alpha, double lambda)
          Default constructor, setting both the alpha and lambda (mean and variance)
 
Method Summary
 double cdf(double x)
          Returns the cumulative distribution function.
static double logGammaApprox(double x)
          Returns a quick approximation of log(gamma(x)).
 double nextDouble()
          Returns a random number from the distribution.
 double nextDouble(double alpha, double lambda)
          Returns a random number from the distribution; bypasses the internal state.
 double pdf(double x)
          Returns the probability distribution function.
 void setState(double alpha, double lambda)
          Sets the mean and variance.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

randomGenerator

protected MersenneTwisterFast randomGenerator

alpha

protected double alpha

lambda

protected double lambda
Constructor Detail

Gamma

public Gamma(double alpha,
             double lambda)
Default constructor, setting both the alpha and lambda (mean and variance)

Parameters:
alpha -
lambda -
Method Detail

setState

public void setState(double alpha,
                     double lambda)
Sets the mean and variance.

Throws:
java.lang.IllegalArgumentException - if alpha <= 0.0 || lambda <= 0.0.

nextDouble

public double nextDouble()
Returns a random number from the distribution.


nextDouble

public double nextDouble(double alpha,
                         double lambda)
Returns a random number from the distribution; bypasses the internal state.


pdf

public double pdf(double x)
Returns the probability distribution function.


logGammaApprox

public static double logGammaApprox(double x)
Returns a quick approximation of log(gamma(x)).


cdf

public double cdf(double x)
Returns the cumulative distribution function.