mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			225 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			225 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								[section:nc_t_dist Noncentral T Distribution]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``#include <boost/math/distributions/non_central_t.hpp>``
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   namespace boost{ namespace math{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class RealType = double,
							 | 
						||
| 
								 | 
							
								             class ``__Policy``   = ``__policy_class`` >
							 | 
						||
| 
								 | 
							
								   class non_central_t_distribution;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   typedef non_central_t_distribution<> non_central_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class RealType, class ``__Policy``>
							 | 
						||
| 
								 | 
							
								   class non_central_t_distribution
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								   public:
							 | 
						||
| 
								 | 
							
								      typedef RealType  value_type;
							 | 
						||
| 
								 | 
							
								      typedef Policy    policy_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // Constructor:
							 | 
						||
| 
								 | 
							
								      non_central_t_distribution(RealType v, RealType delta);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // Accessor to degrees_of_freedom parameter v:
							 | 
						||
| 
								 | 
							
								      RealType degrees_of_freedom()const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // Accessor to non-centrality parameter delta:
							 | 
						||
| 
								 | 
							
								      RealType non_centrality()const;
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   }} // namespaces
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The noncentral T distribution is a generalization of the __students_t_distrib.
							 | 
						||
| 
								 | 
							
								Let X have a normal distribution with mean [delta] and variance 1, and let
							 | 
						||
| 
								 | 
							
								[nu] S[super 2] have
							 | 
						||
| 
								 | 
							
								a chi-squared distribution with degrees of freedom [nu]. Assume that
							 | 
						||
| 
								 | 
							
								X and S[super 2] are independent. The
							 | 
						||
| 
								 | 
							
								distribution of t[sub [nu]]([delta])=X/S is called a
							 | 
						||
| 
								 | 
							
								noncentral t distribution with degrees of freedom [nu] and noncentrality
							 | 
						||
| 
								 | 
							
								parameter [delta].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This gives the following PDF:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[equation nc_t_ref1]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								where [sub 1]F[sub 1](a;b;x) is a confluent hypergeometric function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The following graph illustrates how the distribution changes
							 | 
						||
| 
								 | 
							
								for different values of [nu] and [delta]:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[graph nc_t_pdf]
							 | 
						||
| 
								 | 
							
								[graph nc_t_cdf]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h4 Member Functions]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      non_central_t_distribution(RealType v, RealType delta);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Constructs a non-central t distribution with degrees of freedom
							 | 
						||
| 
								 | 
							
								parameter /v/ and non-centrality parameter /delta/.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Requires /v/ > 0 (including positive infinity) and finite /delta/, otherwise calls __domain_error.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RealType degrees_of_freedom()const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns the parameter /v/ from which this object was constructed.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RealType non_centrality()const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns the non-centrality parameter /delta/ from which this object was constructed.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[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 variable is \[-[infin], +[infin]\].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[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.
							 | 
						||
| 
								 | 
							
								Unless otherwise specified, any floating-point type that is narrower
							 | 
						||
| 
								 | 
							
								than the one shown will have __zero_error.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[table_non_central_t_CDF]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[table_non_central_t_CDF_complement]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[caution The complexity of the current algorithm is dependent upon
							 | 
						||
| 
								 | 
							
								[delta][super 2]: consequently the time taken to evaluate the CDF
							 | 
						||
| 
								 | 
							
								increases rapidly for [delta] > 500, likewise the accuracy decreases
							 | 
						||
| 
								 | 
							
								rapidly for very large [delta].]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Accuracy for the quantile and PDF functions should be broadly similar.
							 | 
						||
| 
								 | 
							
								The /mode/ is determined numerically and cannot
							 | 
						||
| 
								 | 
							
								in principal be more accurate than the square root of
							 | 
						||
| 
								 | 
							
								floating-point type FPT epsilon, accessed using `boost::math::tools::epsilon<FPT>()`.
							 | 
						||
| 
								 | 
							
								For 64-bit `double`, epsilon is about 1e-16, so the fractional accuracy is limited to 1e-8.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h4 Tests]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								There are two sets of tests of this distribution:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Basic sanity checks compare this implementation to the test values given in
							 | 
						||
| 
								 | 
							
								"Computing discrete mixtures of continuous
							 | 
						||
| 
								 | 
							
								distributions: noncentral chisquare, noncentral t
							 | 
						||
| 
								 | 
							
								and the distribution of the square of the sample
							 | 
						||
| 
								 | 
							
								multiple correlation coefficient."
							 | 
						||
| 
								 | 
							
								Denise Benton, K. Krishnamoorthy,
							 | 
						||
| 
								 | 
							
								Computational Statistics & Data Analysis 43 (2003) 249-267.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Accuracy checks use test data computed with this
							 | 
						||
| 
								 | 
							
								implementation and arbitary precision interval arithmetic:
							 | 
						||
| 
								 | 
							
								this test data is believed to be accurate to at least 50
							 | 
						||
| 
								 | 
							
								decimal places.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The cases of large (or infinite) [nu] and/or large [delta] has received special
							 | 
						||
| 
								 | 
							
								treatment to avoid catastrophic loss of accuracy.
							 | 
						||
| 
								 | 
							
								New tests have been added to confirm the improvement achieved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								From Boost 1.52, degrees of freedom [nu] can be +[infin]
							 | 
						||
| 
								 | 
							
								when the normal distribution located at [delta]
							 | 
						||
| 
								 | 
							
								(equivalent to the central Student's t distribution)
							 | 
						||
| 
								 | 
							
								is used in place for accuracy and speed.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h4 Implementation]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The CDF is computed using a modification of the method
							 | 
						||
| 
								 | 
							
								described in
							 | 
						||
| 
								 | 
							
								"Computing discrete mixtures of continuous
							 | 
						||
| 
								 | 
							
								distributions: noncentral chisquare, noncentral t
							 | 
						||
| 
								 | 
							
								and the distribution of the square of the sample
							 | 
						||
| 
								 | 
							
								multiple correlation coefficient."
							 | 
						||
| 
								 | 
							
								Denise Benton, K. Krishnamoorthy,
							 | 
						||
| 
								 | 
							
								Computational Statistics & Data Analysis 43 (2003) 249-267.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This uses the following formula for the CDF:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[equation nc_t_ref2]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Where I[sub x](a,b) is the incomplete beta function, and
							 | 
						||
| 
								 | 
							
								[Phi](x) is the normal CDF at x.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Iteration starts at the largest of the Poisson weighting terms
							 | 
						||
| 
								 | 
							
								(at i = [delta][super 2] / 2) and then proceeds in both directions
							 | 
						||
| 
								 | 
							
								as per Benton and Krishnamoorthy's paper.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Alternatively, by considering what happens when t = [infin], we have
							 | 
						||
| 
								 | 
							
								x = 1, and therefore I[sub x](a,b) = 1 and:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[equation nc_t_ref3]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								From this we can easily show that:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[equation nc_t_ref4]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								and therefore we have a means to compute either the probability or its
							 | 
						||
| 
								 | 
							
								complement directly without the risk of cancellation error.  The
							 | 
						||
| 
								 | 
							
								crossover criterion for choosing whether to calculate the CDF or
							 | 
						||
| 
								 | 
							
								its complement is the same as for the
							 | 
						||
| 
								 | 
							
								__non_central_beta_distrib.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The PDF can be computed by a very similar method using:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[equation nc_t_ref5]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Where I[sub x][super '](a,b) is the derivative of the incomplete beta function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For both the PDF and CDF we switch to approximating the distribution by a
							 | 
						||
| 
								 | 
							
								Student's t distribution centred on [delta] when [nu] is very large.
							 | 
						||
| 
								 | 
							
								The crossover location appears to be when [delta]/(4[nu]) < [epsilon],
							 | 
						||
| 
								 | 
							
								this location was estimated by inspection of equation 2.6 in
							 | 
						||
| 
								 | 
							
								"A Comparison of Approximations To Percentiles of the
							 | 
						||
| 
								 | 
							
								Noncentral t-Distribution".  H. Sahai and M. M. Ojeda,
							 | 
						||
| 
								 | 
							
								Revista Investigacion Operacional Vol 21, No 2, 2000, page 123.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Equation 2.6 is a Fisher-Cornish expansion by Eeden and Johnson.
							 | 
						||
| 
								 | 
							
								The second term includes the ratio [delta]/(4[nu]),
							 | 
						||
| 
								 | 
							
								so when this term become negligible, this and following terms can be ignored,
							 | 
						||
| 
								 | 
							
								leaving just Student's t distribution centred on [delta].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This was also confirmed by experimental testing.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See also
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* "Some Approximations to the Percentage Points of the Noncentral
							 | 
						||
| 
								 | 
							
								t-Distribution". C. van Eeden. International Statistical Review, 29, 4-31.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* "Continuous Univariate Distributions".  N.L. Johnson, S. Kotz and
							 | 
						||
| 
								 | 
							
								N. Balkrishnan. 1995. John Wiley and Sons New York.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The quantile is calculated via the usual
							 | 
						||
| 
								 | 
							
								__root_finding_without_derivatives method
							 | 
						||
| 
								 | 
							
								with the initial guess taken as the quantile of a normal approximation
							 | 
						||
| 
								 | 
							
								to the noncentral T.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								There is no closed form for the mode, so this is computed via
							 | 
						||
| 
								 | 
							
								functional maximisation of the PDF.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The remaining functions (mean, variance etc) are implemented
							 | 
						||
| 
								 | 
							
								using the formulas given in
							 | 
						||
| 
								 | 
							
								Weisstein, Eric W. "Noncentral Student's t-Distribution."
							 | 
						||
| 
								 | 
							
								From MathWorld--A Wolfram Web Resource.
							 | 
						||
| 
								 | 
							
								[@http://mathworld.wolfram.com/NoncentralStudentst-Distribution.html
							 | 
						||
| 
								 | 
							
								http://mathworld.wolfram.com/NoncentralStudentst-Distribution.html]
							 | 
						||
| 
								 | 
							
								and in the
							 | 
						||
| 
								 | 
							
								[@http://reference.wolfram.com/mathematica/ref/NoncentralStudentTDistribution.html
							 | 
						||
| 
								 | 
							
								Mathematica documentation].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Some analytic properties of noncentral distributions
							 | 
						||
| 
								 | 
							
								(particularly unimodality, and monotonicity of their modes)
							 | 
						||
| 
								 | 
							
								are surveyed and summarized by:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Andrea van Aubel & Wolfgang Gawronski, Applied Mathematics and Computation, 141 (2003) 3-12.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect] [/section:nc_t_dist]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[/ nc_t.qbk
							 | 
						||
| 
								 | 
							
								  Copyright 2008, 2012 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).
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 |