| [section:gamma_dist Gamma (and Erlang) Distribution] |
| |
| ``#include <boost/math/distributions/gamma.hpp>`` |
| |
| namespace boost{ namespace math{ |
| |
| template <class RealType = double, |
| class ``__Policy`` = ``__policy_class`` > |
| class gamma_distribution |
| { |
| public: |
| typedef RealType value_type; |
| typedef Policy policy_type; |
| |
| gamma_distribution(RealType shape, RealType scale = 1) |
| |
| RealType shape()const; |
| RealType scale()const; |
| }; |
| |
| }} // namespaces |
| |
| The gamma distribution is a continuous probability distribution. |
| When the shape parameter is an integer then it is known as the |
| Erlang Distribution. It is also closely related to the Poisson |
| and Chi Squared Distributions. |
| |
| When the shape parameter has an integer value, the distribution is the |
| [@http://en.wikipedia.org/wiki/Erlang_distribution Erlang distribution]. |
| Since this can be produced by ensuring that the shape parameter has an |
| integer value > 0, the Erlang distribution is not separately implemented. |
| |
| [note |
| To avoid potential confusion with the gamma functions, this |
| distribution does not provide the typedef: |
| |
| ``typedef gamma_distibution<double> gamma;`` |
| |
| Instead if you want |
| a double precision gamma distribution you can use |
| |
| ``boost::math::gamma_distribution<>``] |
| |
| For shape parameter /k/ and scale parameter [theta][space] it is defined by the |
| probability density function: |
| |
| [equation gamma_dist_ref1] |
| |
| Sometimes an alternative formulation is used: given parameters |
| [alpha][space]= k and [beta][space]= 1 / [theta], then the |
| distribution can be defined by the PDF: |
| |
| [equation gamma_dist_ref2] |
| |
| In this form the inverse scale parameter is called a /rate parameter/. |
| |
| Both forms are in common usage: this library uses the first definition |
| throughout. Therefore to construct a Gamma Distribution from a ['rate |
| parameter], you should pass the reciprocal of the rate as the scale parameter. |
| |
| The following two graphs illustrate how the PDF of the gamma distribution |
| varies as the parameters vary: |
| |
| [graph gamma1_pdf] |
| |
| [graph gamma2_pdf] |
| |
| The [*Erlang Distribution] is the same as the Gamma, but with the shape parameter |
| an integer. It is often expressed using a /rate/ rather than a /scale/ as the |
| second parameter (remember that the rate is the reciprocal of the scale). |
| |
| Internally the functions used to implement the Gamma Distribution are |
| already optimised for small-integer arguments, so in general there should |
| be no great loss of performance from using a Gamma Distribution rather than |
| a dedicated Erlang Distribution. |
| |
| [h4 Member Functions] |
| |
| gamma_distribution(RealType shape, RealType scale = 1); |
| |
| Constructs a gamma distribution with shape /shape/ and |
| scale /scale/. |
| |
| Requires that the shape and scale parameters are greater than zero, otherwise calls |
| __domain_error. |
| |
| RealType shape()const; |
| |
| Returns the /shape/ parameter of this distribution. |
| |
| RealType scale()const; |
| |
| Returns the /scale/ parameter of this distribution. |
| |
| [h4 Non-member Accessors] |
| |
| All the [link math_toolkit.dist.dist_ref.nmp usual non-member accessor functions] that are generic to all |
| distributions are supported: __usual_accessors. |
| |
| The domain of the random variable is \[0,+[infin]\]. |
| |
| [h4 Accuracy] |
| |
| The lognormal distribution is implemented in terms of the |
| incomplete gamma functions __gamma_p and __gamma_q and their |
| inverses __gamma_p_inv and __gamma_q_inv: refer to the accuracy |
| data for those functions for more information. |
| |
| [h4 Implementation] |
| |
| In the following table /k/ is the shape parameter of the distribution, |
| [theta][space] is it's scale parameter, /x/ is the random variate, /p/ is the probability |
| and /q = 1-p/. |
| |
| [table |
| [[Function][Implementation Notes]] |
| [[pdf][Using the relation: pdf = __gamma_p_derivative(k, x / [theta]) / [theta] ]] |
| [[cdf][Using the relation: p = __gamma_p(k, x / [theta]) ]] |
| [[cdf complement][Using the relation: q = __gamma_q(k, x / [theta]) ]] |
| [[quantile][Using the relation: x = [theta][space]* __gamma_p_inv(k, p) ]] |
| [[quantile from the complement][Using the relation: x = [theta][space]* __gamma_q_inv(k, p) ]] |
| [[mean][k[theta] ]] |
| [[variance][k[theta][super 2] ]] |
| [[mode][(k-1)[theta][space] for ['k>1] otherwise a __domain_error ]] |
| [[skewness][2 / sqrt(k) ]] |
| [[kurtosis][3 + 6 / k]] |
| [[kurtosis excess][6 / k ]] |
| ] |
| |
| [endsect][/section:gamma_dist Gamma (and Erlang) Distribution] |
| |
| |
| [/ |
| Copyright 2006, 2010 John Maddock and Paul A. Bristow. |
| Distributed under the Boost Software License, Version 1.0. |
| (See accompanying file LICENSE_1_0.txt or copy at |
| http://www.boost.org/LICENSE_1_0.txt). |
| ] |
| |