mirror of
https://github.com/boostorg/math.git
synced 2026-01-19 04:22:09 +00:00
Add SYCL testing of normal dist Add CUDA testing of normal dist Add NVRTC testing of normal dist NVRTC fixes Move headers for NVRTC support Add GPU support to inverse gaussian dist Add NVRTC testing of inverse Gaussian dist Add CUDA testing of inverse gaussian dist Add SYCL testing of inverse gaussian dist Add GPU support to lognormal dist Add SYCL testing of lognormal dist Add CUDA testing of lognormal dist Add nvrtc testing of lognormal dist Add GPU support to negative binomial dist Avoid float_prior on GPU platform Add NVRTC testing of negative binomial dist Fix ambiguous use of nextafter Add CUDA testing of negative binomial dist Fix float_prior workaround Add SYCL testing of negative binomial dist Add GPU support to non_central_beta dist Add SYCL testing of nc beta dist Add CUDA testing of nc beta dist Enable generic dist handling on GPU Add GPU support to brent_find_minima Add NVRTC testing of nc beta dist Add utility header Replace non-functional macro with new function Add GPU support to non central chi squared dist Add SYCL testing of non central chi squared dist Add missing macro definition Markup generic quantile finder Add CUDA testing of non central chi squared dist Add NVRTC testing of non central chi squared dist Add GPU support to the non-central f dist Add SYCL testing of ncf Add CUDA testing of ncf dist Add NVRTC testing of ncf dist Add GPU support to students_t dist Add SYCL testing of students_t dist Add CUDA testing of students_t Add NVRTC testing of students_t dist Workaround for header cycle Add GPU support to pareto dist Add SYCL testing of pareto dist Add CUDA testing of pareto dist Add NVRTC testing of pareto dist Add missing header Add GPU support to poisson dist Add SYCL testing of poisson dist Add CUDA testing of poisson dist Add NVRTC testing of poisson dist Add forward decl for NVRTC platform Add GPU support to rayleigh dist Add CUDA testing of rayleigh dist Add SYCL testing of rayleigh dist Add NVRTC testing of rayleigh dist Add GPU support to triangular dist Add SYCL testing of triangular dist Add NVRTC testing of triangular dist Add CUDA testing of triangular dist Add GPU support to the uniform dist Add CUDA testing of uniform dist Add SYCL testing of uniform dist Add NVRTC testing of uniform dist Fix missing header Add markers to docs
208 lines
7.3 KiB
Plaintext
208 lines
7.3 KiB
Plaintext
[section:nc_beta_dist Noncentral Beta Distribution]
|
|
|
|
``#include <boost/math/distributions/non_central_beta.hpp>``
|
|
|
|
namespace boost{ namespace math{
|
|
|
|
template <class RealType = double,
|
|
class ``__Policy`` = ``__policy_class`` >
|
|
class non_central_beta_distribution;
|
|
|
|
typedef non_central_beta_distribution<> non_central_beta;
|
|
|
|
template <class RealType, class ``__Policy``>
|
|
class non_central_beta_distribution
|
|
{
|
|
public:
|
|
typedef RealType value_type;
|
|
typedef Policy policy_type;
|
|
|
|
// Constructor:
|
|
BOOST_MATH_GPU_ENABLED non_central_beta_distribution(RealType alpha, RealType beta, RealType lambda);
|
|
|
|
// Accessor to shape parameters:
|
|
BOOST_MATH_GPU_ENABLED RealType alpha()const;
|
|
BOOST_MATH_GPU_ENABLED RealType beta()const;
|
|
|
|
// Accessor to non-centrality parameter lambda:
|
|
BOOST_MATH_GPU_ENABLED RealType non_centrality()const;
|
|
};
|
|
|
|
}} // namespaces
|
|
|
|
The noncentral beta distribution is a generalization of the __beta_distrib.
|
|
|
|
It is defined as the ratio
|
|
[expression X = [chi][sub m][super 2]([lambda]) \/ ([chi][sub m][super 2]([lambda])
|
|
+ [chi][sub n][super 2])]
|
|
where [role serif_italic [chi][sub m][super 2]([lambda])]
|
|
is a noncentral [role serif_italic [chi][super 2]]
|
|
random variable with /m/ degrees of freedom, and [chi][sub n][super 2]
|
|
is a central [role serif_italic [chi][super 2] ] random variable with /n/ degrees of freedom.
|
|
|
|
This gives a PDF that can be expressed as a Poisson mixture
|
|
of beta distribution PDFs:
|
|
|
|
[equation nc_beta_ref1]
|
|
|
|
where P(i;[lambda]\/2) is the discrete Poisson probability at /i/, with mean
|
|
[lambda]\/2, and I[sub x][super ']([alpha], [beta]) is the derivative of
|
|
the incomplete beta function. This leads to the usual form of the CDF
|
|
as:
|
|
|
|
[equation nc_beta_ref2]
|
|
|
|
The following graph illustrates how the distribution changes
|
|
for different values of [lambda]:
|
|
|
|
[graph nc_beta_pdf]
|
|
|
|
[h4 Member Functions]
|
|
|
|
BOOST_MATH_GPU_ENABLED non_central_beta_distribution(RealType a, RealType b, RealType lambda);
|
|
|
|
Constructs a noncentral beta distribution with shape parameters /a/ and /b/
|
|
and non-centrality parameter /lambda/.
|
|
|
|
Requires a > 0, b > 0 and lambda >= 0, otherwise calls __domain_error.
|
|
|
|
BOOST_MATH_GPU_ENABLED RealType alpha()const;
|
|
|
|
Returns the parameter /a/ from which this object was constructed.
|
|
|
|
BOOST_MATH_GPU_ENABLED RealType beta()const;
|
|
|
|
Returns the parameter /b/ from which this object was constructed.
|
|
|
|
BOOST_MATH_GPU_ENABLED RealType non_centrality()const;
|
|
|
|
Returns the parameter /lambda/ from which this object was constructed.
|
|
|
|
[h4 Non-member Accessors]
|
|
|
|
Most of the [link math_toolkit.dist_ref.nmp usual non-member accessor functions]
|
|
are supported: __cdf, __pdf, __quantile, __mean, __variance, __sd,
|
|
__median, __mode, __hazard, __chf, __range and __support.
|
|
For this distribution these functions are marked with `BOOST_MATH_GPU_ENABLED` and can
|
|
be run on both host and device.
|
|
|
|
Mean and variance are implemented using hypergeometric pfq functions and relations given in
|
|
[@http://reference.wolfram.com/mathematica/ref/NoncentralBetaDistribution.html Wolfram Noncentral Beta Distribution].
|
|
|
|
However, the following are not currently implemented:
|
|
__skewness, __kurtosis and __kurtosis_excess.
|
|
|
|
The domain of the random variable is \[0, 1\].
|
|
|
|
[h4 Accuracy]
|
|
|
|
The following table shows the peak errors
|
|
(in units of [@http://en.wikipedia.org/wiki/Machine_epsilon epsilon])
|
|
found on various platforms with various floating point types.
|
|
The failures in the comparison to the [@http://www.r-project.org/ R Math library],
|
|
seem to be mostly in the corner cases when the probability would be very small.
|
|
Unless otherwise specified any floating-point type that is narrower
|
|
than the one shown will have __zero_error.
|
|
|
|
[table_non_central_beta_CDF]
|
|
|
|
[table_non_central_beta_CDF_complement]
|
|
|
|
Error rates for the PDF, the complement of the CDF and for the quantile
|
|
functions are broadly similar.
|
|
|
|
[h4 Tests]
|
|
|
|
There are two sets of test data used to verify this implementation:
|
|
firstly we can compare with a few sample values generated by the
|
|
[@http://www.r-project.org/ R library].
|
|
Secondly, we have tables of test data, computed with this
|
|
implementation and using interval arithmetic - this data should
|
|
be accurate to at least 50 decimal digits - and is the used for
|
|
our accuracy tests.
|
|
|
|
[h4 Implementation]
|
|
|
|
The CDF and its complement are evaluated as follows:
|
|
|
|
First we determine which of the two values (the CDF or its
|
|
complement) is likely to be the smaller, the crossover point
|
|
is taken to be the mean of the distribution: for this we use the
|
|
approximation due to: R. Chattamvelli and R. Shanmugam,
|
|
"Algorithm AS 310: Computing the Non-Central Beta Distribution Function",
|
|
Applied Statistics, Vol. 46, No. 1. (1997), pp. 146-156.
|
|
|
|
[equation nc_beta_ref3]
|
|
|
|
Then either the CDF or its complement is computed using the
|
|
relations:
|
|
|
|
[equation nc_beta_ref4]
|
|
|
|
The summation is performed by starting at i = [lambda]/2, and then recursing
|
|
in both directions, using the usual recurrence relations for the Poisson
|
|
PDF and incomplete beta functions. This is the "Method 2" described
|
|
by:
|
|
|
|
Denise Benton and K. Krishnamoorthy,
|
|
"Computing discrete mixtures of continuous
|
|
distributions: noncentral chisquare, noncentral t
|
|
and the distribution of the square of the sample
|
|
multiple correlation coefficient",
|
|
Computational Statistics & Data Analysis 43 (2003) 249-267.
|
|
|
|
Specific applications of the above formulae to the noncentral
|
|
beta distribution can be found in:
|
|
|
|
Russell V. Lenth,
|
|
"Algorithm AS 226: Computing Noncentral Beta Probabilities",
|
|
Applied Statistics, Vol. 36, No. 2. (1987), pp. 241-244.
|
|
|
|
H. Frick,
|
|
"Algorithm AS R84: A Remark on Algorithm AS 226: Computing Non-Central Beta
|
|
Probabilities", Applied Statistics, Vol. 39, No. 2. (1990), pp. 311-312.
|
|
|
|
Ming Long Lam,
|
|
"Remark AS R95: A Remark on Algorithm AS 226: Computing Non-Central Beta
|
|
Probabilities", Applied Statistics, Vol. 44, No. 4. (1995), pp. 551-552.
|
|
|
|
Harry O. Posten,
|
|
"An Effective Algorithm for the Noncentral Beta Distribution Function",
|
|
The American Statistician, Vol. 47, No. 2. (May, 1993), pp. 129-131.
|
|
|
|
R. Chattamvelli,
|
|
"A Note on the Noncentral Beta Distribution Function",
|
|
The American Statistician, Vol. 49, No. 2. (May, 1995), pp. 231-234.
|
|
|
|
Of these, the Posten reference provides the most complete overview,
|
|
and includes the modification starting iteration at [lambda]/2.
|
|
|
|
The main difference between this implementation and the above
|
|
references is the direct computation of the complement when most
|
|
efficient to do so, and the accumulation of the sum to -1 rather
|
|
than subtracting the result from 1 at the end: this can substantially
|
|
reduce the number of iterations required when the result is near 1.
|
|
|
|
The PDF is computed using the methodology of Benton and Krishnamoorthy
|
|
and the relation:
|
|
|
|
[equation nc_beta_ref1]
|
|
|
|
Quantiles are computed using a specially modified version of
|
|
__bracket_solve,
|
|
starting the search for the root at the mean of the distribution.
|
|
(A Cornish-Fisher type expansion was also tried, but while this gets
|
|
quite close to the root in many cases, when it is wrong it tends to
|
|
introduce quite pathological behaviour: more investigation in this
|
|
area is probably warranted).
|
|
|
|
[endsect] [/section:nc_beta_dist]
|
|
|
|
[/ nc_beta.qbk
|
|
Copyright 2008 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).
|
|
]
|
|
|