p-value distribution of the Brunner–Munzel test in the finite case


In our of the previous post, I explored the distribution of observed p-values for the Mann–Whitney U test in the finite case when the null hypothesis is true. It is time to repeat the experiment for the Brunner–Munzel test.

We generate \(100\,000\) pairs of samples of size \(n\) from the standard normal distribution, calculate the p-value using the two-sided Brunner–Munzel test, and build the density plot for the observed p-values. We use a test implementation that is extended for the corner case with values \(0\) and \(1\). Here is the result for \(n=3\):

Similarly to other rank-based tests, we get a discrete distribution with a limited set of different p-values. The probabilities of each p-value are the following:

\[\mathbb{P}(p = 0.0000) = 0.1, \]

\[\mathbb{P}(p \approx 0.0686) = 0.1, \]

\[\mathbb{P}(p \approx 0.3465) = 0.2, \]

\[\mathbb{P}(p \approx 0.5734) = 0.1, \]

\[\mathbb{P}(p \approx 0.6667) = 0.2, \]

\[\mathbb{P}(p \approx 0.8683) = 0.1, \]

\[\mathbb{P}(p \approx 0.8727) = 0.2. \]

As we can see, the observed distribution is not as nice as in the the Mann–Whitney U test case. In particular, the expectations of influence of the specified statistical significance level to the actual false positive rate (\(\mathbb{P}(p \leq \alpha) = \alpha\)) are distorted:

\[\mathbb{P}(p \leq \alpha)= 0.1 \quad\textrm{for}\quad \alpha \in [0.0000;0.0686), \]

\[\mathbb{P}(p \leq \alpha) = 0.2 \quad\textrm{for}\quad \alpha \in [0.0686;0.3465), \]

\[\mathbb{P}(p \leq \alpha) = 0.4 \quad\textrm{for}\quad \alpha \in [0.3465;0.5734), \]

\[\mathbb{P}(p \leq \alpha) = 0.5 \quad\textrm{for}\quad \alpha \in [0.5734;0.6667), \]

\[\mathbb{P}(p \leq \alpha) = 0.7 \quad\textrm{for}\quad \alpha \in [0.6667;0.8683), \]

\[\mathbb{P}(p \leq \alpha) = 0.9 \quad\textrm{for}\quad \alpha \in [0.8683;0.8727), \]

\[\mathbb{P}(p \leq \alpha) = 1.0 \quad\textrm{for}\quad \alpha \in [0.8727;1.0000). \]

Therefore, the test should be used cautiously when considering small samples. For example, if we set the statistical significance level \(\alpha = 0.07\), the actual false-positive rate will be \(\mathbb{P}(p \leq \alpha) = 0.2\).

Now let us look at the same distribution for \(n=5\), \(n=7\), and \(n=15\):

Asymptotically, it becomes uniform as for other statistical tests. However, on small samples, it has a strange sawtooth-like shape that alter our expectations of the false-positive rate.

The source code of this post and all the relevant files are available on GitHub.