Test the hypothesis that x is selected from the given distribution using the Anderson-Darling test. If the returned q is small, reject the hypothesis at the q*100% level.
The Anderson-Darling A^2 statistic is calculated as follows:
n A^2_n = -n - SUM (2i-1)/n log(z_i (1 - z_{n-i+1})) i=1
where z_i is the ordered position of the x’s in the CDF of the distribution. Unlike the Kolmogorov-Smirnov statistic, the Anderson-Darling statistic is sensitive to the tails of the distribution.
The distribution argument must be a either "uniform", "normal", or "exponential".
For "normal"’ and "exponential" distributions, estimate the
distribution parameters from the data, convert the values
to CDF values, and compare the result to tabluated critical
values. This includes an correction for small n which
works well enough for n >= 8, but less so from smaller n. The
returned info.Asq_corrected
contains the adjusted statistic.
For "uniform", assume the values are uniformly distributed
in (0,1), compute A^2 and return the corresponding p-value from
1-anderson_darling_cdf(A^2,n)
.
If you are selecting from a known distribution, convert your values into CDF values for the distribution and use "uniform". Do not use "uniform" if the distribution parameters are estimated from the data itself, as this sharply biases the A^2 statistic toward smaller values.
[1] Stephens, MA; (1986), "Tests based on EDF statistics", in D’Agostino, RB; Stephens, MA; (eds.) Goodness-of-fit Techinques. New York: Dekker.
See also: anderson_darling_cdf.
The following code
c = anderson_darling_test(10*rande(12,10000),'exponential'); tabulate(100*c,100*[unique(c),1]); % The Fc column should report 100, 250, 500, 1000, 10000 more or less.
Produces the following output
bin Fa Fr% Fc 1 125 1.25% 125 2.5 165 1.65% 290 5 259 2.59% 549 10 532 5.32% 1081 100 8919 89.19% 10000
The following code
c = anderson_darling_test(randn(12,10000),'normal'); tabulate(100*c,100*[unique(c),1]); % The Fc column should report 100, 250, 500, 1000, 10000 more or less.
Produces the following output
bin Fa Fr% Fc 1 99 0.99% 99 2.5 160 1.60% 259 5 258 2.58% 517 10 498 4.98% 1015 100 8985 89.85% 10000
The following code
c = anderson_darling_test(rand(12,10000),'uniform'); hist(100*c,1:2:99); % The histogram should be flat more or less.
Produces the following figure
bin Fa Fr% Fc 1 99 0.99% 99 2.5 160 1.60% 259 5 258 2.58% 517 10 498 4.98% 1015 100 8985 89.85% 10000
Figure 1 |
---|
Package: statistics