Wilcoxon signed-rank test

The Wilcoxon signed-rank test is a non-parametric test used to compare the distribution median with a given value m. This criterion could be used as an alternative for one-sample Student t-test. Unlike the t-test, Wilcoxon signed-rank test can work with non-normal distributions.

This test has the following requirements:

• the scale of measurement[1] should be ordinal, interval or ratio (i.e. test could not be applied to nominal variables)
• the distribution should be continuous and symmetric relative to its median
• number of distinct values in the X array should be greater than 4

Note #1
The distribution symmetry requirement is critical. If the distribution is non-symmetric, the test could not be used. In that case we can use less powerful (but more general) sign test.

Subroutine WilcoxonSignedRankTest returns three p-values:

• p-value for two-tailed test (null hypothesis - the median is equal to the given value)
• p-value for left-tailed test (null hypothesis - the median is greater than or equal to the given value)
• p-value for right-tailed test (null hypothesis - the median is less than or equal to the given value)

The test algorithm is simple. All elements which are equal to m are thrown out. After that we have elements of two types only: elements which are greater than m and which are less than m. Elements are sorted by their absolute value. After that W + (sum of positive elements ranks) is calculated. If this hypothesis is true (the median equals m), W + has a distribution which could easily be calculated (using dynamic programming) and tabulated. To define the significance level corresponding to the W + value tables (for small Ns) or asymptotic approximations (for greater Ns) are used. This method lets us calculate p-values with two decimal places in interval [0.0001, 1]. "Two decimal places" does not sound very impressive, but in practice the relative error of less than 1% is enough to make a decision.

Note #2
Some sources recommend to use normal distribution with μ = 0.25·N·(N+1) and σ 2 = N·(N+1)·(2N+1)/24 when estimating the significance level. In fact, as N increases W + converges to normal distribution with these parameters. However, although the rate of convergence is good it's better not to approximate W + with normal distribution, because this approximation can be insufficiently precise.

ALGLIB Project offers you two editions of ALGLIB:

ALGLIB Free Edition:
offers full set of numerical functionality
extensive algorithmic optimizations
no low level optimizations

ALGLIB Commercial Edition:
flexible pricing
offers full set of numerical functionality
extensive algorithmic optimizations
high performance (SMP, SIMD)

ALGLIB 3.16.0 for C++

C++ library.
Delivered with sources.
Monolithic design.
Extreme portability.
Editions:   FREE   COMMERCIAL

ALGLIB 3.16.0 for C#

C# library with native kernels.
Delivered with sources.
VB.NET and IronPython wrappers.
Extreme portability.
Editions:   FREE   COMMERCIAL

ALGLIB 3.16.0 for Delphi

Delphi wrapper around C core.
Delivered as precompiled binary.
Compatible with FreePascal.
Editions:   FREE   COMMERCIAL

ALGLIB 3.16.0 for CPython

CPython wrapper around C core.
Delivered as precompiled binary.
Editions:   FREE   COMMERCIAL