blob: dca8d3276b1c19feffd7b3812203509741c93a5e [file] [log] [blame]
[section:variates Random Variates and Distribution Parameters]
[@http://en.wikipedia.org/wiki/Random_variate Random variates]
and [@http://en.wikipedia.org/wiki/Parameter distribution parameters]
are conventionally distinguished (for example in Wikipedia and Wolfram MathWorld
by placing a semi-colon after the __random_variate (whose value you 'choose'),
to separate the variate from the parameter(s) that defines the shape of the distribution.
For example, the binomial distribution has two parameters:
n (the number of trials) and p (the probability of success on one trial).
It also has the __random_variate /k/: the number of successes observed.
This means the probability density\/mass function (pdf) is written as ['f(k; n, p)].
Translating this into code the `binomial_distribution` constructor
therefore has two parameters:
binomial_distribution(RealType n, RealType p);
While the function `pdf` has one argument specifying the distribution type
(which includes it's parameters, if any),
and a second argument for the __random_variate. So taking our binomial distribution
example, we would write:
pdf(binomial_distribution<RealType>(n, p), k);
[endsect]
[section:dist_params Discrete Probability Distributions]
Note that the [@http://en.wikipedia.org/wiki/Discrete_probability_distribution
discrete distributions], including the binomial, negative binomial, Poisson & Bernoulli,
are all mathematically defined as discrete functions:
only integral values of the __random_variate are envisaged
and the functions are only defined at these integral values.
However because the method of calculation often uses continuous functions,
it is convenient to treat them as if they were continuous functions,
and permit non-integral values of their parameters.
To enforce a strict mathematical model,
users may use floor or ceil functions on the __random_variate,
prior to calling the distribution function, to enforce integral values.
For similar reasons, in continuous distributions, parameters like degrees of freedom
that might appear to be integral, are treated as real values
(and are promoted from integer to floating-point if necessary).
In this case however, that there are a small number of situations where non-integral
degrees of freedom do have a genuine meaning.
Generally speaking there is no loss of performance from allowing real-values
parameters: the underlying special functions contain optimizations for
integer-valued arguments when applicable.
[caution
The quantile function of a discrete distribution will by
default return an integer result that has been
/rounded outwards/. That is to say lower quantiles (where the probability is
less than 0.5) are rounded downward, and upper quantiles (where the probability
is greater than 0.5) are rounded upwards. This behaviour
ensures that if an X% quantile is requested, then /at least/ the requested
coverage will be present in the central region, and /no more than/
the requested coverage will be present in the tails.
This behaviour can be changed so that the quantile functions are rounded
differently, or even return a real-valued result using
[link math_toolkit.policy.pol_overview Policies]. It is strongly
recommended that you read the tutorial
[link math_toolkit.policy.pol_tutorial.understand_dis_quant
Understanding Quantiles of Discrete Distributions] before
using the quantile function on a discrete distribution. The
[link math_toolkit.policy.pol_ref.discrete_quant_ref reference docs]
describe how to change the rounding policy
for these distributions.
]
[endsect]
[/
Copyright 2006 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).
]