mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			191 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			191 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | [section:f_dist F Distribution] | ||
|  | 
 | ||
|  | ``#include <boost/math/distributions/fisher_f.hpp>`` | ||
|  | 
 | ||
|  |    namespace boost{ namespace math{  | ||
|  |        | ||
|  |    template <class RealType = double,  | ||
|  |              class ``__Policy``   = ``__policy_class`` > | ||
|  |    class fisher_f_distribution; | ||
|  |     | ||
|  |    typedef fisher_f_distribution<> fisher_f; | ||
|  | 
 | ||
|  |    template <class RealType, class ``__Policy``> | ||
|  |    class fisher_f_distribution | ||
|  |    { | ||
|  |    public: | ||
|  |       typedef RealType value_type; | ||
|  |        | ||
|  |       // Construct: | ||
|  |       fisher_f_distribution(const RealType& i, const RealType& j); | ||
|  |        | ||
|  |       // Accessors: | ||
|  |       RealType degrees_of_freedom1()const; | ||
|  |       RealType degrees_of_freedom2()const; | ||
|  |    }; | ||
|  |     | ||
|  |    }} //namespaces | ||
|  | 
 | ||
|  | The F distribution is a continuous distribution that arises when testing | ||
|  | whether two samples have the same variance.  If [chi][super 2][sub m][space] and | ||
|  | [chi][super 2][sub n][space] are independent variates each distributed as  | ||
|  | Chi-Squared with /m/ and /n/ degrees of freedom, then the test statistic: | ||
|  | 
 | ||
|  | F[sub n,m][space] = ([chi][super 2][sub n][space] / n) / ([chi][super 2][sub m][space] / m) | ||
|  | 
 | ||
|  | Is distributed over the range \[0, [infin]\] with an F distribution, and | ||
|  | has the PDF: | ||
|  | 
 | ||
|  | [equation fisher_pdf] | ||
|  | 
 | ||
|  | The following graph illustrates how the PDF varies depending on the | ||
|  | two degrees of freedom parameters. | ||
|  | 
 | ||
|  | [graph fisher_f_pdf] | ||
|  | 
 | ||
|  | 
 | ||
|  | [h4 Member Functions] | ||
|  | 
 | ||
|  |       fisher_f_distribution(const RealType& df1, const RealType& df2); | ||
|  |        | ||
|  | Constructs an F-distribution with numerator degrees of freedom /df1/ | ||
|  | and denominator degrees of freedom /df2/. | ||
|  | 
 | ||
|  | Requires that /df1/ and /df2/ are both greater than zero, otherwise __domain_error | ||
|  | is called. | ||
|  |        | ||
|  |       RealType degrees_of_freedom1()const; | ||
|  |        | ||
|  | Returns the numerator degrees of freedom parameter of the distribution. | ||
|  | 
 | ||
|  |       RealType degrees_of_freedom2()const; | ||
|  |        | ||
|  | Returns the denominator degrees of freedom parameter of the 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 variable is \[0, +[infin]\]. | ||
|  | 
 | ||
|  | [h4 Examples] | ||
|  | 
 | ||
|  | Various [link math_toolkit.stat_tut.weg.f_eg worked examples] are  | ||
|  | available illustrating the use of the F Distribution. | ||
|  | 
 | ||
|  | [h4 Accuracy] | ||
|  | 
 | ||
|  | The normal distribution is implemented in terms of the  | ||
|  | [link math_toolkit.sf_beta.ibeta_function incomplete beta function] | ||
|  | and its [link math_toolkit.sf_beta.ibeta_inv_function inverses],  | ||
|  | refer to those functions for accuracy data. | ||
|  | 
 | ||
|  | [h4 Implementation] | ||
|  | 
 | ||
|  | In the following table /v1/ and /v2/ are the first and second | ||
|  | degrees of freedom parameters of the distribution, | ||
|  | /x/ is the random variate, /p/ is the probability, and /q = 1-p/. | ||
|  | 
 | ||
|  | [table | ||
|  | [[Function][Implementation Notes]] | ||
|  | [[pdf][The usual form of the PDF is given by: | ||
|  | 
 | ||
|  | [equation fisher_pdf] | ||
|  | 
 | ||
|  | However, that form is hard to evaluate directly without incurring problems with | ||
|  | either accuracy or numeric overflow. | ||
|  | 
 | ||
|  | Direct differentiation of the CDF expressed in terms of the incomplete beta function | ||
|  | 
 | ||
|  | led to the following two formulas: | ||
|  | 
 | ||
|  | f[sub v1,v2](x) = y * __ibeta_derivative(v2 \/ 2, v1 \/ 2, v2 \/ (v2 + v1 * x)) | ||
|  | 
 | ||
|  | with y = (v2 * v1) \/ ((v2 + v1 * x) * (v2 + v1 * x)) | ||
|  | 
 | ||
|  | and | ||
|  | 
 | ||
|  | f[sub v1,v2](x) = y * __ibeta_derivative(v1 \/ 2, v2 \/ 2, v1 * x \/ (v2 + v1 * x)) | ||
|  | 
 | ||
|  | with y = (z * v1 - x * v1 * v1) \/ z[super 2] | ||
|  | 
 | ||
|  | and z = v2 + v1 * x | ||
|  | 
 | ||
|  | The first of these is used for v1 * x > v2, otherwise the second is used. | ||
|  | 
 | ||
|  | The aim is to keep the /x/ argument to __ibeta_derivative away from 1 to avoid | ||
|  | rounding error. ]] | ||
|  | [[cdf][Using the relations: | ||
|  | 
 | ||
|  | p = __ibeta(v1 \/ 2, v2 \/ 2, v1 * x \/ (v2 + v1 * x)) | ||
|  | 
 | ||
|  | and | ||
|  | 
 | ||
|  | p = __ibetac(v2 \/ 2, v1 \/ 2, v2 \/ (v2 + v1 * x)) | ||
|  | 
 | ||
|  | The first is used for v1 * x > v2, otherwise the second is used. | ||
|  | 
 | ||
|  | The aim is to keep the /x/ argument to __ibeta well away from 1 to | ||
|  | avoid rounding error. ]] | ||
|  | 
 | ||
|  | [[cdf complement][Using the relations: | ||
|  | 
 | ||
|  | p = __ibetac(v1 \/ 2, v2 \/ 2, v1 * x \/ (v2 + v1 * x)) | ||
|  | 
 | ||
|  | and | ||
|  | 
 | ||
|  | p = __ibeta(v2 \/ 2, v1 \/ 2, v2 \/ (v2 + v1 * x)) | ||
|  | 
 | ||
|  | The first is used for v1 * x < v2, otherwise the second is used. | ||
|  | 
 | ||
|  | The aim is to keep the /x/ argument to __ibeta well away from 1 to | ||
|  | avoid rounding error. ]] | ||
|  | [[quantile][Using the relation:  | ||
|  | 
 | ||
|  | x = v2 * a \/ (v1 * b) | ||
|  | 
 | ||
|  | where: | ||
|  | 
 | ||
|  | a = __ibeta_inv(v1 \/ 2, v2 \/ 2, p) | ||
|  | 
 | ||
|  | and | ||
|  | 
 | ||
|  | b = 1 - a | ||
|  | 
 | ||
|  | Quantities /a/ and /b/ are both computed by __ibeta_inv without the | ||
|  | subtraction implied above.]] | ||
|  | [[quantile | ||
|  | 
 | ||
|  | from the complement][Using the relation: | ||
|  | 
 | ||
|  | x = v2 * a \/ (v1 * b) | ||
|  | 
 | ||
|  | where | ||
|  | 
 | ||
|  | a = __ibetac_inv(v1 \/ 2, v2 \/ 2, p) | ||
|  | 
 | ||
|  | and | ||
|  | 
 | ||
|  | b = 1 - a | ||
|  | 
 | ||
|  | Quantities /a/ and /b/ are both computed by __ibetac_inv without the | ||
|  | subtraction implied above.]] | ||
|  | [[mean][v2 \/ (v2 - 2)]] | ||
|  | [[variance][2 * v2[super 2 ] * (v1 + v2 - 2) \/ (v1 * (v2 - 2) * (v2 - 2) * (v2 - 4))]] | ||
|  | [[mode][v2 * (v1 - 2) \/ (v1 * (v2 + 2))]] | ||
|  | [[skewness][2 * (v2 + 2 * v1 - 2) * sqrt((2 * v2 - 8) \/ (v1 * (v2 + v1 - 2))) \/ (v2 - 6)]] | ||
|  | [[kurtosis and kurtosis excess] | ||
|  |     [Refer to, [@http://mathworld.wolfram.com/F-Distribution.html | ||
|  |     Weisstein, Eric W. "F-Distribution." From MathWorld--A Wolfram Web Resource.]  ]] | ||
|  | ] | ||
|  | 
 | ||
|  | [endsect][/section:f_dist F distribution] | ||
|  | 
 | ||
|  | [/ fisher.qbk | ||
|  |   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). | ||
|  | ] |