hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_nonpar_test_mwu (g08ah)


    1  Purpose
    2  Syntax
    7  Accuracy
    9  Example


nag_nonpar_test_mwu (g08ah) performs the Mann–Whitney U test on two independent samples of possibly unequal size.


[u, unor, p, ties, ranks, ifail] = g08ah(x, y, tail, 'n1', n1, 'n2', n2)
[u, unor, p, ties, ranks, ifail] = nag_nonpar_test_mwu(x, y, tail, 'n1', n1, 'n2', n2)


The Mann–Whitney U test investigates the difference between two populations defined by the distribution functions Fx and Gy respectively. The data consist of two independent samples of size n1 and n2, denoted by x1,x2,,xn1 and y1,y2,,yn2, taken from the two populations.
The hypothesis under test, H0, often called the null hypothesis, is that the two distributions are the same, that is Fx=Gx, and this is to be tested against an alternative hypothesis H1 which is using a two tailed, upper tailed or lower tailed probability respectively. You select the alternative hypothesis by choosing the appropriate tail probability to be computed (see the description of argument tail in Arguments).
Note that when using this test to test for differences in the distributions one is primarily detecting differences in the location of the two distributions. That is to say, if we reject the null hypothesis H0 in favour of the alternative hypothesis H1: Fx>Gy we have evidence to suggest that the location, of the distribution defined by Fx, is less than the location, of the distribution defined by Gy.
The Mann–Whitney U test differs from the Median test (see nag_nonpar_test_median (g08ac)) in that the ranking of the individual scores within the pooled sample is taken into account, rather than simply the position of a score relative to the median of the pooled sample. It is therefore a more powerful test if score differences are meaningful.
The test procedure involves ranking the pooled sample, average ranks being used for ties. Let r1i be the rank assigned to xi, i=1,2,,n1 and r2j the rank assigned to yj, j=1,2,,n2. Then the test statistic U is defined as follows;
U is also the number of times a score in the second sample precedes a score in the first sample (where we only count a half if a score in the second sample actually equals a score in the first sample).
nag_nonpar_test_mwu (g08ah) returns:
(a) The test statistic U.
(b) The approximate Normal test statistic,
z=U-meanU±12 varU  
varU=n1n2n1+n2+112-n1n2 n1+n2n1+n2-1 ×TS  
TS=j= 1 τtjtj- 1tj+ 112  
τ is the number of groups of ties in the sample and tj is the number of ties in the jth group.
Note that if no ties are present the variance of U reduces to n1n212n1+n2+1.
(c) An indicator as to whether ties were present in the pooled sample or not.
(d) The tail probability, p, corresponding to U (adjusted to allow the complement to be used in an upper one tailed or a two tailed test), depending on the choice of tail, i.e., the choice of alternative hypothesis, H1. The tail probability returned is an approximation of p is based on an approximate Normal statistic corrected for continuity according to the tail specified. If n1 and n2 are not very large an exact probability may be desired. For the calculation of the exact probability see nag_nonpar_prob_mwu_noties (g08aj) (no ties in the pooled sample) or nag_nonpar_prob_mwu_ties (g08ak) (ties in the pooled sample).
The value of p can be used to perform a significance test on the null hypothesis H0 against the alternative hypothesis H1. Let α be the size of the significance test (that is, α is the probability of rejecting H0 when H0 is true). If p<α then the null hypothesis is rejected. Typically α might be 0.05 or 0.01.


Conover W J (1980) Practical Nonparametric Statistics Wiley
Neumann N (1988) Some procedures for calculating the distributions of elementary nonparametric teststatistics Statistical Software Newsletter 14(3) 120–126
Siegel S (1956) Non-parametric Statistics for the Behavioral Sciences McGraw–Hill


Compulsory Input Parameters

1:     xn1 – double array
The first vector of observations, x1,x2,,xn1.
2:     yn2 – double array
The second vector of observations. y1,y2,,yn2.
3:     tail – string (length ≥ 1)
Indicates the choice of tail probability, and hence the alternative hypothesis.
A two tailed probability is calculated and the alternative hypothesis is H1:FxGy.
An upper tailed probability is calculated and the alternative hypothesis H1:Fx<Gy, i.e., the x's tend to be greater than the y's.
A lower tailed probability is calculated and the alternative hypothesis H1:Fx>Gy, i.e., the x's tend to be less than the y's.
Constraint: tail='T', 'U' or 'L'.

Optional Input Parameters

1:     n1 int64int32nag_int scalar
Default: the dimension of the array x.
The size of the first sample, n1.
Constraint: n11.
2:     n2 int64int32nag_int scalar
Default: the dimension of the array y.
The size of the second sample, n2.
Constraint: n21.

Output Parameters

1:     u – double scalar
The Mann–Whitney rank sum statistic, U.
2:     unor – double scalar
The approximate Normal test statistic, z, as described in Description.
3:     p – double scalar
The tail probability, p, as specified by the argument tail.
4:     ties – logical scalar
Indicates whether the pooled sample contained ties or not. This will be useful in checking which function to use should one wish to calculate an exact tail probability.
ties=false, no ties were present (use nag_nonpar_prob_mwu_noties (g08aj) for an exact probability).
ties=true, ties were present (use nag_nonpar_prob_mwu_ties (g08ak) for an exact probability).
5:     ranksn1+n2 – double array
Contains the ranks of the pooled sample. The ranks of the first sample are contained in the first n1 elements and those of the second sample are contained in the next n2 elements.
6:     ifail int64int32nag_int scalar
ifail=0 unless the function detects an error (see Error Indicators and Warnings).

Error Indicators and Warnings

Errors or warnings detected by the function:

Cases prefixed with W are classified as warnings and do not generate an error of type NAG:error_n. See nag_issue_warnings.

On entry,n1<1,
On entry,tail'T', 'U' or 'L'.
W  ifail=3
The pooled sample values are all the same, that is the variance of u=0.0.
An unexpected error has been triggered by this routine. Please contact NAG.
Your licence key may have expired or may not have been installed correctly.
Dynamic memory allocation failed.


The approximate tail probability, p, returned by nag_nonpar_test_mwu (g08ah) is a good approximation to the exact probability for cases where maxn1,n230 and n1+n240. The relative error of the approximation should be less than 10%, for most cases falling in this range.

Further Comments

The time taken by nag_nonpar_test_mwu (g08ah) increases with n1 and n2.


This example performs the Mann–Whitney test on two independent samples of sizes 16 and 23 respectively. This is used to test the null hypothesis that the distributions of the two populations from which the samples were taken are the same against the alternative hypothesis that the distributions are different. The test statistic, the approximate Normal statistic and the approximate two tail probability are printed. An exact tail probability is also calculated and printed depending on whether ties were found in the pooled sample or not.
function g08ah_example

fprintf('g08ah example results\n\n');

x = [13;  6; 12;  7; 12;  7; 10;  7;
     10;  7; 16;  7; 10;  8;  9;  8];
y = [17;  6; 10;  8; 15;  8; 15; 10;
     15; 10; 14; 10; 14; 11; 14; 11;
     13; 12; 13; 12; 13; 12; 12];
n1 = int64(numel(x));
n2 = int64(numel(y));

fprintf('Mann-Whitney U test\n\n');
fprintf('Sample size of group 1 = %5d\n', n1);
fprintf('Sample size of group 2 = %5d\n\n', n2);
fprintf('Data values\n');
fprintf('\n     Group 1 ');
for j = 1:floor(n1/8)
  i1 = (j-1)*8 + 1;
  i2 = min(n1,i1+7);
  fprintf('\n             ');
fprintf('\n     Group 2 ');
for j = 1:floor(n2/8)
  i1 = (j-1)*8 + 1;
  i2 = min(n2,i1+7);
  fprintf('\n             ');

% Perform test
tail = 'Lower-tail';
[u, unor, p, ties, ranks, ifail] =  ...
  g08ah(x, y, tail);

% Calculate exact probabilities
if ties
  [pexact, ifail] = g08ak( ...
                      n1, n2, tail, ranks, u);
  [pexact, ifail] = g08aj( ...
                      n1, n2, tail, u);
fprintf('\nTest statistic            = %8.4f\n', u);
fprintf('Normalized test statistic = %8.4f\n', unor);
fprintf('Approx. tail probability  = %8.4f\n\n', p);
if ties
  fprintf('There are ties in the pooled sample\n\n');
  fprintf('There are no ties in the pooled sample\n\n');
fprintf('Exact tail probability    = %8.4f\n', pexact);

g08ah example results

Mann-Whitney U test

Sample size of group 1 =    16
Sample size of group 2 =    23

Data values

     Group 1   13   6  12   7  12   7  10   7
               10   7  16   7  10   8   9   8
     Group 2   17   6  10   8  15   8  15  10
               15  10  14  10  14  11  14  11
               13  12  13  12  13  12  12
Test statistic            =  86.0000
Normalized test statistic =  -2.8039
Approx. tail probability  =   0.0025

There are ties in the pooled sample

Exact tail probability    =   0.0020

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015