mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			194 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| [section:skew_normal_dist Skew Normal Distribution]
 | |
| 
 | |
| ``#include <boost/math/distributions/skew_normal.hpp>``
 | |
| 
 | |
|    namespace boost{ namespace math{
 | |
| 
 | |
|    template <class RealType = double,
 | |
|              class ``__Policy``   = ``__policy_class`` >
 | |
|    class skew_normal_distribution;
 | |
| 
 | |
|    typedef skew_normal_distribution<> normal;
 | |
| 
 | |
|    template <class RealType, class ``__Policy``>
 | |
|    class skew_normal_distribution
 | |
|    {
 | |
|    public:
 | |
|       typedef RealType value_type;
 | |
|       typedef Policy   policy_type;
 | |
|       // Constructor:
 | |
|       skew_normal_distribution(RealType location = 0, RealType scale = 1, RealType shape = 0);
 | |
|       // Accessors:
 | |
|       RealType location()const; // mean if normal.
 | |
|       RealType scale()const; // width, standard deviation if normal.
 | |
|       RealType shape()const; // The distribution is right skewed if shape > 0 and is left skewed if shape < 0.
 | |
|                              // The distribution is normal if shape is zero.
 | |
|    };
 | |
| 
 | |
|    }} // namespaces
 | |
| 
 | |
| The skew normal distribution is a variant of the most well known
 | |
| Gaussian statistical distribution.
 | |
| 
 | |
| The skew normal distribution with shape zero resembles the
 | |
| [@http://en.wikipedia.org/wiki/Normal_distribution Normal Distribution],
 | |
| hence the latter can be regarded as a special case of the more generic skew normal distribution.
 | |
| 
 | |
| If the standard (mean = 0, scale = 1) normal distribution probability density function is
 | |
| 
 | |
| [space][space][equation normal01_pdf]
 | |
| 
 | |
| and the cumulative distribution function
 | |
| 
 | |
| [space][space][equation normal01_cdf]
 | |
| 
 | |
| then the [@http://en.wikipedia.org/wiki/Probability_density_function PDF]
 | |
| of the [@http://en.wikipedia.org/wiki/Skew_normal_distribution skew normal distribution]
 | |
| with shape parameter [alpha], defined by O'Hagan and Leonhard (1976) is
 | |
| 
 | |
| [space][space][equation skew_normal_pdf0]
 | |
| 
 | |
| Given [@http://en.wikipedia.org/wiki/Location_parameter location] [xi],
 | |
| [@http://en.wikipedia.org/wiki/Scale_parameter scale] [omega],
 | |
| and [@http://en.wikipedia.org/wiki/Shape_parameter shape] [alpha],
 | |
| it can be
 | |
| [@http://en.wikipedia.org/wiki/Skew_normal_distribution transformed],
 | |
| to the form:
 | |
| 
 | |
| [space][space][equation skew_normal_pdf]
 | |
| 
 | |
| and [@http://en.wikipedia.org/wiki/Cumulative_distribution_function CDF]:
 | |
| 
 | |
| [space][space][equation skew_normal_cdf]
 | |
| 
 | |
| where ['T(h,a)] is Owen's T function, and ['[Phi](x)] is the normal distribution.
 | |
| 
 | |
| The variation the PDF and CDF with its parameters is illustrated
 | |
| in the following graphs:
 | |
| 
 | |
| [graph skew_normal_pdf]
 | |
| [graph skew_normal_cdf]
 | |
| 
 | |
| [h4 Member Functions]
 | |
| 
 | |
|    skew_normal_distribution(RealType location = 0, RealType scale = 1, RealType shape = 0);
 | |
| 
 | |
| Constructs a skew_normal distribution with location [xi],
 | |
| scale [omega] and shape [alpha].
 | |
| 
 | |
| Requires scale > 0, otherwise __domain_error is called.
 | |
| 
 | |
|    RealType location()const;
 | |
| 
 | |
| returns the location [xi] of this distribution,
 | |
| 
 | |
|    RealType scale()const;
 | |
| 
 | |
| returns the scale [omega] of this distribution,
 | |
| 
 | |
|    RealType shape()const;
 | |
| 
 | |
| returns the shape [alpha] of this distribution.
 | |
| 
 | |
| (Location and scale function match other similar distributions,
 | |
| allowing the functions `find_location` and `find_scale` to be used generically).
 | |
| 
 | |
| [note While the shape parameter may be chosen arbitrarily (finite),
 | |
| the resulting [*skewness] of the distribution is in fact limited to about (-1, 1);
 | |
| strictly, the interval is (-0.9952717, 0.9952717).
 | |
| 
 | |
| A parameter [delta] is related to the shape [alpha] by
 | |
| [delta] = [alpha] / (1 + [alpha][pow2]),
 | |
| and used in the expression for skewness
 | |
| [equation skew_normal_skewness]
 | |
| ] [/note]
 | |
| 
 | |
| [h4 References]
 | |
| 
 | |
| * [@http://azzalini.stat.unipd.it/SN/ Skew-Normal Probability Distribution] for many links and bibliography.
 | |
| * [@http://azzalini.stat.unipd.it/SN/Intro/intro.html A very brief introduction to the skew-normal distribution]
 | |
| by Adelchi Azzalini (2005-11-2).
 | |
| * See a [@http://www.tri.org.au/azzalini.html skew-normal function animation].
 | |
| 
 | |
| [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 ['-[max_value], +[min_value]].
 | |
| Infinite values are not supported.
 | |
| 
 | |
| There are no [@http://en.wikipedia.org/wiki/Closed-form_expression closed-form expression]
 | |
| known for the mode and median, but these are computed for the
 | |
| 
 | |
| * mode - by finding the maximum of the PDF.
 | |
| * median - by computing `quantile(1/2)`.
 | |
| 
 | |
| The maximum of the PDF is sought through searching the root of f'(x)=0.
 | |
| 
 | |
| Both involve iterative methods that will have lower accuracy than other estimates.
 | |
| 
 | |
| [h4 Testing]
 | |
| 
 | |
| __R using library(sn) described at
 | |
| [@http://azzalini.stat.unipd.it/SN/  Skew-Normal Probability Distribution],
 | |
| and at [@http://cran.r-project.org/web/packages/sn/sn.pd R skew-normal(sn) package].
 | |
| 
 | |
| Package sn provides functions related to the skew-normal (SN)
 | |
| and the skew-t (ST) probability distributions,
 | |
| both for the univariate and for the the multivariate case,
 | |
| including regression models.
 | |
| 
 | |
| __Mathematica was also used to generate some more accurate spot test data.
 | |
| 
 | |
| [h4 Accuracy]
 | |
| 
 | |
| The skew_normal distribution with shape = zero is implemented as a special case,
 | |
| equivalent to the normal distribution in terms of the
 | |
| [link math_toolkit.sf_erf.error_function error function],
 | |
| and therefore should have excellent accuracy.
 | |
| 
 | |
| The PDF and mean, variance, skewness and kurtosis are also accurately evaluated using
 | |
| [@http://en.wikipedia.org/wiki/Analytical_expression analytical expressions].
 | |
| The CDF requires [@http://en.wikipedia.org/wiki/Owen%27s_T_function Owen's T function]
 | |
| that is evaluated using a Boost C++ __owens_t implementation of the algorithms of
 | |
| M. Patefield and D. Tandy, Journal of Statistical Software, 5(5), 1-25 (2000);
 | |
| the complicated accuracy of this function is discussed in detail at __owens_t.
 | |
| 
 | |
| The median and mode are calculated by iterative root finding, and both will be less accurate.
 | |
| 
 | |
| [h4 Implementation]
 | |
| 
 | |
| In the following table, [xi] is the location of the distribution,
 | |
| and [omega] is its scale, and [alpha] is its shape.
 | |
| 
 | |
| [table
 | |
| [[Function][Implementation Notes]]
 | |
| [[pdf][Using:[equation skew_normal_pdf] ]]
 | |
| [[cdf][Using: [equation skew_normal_cdf][br]
 | |
| where ['T(h,a)] is Owen's T function, and ['[Phi](x)] is the normal distribution. ]]
 | |
| [[cdf complement][Using: complement of normal distribution + 2 * Owens_t]]
 | |
| [[quantile][Maximum of the pdf is sought through searching the root of f'(x)=0]]
 | |
| [[quantile from the complement][-quantile(SN(-location [xi], scale [omega], -shape[alpha]), p)]]
 | |
| [[location][location [xi]]]
 | |
| [[scale][scale [omega]]]
 | |
| [[shape][shape [alpha]]]
 | |
| [[median][quantile(1/2)]]
 | |
| [[mean][[equation skew_normal_mean]]]
 | |
| [[mode][Maximum of the pdf is sought through searching the root of f'(x)=0]]
 | |
| [[variance][[equation skew_normal_variance] ]]
 | |
| [[skewness][[equation skew_normal_skewness] ]]
 | |
| [[kurtosis][kurtosis excess-3]]
 | |
| [[kurtosis excess] [ [equation skew_normal_kurt_ex] ]]
 | |
| ] [/table]
 | |
| 
 | |
| [endsect] [/section:skew_normal_dist skew_Normal]
 | |
| 
 | |
| [/ skew_normal.qbk
 | |
|   Copyright 2012 Bejamin Sobotta, 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).
 | |
| ]
 | |
| 
 |