Module: Distribution::Gamma::Ruby_
- Extended by:
- Math
- Defined in:
- lib/distribution/gamma/ruby.rb
Constant Summary
Constants included from MathExtension
MathExtension::EULER, MathExtension::LN2, MathExtension::LNPI, MathExtension::LOG_FLOAT_MIN, MathExtension::ROOT3_FLOAT_EPSILON, MathExtension::ROOT3_FLOAT_MIN, MathExtension::ROOT4_FLOAT_EPSILON, MathExtension::ROOT4_FLOAT_MIN, MathExtension::ROOT5_FLOAT_EPSILON, MathExtension::ROOT5_FLOAT_MIN, MathExtension::ROOT6_FLOAT_EPSILON, MathExtension::ROOT6_FLOAT_MIN, MathExtension::SQRT2, MathExtension::SQRTPI
Class Method Summary collapse
-
.cdf(x, a, b) ⇒ Object
Gamma cumulative distribution function.
-
.pdf(x, a, b) ⇒ Object
Gamma distribution probability density function.
Methods included from Math
beta, binomial_coefficient, binomial_coefficient_gamma, combinations, erfc_e, exact_regularized_beta, factorial, fast_factorial, gammp, gammq, incomplete_beta, incomplete_gamma, lbeta, logbeta, loggamma, permutations, regularized_beta, rising_factorial, unnormalized_incomplete_gamma
Methods included from MathExtension
#beta, #binomial_coefficient, #binomial_coefficient_gamma, #binomial_coefficient_multiplicative, #erfc_e, #exact_regularized_beta, #exp_err, #factorial, #fast_factorial, #gammq, #incomplete_beta, #incomplete_gamma, #lbeta, #logbeta, #loggamma, #permutations, #regularized_beta, #rising_factorial, #unnormalized_incomplete_gamma
Class Method Details
.cdf(x, a, b) ⇒ Object
Gamma cumulative distribution function
37 38 39 40 41 42 43 |
# File 'lib/distribution/gamma/ruby.rb', line 37 def cdf(x, a, b) return 0.0 if x <= 0.0 y = x.quo(b) return (1 - Math::IncompleteGamma.q(a, y)) if y > a (Math::IncompleteGamma.p(a, y)) end |
.pdf(x, a, b) ⇒ Object
Gamma distribution probability density function
If you're looking at Wikipedia's Gamma distribution page, the arguments for this pdf function correspond as follows:
- +x+: same
- +a+: alpha or k
- +b+: theta or 1/beta
This is confusing! But we're trying to most closely mirror the GSL function for the gamma distribution (see references).
Adapted the function itself from GSL-1.9 in rng/gamma.c: gsl_ran_gamma_pdf
==References
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/distribution/gamma/ruby.rb', line 24 def pdf(x, a, b) return 0 if x < 0 if x == 0 return 1.quo(b) if a == 1 return 0 elsif a == 1 Math.exp(-x.quo(b)).quo(b) else Math.exp((a - 1) * Math.log(x.quo(b)) - x.quo(b) - Math.lgamma(a).first).quo(b) end end |