org.omegahat.Probability.Distributions
Class DistributionFunctions

java.lang.Object
  |
  +--org.omegahat.Probability.Distributions.DistributionFunctions
Direct Known Subclasses:
PRNGDistributionFunctions

public class DistributionFunctions
extends java.lang.Object

(C) Copyright B. Narasimhan (naras@stat.stanford.edu) $Revision: 1.1.1.1 $ of $Date: 2001/04/04 17:16:51 $


Field Summary
private static double a0
           
private static double a1
           
private static double a2
           
private static double a3
           
private static double aa
           
private static double b1
           
private static double b2
           
private static double b3
           
private static double b4
           
private static double c1
           
private static double c10
           
private static double c11
           
private static double c12
           
private static double c13
           
private static double c14
           
private static double c15
           
private static double c16
           
private static double c17
           
private static double c18
           
private static double c19
           
private static double c2
           
private static double c20
           
private static double c21
           
private static double c22
           
private static double c23
           
private static double c24
           
private static double c25
           
private static double c26
           
private static double c27
           
private static double c28
           
private static double c29
           
private static double c3
           
private static double c30
           
private static double c31
           
private static double c32
           
private static double c33
           
private static double c34
           
private static double c35
           
private static double c36
           
private static double c37
           
private static double c38
           
private static double c4
           
private static double c5
           
private static double c6
           
private static double c7
           
private static double c8
           
private static double c9
           
private static double cc0
           
private static double cc1
           
private static double cc2
           
private static double cc3
           
private static double COF1
           
private static double COF2
           
private static double COF3
           
private static double COF4
           
private static double COF5
           
private static double COF6
           
private static double d1
           
private static double d2
           
private static double e
           
private static double EPSILON
           
private static double five
           
private static double four
           
protected  double geometricRand_beta
           
protected  double geometricRand_last_p
           
private static double half
           
private static double HALF_PI
           
private static int ITMAX
           
private static double LARGE_A
           
private static long MASK
           
private static double one
           
private static double pmax
           
private static double pmin
           
private static double sae
           
private static long seedi
           
private static long seedj
           
private static double six
           
private static double split
           
private static double three
           
private static double TOL
           
private static double two
           
private static double TWOVRPI
           
private static double vm_epsilon
           
private static double zero
           
 
Constructor Summary
DistributionFunctions()
           
 
Method Summary
 int bernoulliRand(double p)
           
 double betaCDF(double x, double pin, double qin)
          Incomplete Beta function.
 double betaPDF(double x, double a, double b)
           
 double betaQuantile(double alpha, double p, double q)
          xinbta.f -- translated by f2c and modified
 double betaRand(double a, double b)
           
 double binomialCDF(int k, int n, double p)
           
 double binomialPMF(int k, int n, double p)
           
 int binomialQuantile(double x, int n, double p)
           
 int binomialRand(int n, double pp)
          Binomial random generator from Numerical Recipes
 double cauchyCDF(double x)
           
 double cauchyPDF(double x)
           
 double cauchyQuantile(double x)
           
 double cauchyRand()
           
 double chisqCDF(double x, double df)
           
 double chisqPDF(double x, double v)
           
 double chisqQuantile(double p, double v)
          ppchi2.f -- translated by f2c and modified
 double chisqRand(double df)
           
private  double chyper(boolean point, int kk, int ll, int mm, int nn)
          This routine has problems.
 double dirichletPDF(double[] x, double[] a)
           
 double[] dirichletRand(double[] a)
           
 double exponentialRand()
          Inverse CDF method for generating exponential( 1 ) random number.
 double exponentialRand(double beta)
          Inverse CDF method for generating exponential( beta ) random number.
 double fCDF(double x, double df1, double df2)
           
 double fPDF(double x, double a, double b)
           
 double fQuantile(double p, double df1, double df2)
           
 double fRand(double ndf, double ddf)
           
 double gammaCDF(double a, double x)
           
 double gammaPDF(double x, double a)
           
 double gammaQuantile(double a, double p)
           
 double gammaRand(double a)
           
private  double gcf(double a, double x, double gln)
          compute complementary gamma cdf by its continued fraction expansion
 double geometricCDF(int x, double p)
           
 double geometricPMF(int x, double p)
           
 int geometricQuantile(double x, double p)
           
 int geometricRand(double p)
          Generate a geometric random value with trial probability p.
private  double gnorm(double a, double x)
          Compute gamma cdf by a normal approximation
private  double gser(double a, double x, double gln)
          compute gamma cdf by its series representation
 double hypergeometricCDF(int numberOfMarkedSampleItems, int sampleSize, int numberOfMarkedPopulationItems, int populationSize)
           
 double hypergeometricPMF(int numberOfMarkedSampleItems, int sampleSize, int numberOfMarkedPopulationItems, int populationSize)
           
 double lngamma(double xx)
          Log gamma function from Numerical Recipes
 double logbeta(double p, double q)
          Log Beta function.
 double macheps()
          Virtual Machine Epsilon.
static double normalCDF(double y)
          Normal Distribution Cumulative Distribution function.
 double normalPDF(double x)
           
 double normalQuantile(double p)
          Standard-Normal Quantile Function
 double normalRand()
          Normal Random Generator
 double poissonCDF(int k, double y)
           
 double poissonPMF(int k, double lambda)
           
 int poissonQuantile(double x, double l)
           
 int poissonRand(double xm)
          Poisson random generator from Numerical Recipes
 double tCDF(double x, double df)
          CACM Algorithm 395, by G.
 double tPDF(double x, double a)
           
 double tQuantile(double pp, double n)
          CACM Algorithm 396, by G.
 double tRand(double df)
           
 double uniformRand()
           
 void uniformSeeds(long a, long b)
           
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

vm_epsilon

private static double vm_epsilon

COF1

private static final double COF1

COF2

private static final double COF2

COF3

private static final double COF3

COF4

private static final double COF4

COF5

private static final double COF5

COF6

private static final double COF6

EPSILON

private static final double EPSILON

LARGE_A

private static final double LARGE_A

ITMAX

private static final int ITMAX

TWOVRPI

private static final double TWOVRPI

HALF_PI

private static final double HALF_PI

TOL

private static final double TOL

sae

private static final double sae

zero

private static final double zero

one

private static final double one

two

private static final double two

three

private static final double three

four

private static final double four

five

private static final double five

six

private static final double six

aa

private static final double aa

c1

private static final double c1

c2

private static final double c2

c3

private static final double c3

c4

private static final double c4

c5

private static final double c5

c6

private static final double c6

c7

private static final double c7

c8

private static final double c8

c9

private static final double c9

e

private static final double e

c10

private static final double c10

c11

private static final double c11

c12

private static final double c12

c13

private static final double c13

c14

private static final double c14

c15

private static final double c15

c16

private static final double c16

c17

private static final double c17

c18

private static final double c18

c19

private static final double c19

c20

private static final double c20

c21

private static final double c21

c22

private static final double c22

c23

private static final double c23

c24

private static final double c24

c25

private static final double c25

c26

private static final double c26

c27

private static final double c27

c28

private static final double c28

c29

private static final double c29

c30

private static final double c30

c31

private static final double c31

c32

private static final double c32

c33

private static final double c33

c34

private static final double c34

c35

private static final double c35

c36

private static final double c36

c37

private static final double c37

c38

private static final double c38

half

private static final double half

pmin

private static final double pmin

pmax

private static final double pmax

split

private static final double split

a0

private static final double a0

a1

private static final double a1

a2

private static final double a2

a3

private static final double a3

b1

private static final double b1

b2

private static final double b2

b3

private static final double b3

b4

private static final double b4

cc0

private static final double cc0

cc1

private static final double cc1

cc2

private static final double cc2

cc3

private static final double cc3

d1

private static final double d1

d2

private static final double d2

MASK

private static final long MASK

seedi

private static long seedi

seedj

private static long seedj

geometricRand_last_p

protected double geometricRand_last_p

geometricRand_beta

protected double geometricRand_beta
Constructor Detail

DistributionFunctions

public DistributionFunctions()
Method Detail

normalCDF

public static double normalCDF(double y)
Normal Distribution Cumulative Distribution function.

macheps

public double macheps()
Virtual Machine Epsilon.

lngamma

public double lngamma(double xx)
Log gamma function from Numerical Recipes

logbeta

public double logbeta(double p,
                      double q)
Log Beta function.

betaCDF

public double betaCDF(double x,
                      double pin,
                      double qin)
Incomplete Beta function. the probability that a random variable from a beta distribution having parameters p and q will be less than or equal to x.

Translated from FORTRAN

july 1977 edition. w. fullerton, c3, los alamos scientific lab. based on bosten and battiste, remark on algorithm 179, comm. acm, v 17, p 153, (1974).

Parameters:
x - upper limit of integration. x must be in (0,1) inclusive.
p - first beta distribution parameter. p must be gt 0.0.
q - second beta distribution parameter. q must be gt 0.0.

binomialCDF

public double binomialCDF(int k,
                          int n,
                          double p)

cauchyCDF

public double cauchyCDF(double x)

fCDF

public double fCDF(double x,
                   double df1,
                   double df2)

gnorm

private double gnorm(double a,
                     double x)
Compute gamma cdf by a normal approximation

From Numerical Recipes, with normal approximation from Appl. Stat. 239


gser

private double gser(double a,
                    double x,
                    double gln)
compute gamma cdf by its series representation

gcf

private double gcf(double a,
                   double x,
                   double gln)
compute complementary gamma cdf by its continued fraction expansion

gammaCDF

public double gammaCDF(double a,
                       double x)

chisqCDF

public double chisqCDF(double x,
                       double df)

poissonCDF

public double poissonCDF(int k,
                         double y)

tCDF

public double tCDF(double x,
                   double df)
CACM Algorithm 395, by G. W. Hill

betaQuantile

public double betaQuantile(double alpha,
                           double p,
                           double q)
xinbta.f -- translated by f2c and modified

algorithm as 109 appl. statist. (1977), vol.26, no.1 (replacing algorithm as 64 appl. statist. (1973), vol.22, no.3)

Remark AS R83 has been incorporated in this version.

Computes inverse of the incomplete beta function ratio for given positive values of the arguments p and q, alpha between zero and one. log of complete beta function, beta, is assumed to be known.

Auxiliary function required: binc

SAE below is the most negative decimal exponent which does not cause an underflow; a value of -308 or thereabouts will often be


binomialQuantile

public int binomialQuantile(double x,
                            int n,
                            double p)

cauchyQuantile

public double cauchyQuantile(double x)

chisqQuantile

public double chisqQuantile(double p,
                            double v)
ppchi2.f -- translated by f2c and modified

Algorithm AS 91 Appl. Statist. (1975) Vol.24, P.35 To evaluate the percentage points of the chi-squared probability distribution function.

Parameters:
p - must lie in the range 0.000002 to 0.999998, (but I am using it for 0 < p < 1 - seems to work)
v - must be positive,
g - must be supplied and should be equal to ln(gamma(v/2.0)) Auxiliary routines required: ppnd = AS 111 (or AS 241) and gammad.

fQuantile

public double fQuantile(double p,
                        double df1,
                        double df2)

gammaQuantile

public double gammaQuantile(double a,
                            double p)

normalQuantile

public double normalQuantile(double p)
Standard-Normal Quantile Function

Algorithm as 111 Applied statistics (1977), vol 26 no 1 page 121 Produces normal deviate corresponding to lower tail area of p the hash sums are the sums of the moduli of the coefficients they nave no inherent meanings but are incuded for use in checking transcriptions. Functions abs,alog and sqrt are used.


poissonQuantile

public int poissonQuantile(double x,
                           double l)

tQuantile

public double tQuantile(double pp,
                        double n)
CACM Algorithm 396, by G. W. Hill

betaPDF

public double betaPDF(double x,
                      double a,
                      double b)

binomialPMF

public double binomialPMF(int k,
                          int n,
                          double p)

cauchyPDF

public double cauchyPDF(double x)

chisqPDF

public double chisqPDF(double x,
                       double v)

fPDF

public double fPDF(double x,
                   double a,
                   double b)

dirichletPDF

public double dirichletPDF(double[] x,
                           double[] a)

gammaPDF

public double gammaPDF(double x,
                       double a)

normalPDF

public double normalPDF(double x)

poissonPMF

public double poissonPMF(int k,
                         double lambda)

tPDF

public double tPDF(double x,
                   double a)

uniformSeeds

public void uniformSeeds(long a,
                         long b)

uniformRand

public double uniformRand()

bernoulliRand

public int bernoulliRand(double p)

poissonRand

public int poissonRand(double xm)
Poisson random generator from Numerical Recipes

binomialRand

public int binomialRand(int n,
                        double pp)
Binomial random generator from Numerical Recipes

normalRand

public double normalRand()
Normal Random Generator

cauchyRand

public double cauchyRand()

dirichletRand

public double[] dirichletRand(double[] a)

gammaRand

public double gammaRand(double a)

chisqRand

public double chisqRand(double df)

tRand

public double tRand(double df)

betaRand

public double betaRand(double a,
                       double b)

fRand

public double fRand(double ndf,
                    double ddf)

hypergeometricCDF

public double hypergeometricCDF(int numberOfMarkedSampleItems,
                                int sampleSize,
                                int numberOfMarkedPopulationItems,
                                int populationSize)

hypergeometricPMF

public double hypergeometricPMF(int numberOfMarkedSampleItems,
                                int sampleSize,
                                int numberOfMarkedPopulationItems,
                                int populationSize)

chyper

private double chyper(boolean point,
                      int kk,
                      int ll,
                      int mm,
                      int nn)
This routine has problems. It does not work satisfactorily for population sizes of the order of 1000, especially in computing the CDF.
Parameters:
kk - sample size. (corresponds to kk).
ll - number of marked items in the sample (corresponds to l).
mm - population size.
nn - number of marked items in the population.
Returns:
p(l|k,m,n) is returned. point is true if point probability is required, false if cdf is needed.

geometricCDF

public double geometricCDF(int x,
                           double p)

geometricPMF

public double geometricPMF(int x,
                           double p)

geometricQuantile

public int geometricQuantile(double x,
                             double p)

geometricRand

public int geometricRand(double p)
Generate a geometric random value with trial probability p.

Algorithm GEO from "Monte Carlo: Concepts, Alogrithms, and Applications" George F. Fishman 1996 with one enhancement. The last value of p and the corresponding beta are cached to avoid computation when repeated calls are made with the same value of p.


exponentialRand

public double exponentialRand()
Inverse CDF method for generating exponential( 1 ) random number.

exponentialRand

public double exponentialRand(double beta)
Inverse CDF method for generating exponential( beta ) random number. Beta is parameterized as the expected value.