mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			171 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | [section:inverse_gaussian_dist Inverse Gaussian (or Inverse Normal) Distribution] | ||
|  | 
 | ||
|  | ``#include <boost/math/distributions/inverse_gaussian.hpp>`` | ||
|  | 
 | ||
|  |    namespace boost{ namespace math{  | ||
|  |        | ||
|  |    template <class RealType = double,  | ||
|  |              class ``__Policy``   = ``__policy_class`` > | ||
|  |    class inverse_gaussian_distribution | ||
|  |    { | ||
|  |    public: | ||
|  |       typedef RealType value_type; | ||
|  |       typedef Policy   policy_type; | ||
|  | 
 | ||
|  |       inverse_gaussian_distribution(RealType mean = 1, RealType scale = 1); | ||
|  | 
 | ||
|  |       RealType mean()const; // mean default 1. | ||
|  |       RealType scale()const; // Optional scale, default 1 (unscaled). | ||
|  |       RealType shape()const; // Shape = scale/mean. | ||
|  |    }; | ||
|  |    typedef inverse_gaussian_distribution<double> inverse_gaussian; | ||
|  | 
 | ||
|  |    }} // namespace boost // namespace math | ||
|  |     | ||
|  | The Inverse Gaussian distribution distribution is a continuous probability distribution. | ||
|  | 
 | ||
|  | The distribution is also called 'normal-inverse Gaussian distribution', | ||
|  | and 'normal Inverse' distribution. | ||
|  | 
 | ||
|  | It is also convenient to provide unity as default for both mean and scale. | ||
|  | This is the Standard form for all distributions. | ||
|  | The Inverse Gaussian distribution was first studied in relation to Brownian motion. | ||
|  | In 1956 M.C.K. Tweedie used the name Inverse Gaussian because there is an inverse relationship | ||
|  | between the time to cover a unit distance and distance covered in unit time. | ||
|  | The inverse Gaussian is one of family of distributions that have been called the | ||
|  | [@http://en.wikipedia.org/wiki/Tweedie_distributions Tweedie distributions]. | ||
|  | 
 | ||
|  | (So ['inverse] in the name may mislead: it does [*not] relate to the inverse of a distribution). | ||
|  | 
 | ||
|  | The tails of the distribution decrease more slowly than the normal distribution. | ||
|  | It is therefore suitable to model phenomena | ||
|  | where numerically large values are more probable than is the case for the normal distribution. | ||
|  | For stock market returns and prices, a key characteristic is that it models  | ||
|  | that extremely large variations from typical (crashes) can occur | ||
|  | even when almost all (normal) variations are small. | ||
|  | 
 | ||
|  | Examples are returns from financial assets and turbulent wind speeds.  | ||
|  | 
 | ||
|  | The normal-inverse Gaussian distributions form | ||
|  | a subclass of the generalised hyperbolic distributions. | ||
|  | 
 | ||
|  | See  | ||
|  | [@http://en.wikipedia.org/wiki/Normal-inverse_Gaussian_distribution distribution]. | ||
|  | [@http://mathworld.wolfram.com/InverseGaussianDistribution.html  | ||
|  |   Weisstein, Eric W. "Inverse Gaussian Distribution." From MathWorld--A Wolfram Web Resource.] | ||
|  |    | ||
|  | If you want a `double` precision inverse_gaussian distribution you can use  | ||
|  | 
 | ||
|  | ``boost::math::inverse_gaussian_distribution<>`` | ||
|  | 
 | ||
|  | or, more conveniently, you can write | ||
|  | 
 | ||
|  |   using boost::math::inverse_gaussian; | ||
|  |   inverse_gaussian my_ig(2, 3); | ||
|  | 
 | ||
|  | For mean parameters [mu] and scale (also called precision) parameter [lambda], | ||
|  | and random variate x, | ||
|  | the inverse_gaussian distribution is defined by the probability density function (PDF): | ||
|  | 
 | ||
|  | __spaces f(x;[mu], [lambda]) = [sqrt]([lambda]/2[pi]x[super 3]) e[super -[lambda](x-[mu])[sup2]/2[mu][sup2]x] | ||
|  | 
 | ||
|  | and Cumulative Density Function (CDF): | ||
|  | 
 | ||
|  | __spaces  F(x;[mu], [lambda]) = [Phi]{[sqrt]([lambda]/x) (x/[mu]-1)} + e[super 2[mu]/[lambda]] [Phi]{-[sqrt]([lambda]/[mu]) (1+x/[mu])}  | ||
|  | 
 | ||
|  | where [Phi] is the standard normal distribution CDF. | ||
|  | 
 | ||
|  | The following graphs illustrate how the PDF and CDF of the inverse_gaussian distribution | ||
|  | varies for a few values of parameters [mu] and [lambda]: | ||
|  | 
 | ||
|  | [graph inverse_gaussian_pdf]  [/.png or .svg] | ||
|  | 
 | ||
|  | [graph inverse_gaussian_cdf] | ||
|  | 
 | ||
|  | Tweedie also provided 3 other parameterisations where ([mu] and [lambda]) | ||
|  | are replaced by their ratio [phi] = [lambda]/[mu] and by 1/[mu]: | ||
|  | these forms may be more suitable for Bayesian applications.  | ||
|  | These can be found on Seshadri, page 2 and are also discussed by Chhikara and Folks on page 105. | ||
|  | Another related parameterisation, the __wald_distrib (where mean [mu] is unity) is also provided. | ||
|  | 
 | ||
|  | [h4 Member Functions] | ||
|  | 
 | ||
|  |    inverse_gaussian_distribution(RealType df = 1, RealType scale = 1); // optionally scaled. | ||
|  | 
 | ||
|  | Constructs an inverse_gaussian distribution with [mu] mean, | ||
|  | and scale [lambda], with both default values 1. | ||
|  | 
 | ||
|  | Requires that both the mean [mu] parameter and scale [lambda] are greater than zero, | ||
|  | otherwise calls __domain_error. | ||
|  | 
 | ||
|  |    RealType mean()const;  | ||
|  |     | ||
|  | Returns the mean [mu] parameter of this distribution. | ||
|  | 
 | ||
|  |    RealType scale()const;  | ||
|  |     | ||
|  | Returns the scale [lambda] parameter of this distribution. | ||
|  | 
 | ||
|  | [h4 Non-member Accessors] | ||
|  | 
 | ||
|  | All the [link math_toolkit.dist_ref.nmp usual non-member accessor functions] that are generic to all | ||
|  | distributions are supported: __usual_accessors. | ||
|  | 
 | ||
|  | The domain of the random variate is \[0,+[infin]). | ||
|  | [note Unlike some definitions, this implementation supports a random variate  | ||
|  | equal to zero as a special case, returning zero for both pdf and cdf.] | ||
|  | 
 | ||
|  | [h4 Accuracy] | ||
|  | 
 | ||
|  | The inverse_gaussian distribution is implemented in terms of the  | ||
|  | exponential function and standard normal distribution ['N]0,1 [Phi] : | ||
|  | refer to the accuracy data for those functions for more information. | ||
|  | But in general, gamma (and thus inverse gamma) results are often accurate to a few epsilon, | ||
|  | >14 decimal digits accuracy for 64-bit double. | ||
|  | 
 | ||
|  | [h4 Implementation] | ||
|  | 
 | ||
|  | In the following table [mu] is the mean parameter and  | ||
|  | [lambda] is the scale parameter of the inverse_gaussian distribution, | ||
|  | /x/ is the random variate, /p/ is the probability and /q = 1-p/ its complement. | ||
|  | Parameters [mu] for shape and [lambda] for scale | ||
|  | are used for the inverse gaussian function. | ||
|  | 
 | ||
|  | [table | ||
|  | [[Function] [Implementation Notes] ] | ||
|  | [[pdf] [ [sqrt]([lambda]/ 2[pi]x[super 3]) e[super -[lambda](x - [mu])[sup2]/ 2[mu][sup2]x]]] | ||
|  | [[cdf][ [Phi]{[sqrt]([lambda]/x) (x/[mu]-1)} + e[super 2[mu]/[lambda]] [Phi]{-[sqrt]([lambda]/[mu]) (1+x/[mu])} ]] | ||
|  | [[cdf complement] [using complement of [Phi] above.] ] | ||
|  | [[quantile][No closed form known. Estimated using a guess refined by Newton-Raphson iteration.]] | ||
|  | [[quantile from the complement][No closed form known. Estimated using a guess refined by Newton-Raphson iteration.]] | ||
|  | [[mode][[mu] {[sqrt](1+9[mu][sup2]/4[lambda][sup2])[sup2] - 3[mu]/2[lambda]} ]] | ||
|  | [[median][No closed form analytic equation is known, but is evaluated as quantile(0.5)]] | ||
|  | [[mean][[mu]] ] | ||
|  | [[variance][[mu][cubed]/[lambda]] ] | ||
|  | [[skewness][3 [sqrt] ([mu]/[lambda])] ] | ||
|  | [[kurtosis_excess][15[mu]/[lambda]] ] | ||
|  | [[kurtosis][12[mu]/[lambda]] ] | ||
|  | ] [/table] | ||
|  | 
 | ||
|  | [h4 References] | ||
|  | 
 | ||
|  | #Wald, A. (1947). Sequential analysis. Wiley, NY. | ||
|  | #The Inverse Gaussian distribution : theory, methodology, and applications, Raj S. Chhikara, J. Leroy Folks. ISBN 0824779975 (1989). | ||
|  | #The Inverse Gaussian distribution : statistical theory and applications, Seshadri, V , ISBN - 0387986189 (pbk) (Dewey 519.2) (1998). | ||
|  | #[@http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.wald.html Numpy and Scipy Documentation]. | ||
|  | #[@http://bm2.genes.nig.ac.jp/RGM2/R_current/library/statmod/man/invgauss.html  R statmod invgauss functions]. | ||
|  | #[@http://cran.r-project.org/web/packages/SuppDists/index.html R SuppDists invGauss functions]. | ||
|  | (Note that these R implementations names differ in case). | ||
|  | #[@http://www.statsci.org/s/invgauss.html StatSci.org invgauss help]. | ||
|  | #[@http://www.statsci.org/s/invgauss.statSci.org invgauss R source]. | ||
|  | #[@http://www.biostat.wustl.edu/archives/html/s-news/2001-12/msg00144.html pwald, qwald]. | ||
|  | #[@http://www.brighton-webs.co.uk/distributions/wald.asp Brighton Webs wald]. | ||
|  | 
 | ||
|  | [endsect] [/section:inverse_gaussian_dist Inverse Gaussiann Distribution] | ||
|  | 
 | ||
|  | [/  | ||
|  |   Copyright 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). | ||
|  | ] |