Skip to main content
v2026.11,610 entries · CC-BY 4.0

The Wilcoxon Signed-Rank Test: Assumptions, Exact vs. Normal Approximation, and How to Report It

A decision guide to the Wilcoxon signed-rank test: what its null actually asserts (symmetry of the differences, not equal medians), why it is the paired t-test’s counterpart rather than Mann-Whitney’s, Wilcoxon vs Pratt zero handling, the exact vs normal-approximation rule, matched-pairs rank-biserial effect size, and the APA reporting line.

Ask about The Wilcoxon Signed-Rank Test: Assumptions, Exact vs. Normal Approximation, and How to Report It

Answers are drawn from this guide and the rest of the CASRAI corpus, with a link to every source.

Answers are AI-generated from CASRAI’s own published pages and can be wrong, so check the linked sources before relying on one; your question is logged without personal data — never sold, never used to train a third-party model — to show us what CASRAI is missing, so please do not type personal or confidential details. How we use this

Written and maintained by CASRAI Editorial Board

Last updated

The most common sentence written about the Wilcoxon signed-rank test is wrong. It is not a test of medians. Its null hypothesis is that the distribution of the paired differences is symmetric about zero — R’s wilcox.test states the null as “the distribution of x (in the one sample case) or of xy (in the paired two sample case) is symmetric about mu”, and SciPy’s wilcoxon states that it “tests whether the distribution of the differences xy is symmetric about zero”. A statement about the median of the differences follows only if you are additionally willing to assume that difference distribution is symmetric. Guides that say “the Wilcoxon signed-rank test compares medians” have quietly imported an assumption they never told you about, and it is the assumption most likely to fail on the skewed change scores this test is usually reached for.

The Wilcoxon signed-rank test (Wilcoxon, 1945) compares two related measurements on the same units — before and after, left and right, matched case and control. It computes each pair’s difference, ranks those differences by absolute magnitude while ignoring sign, then sums the ranks belonging to positive differences and to negative differences separately. If the two rank sums are far apart, the differences are not distributed symmetrically about zero. This guide covers what that null actually licenses you to say, how zeros and ties change the answer, when the exact distribution is used rather than the normal approximation, which effect size goes with it, and the reporting line.

What the test actually tests

Three claims are commonly conflated, and only the first is what the test delivers unconditionally.

Claim What it requires
The differences are not symmetrically distributed about zero Nothing extra. This is the null the test rejects.
The median of the differences is non-zero That the difference distribution is symmetric — so that the only way to break symmetry-about-zero is a shift in location.
The medians of the two conditions differ Symmetry plus the additional fact that the median of the differences equals the difference of the medians. It generally does not: median(XY) ≠ median(X) − median(Y) except in special cases.

The practical consequence is that a results sentence saying “post-test scores were significantly higher than pre-test scores, Wilcoxon signed-rank p = .01” is safe, while “the median score increased significantly” is a stronger claim that needs the symmetry of the differences to hold. Check it: plot the differences, and read CASRAI’s guide to skewness for how to describe what you see. Symmetry of the differences is a far weaker requirement than normality — but it is not nothing.

There is a location estimate that genuinely corresponds to this test, and most write-ups omit it: the Hodges–Lehmann estimator, or pseudomedian, which is the median of all pairwise averages (di + dj)/2 of the differences (the Walsh averages). R returns it, and its confidence interval, when you pass conf.int = TRUE. If you want a point estimate and interval to sit alongside the p-value, that is the one that inverts this test — not the sample median of the differences, which happens to coincide with it sometimes and not others.

It is the paired t-test’s counterpart, not Mann-Whitney’s

The single most frequent selection error with this test is using it — or citing it — for independent groups. The Wilcoxon family contains two distinct tests with confusingly similar names:

Design Parametric test Rank-based counterpart What gets ranked
Two paired / repeated measurements on the same units Paired t-test Wilcoxon signed-rank test The absolute values of the within-pair differences
Two independent groups Independent-samples t-test Mann-Whitney U / Wilcoxon rank-sum test The raw observations, pooled across both groups
Three or more independent groups One-way ANOVA Kruskal-Wallis test The raw observations, pooled across all groups
Three or more repeated measurements on the same units Repeated-measures ANOVA Friedman test The observations, ranked within each subject

Mann-Whitney U and the Wilcoxon rank-sum test are the same test under two names, which is where the confusion starts: “Wilcoxon test” alone is ambiguous. Write signed-rank or rank-sum explicitly in your methods section. Note also that the signed-rank test with three or more time points is not a solution — running it on every pair of time points inflates the false-positive rate exactly as pairwise t-tests do, and needs the Friedman test plus a corrected post-hoc instead.

Assumptions: what “non-parametric” does not buy you

Non-parametric means the test does not assume a specific parametric family for the population distribution. It does not mean assumption-free, and four assumptions still bind:

  • Pairs are independent of one another. Within a pair the two measurements are deliberately dependent — that is the design — but pair 1 must be independent of pair 2. Clustered data (multiple pairs per clinic, per litter, per classroom) violates this and needs a model that accounts for the clustering.
  • The differences are at least ordinal, and their magnitudes are comparable across pairs. This is the assumption that is quietly stronger than people expect. The test ranks how big each difference is relative to the others, so a difference of 3 points must mean the same thing whether it occurred at the bottom or the top of the scale. On a genuinely ordinal scale — a 5-point Likert item, a tumour grade — that is arguable at best. When only the direction of each difference is defensible, the sign test is the honest choice; it discards magnitude entirely and therefore assumes less (and has less power).
  • The differences are symmetric about the hypothesised value under the null. Covered above. This replaces normality; it does not eliminate the class of assumption.
  • The measurement is on a continuous underlying variable, in the classical derivation. Exact ties and zeros are impossible in theory and routine in practice, which is why the next two sections exist.

What the test genuinely does not require is normality, equal variances, or interval-level measurement of the raw scores — see levels of measurement for why that distinction matters. It is also not a fix for dependence: switching from a paired t-test to a signed-rank test on clustered data changes what is being estimated, not whether the independence assumption is met.

Zero differences: Wilcoxon’s drop, Pratt’s method, and zsplit

A pair whose two measurements are identical produces a difference of zero, which has no sign to rank. Three conventions exist, and your software has silently chosen one for you:

  • Wilcoxon’s original approach (wilcox, the default in R and SciPy): discard all zero differences, then rank the survivors. The sample size n used in the null distribution becomes the number of non-zero differences, not the number of pairs.
  • Pratt’s method (pratt): include the zeros when assigning ranks, then drop the zero-differences’ ranks from the two sums. Because the zeros consume the lowest ranks, every non-zero difference is pushed to a higher rank and the null variance is computed over a larger rank set. SciPy describes it as “more conservative”, and it is. Pratt (1959), Remarks on Zeros and Ties in the Wilcoxon Signed Rank Procedures, JASA 54(287), 655–667, is the source and sets out why discarding zeros outright is unsatisfactory.
  • Split (zsplit): include zeros in the ranking and divide their ranks evenly between the positive and negative sums.

With one or two zeros the three answers barely move. With many zeros — and many zeros are typical when the outcome is a coarse ordinal scale, where a large fraction of participants simply do not change — the choice materially changes both the p-value and the effect size, because it changes n. Decide before you look at the output, state which convention you used, and do not switch conventions after seeing a p-value.

Ties among the non-zero differences

Two pairs with the same absolute difference share a rank. The standard handling is midranks: each tied difference receives the average of the ranks the tied group would have occupied. Midranks leave the expected value of the rank sum unchanged but reduce its variance, so the normal approximation must apply a tie correction — subtracting (1/48) Σ(t3t) over each tied group of size t. Omitting that correction makes the test conservative. Every mainstream package applies it automatically; hand calculation from a textbook formula frequently does not.

Ties matter more than the arithmetic suggests, because they also change which p-value you get: several implementations refuse to compute an exact p-value in the presence of ties, or switch to a permutation distribution conditional on the observed ranks. That is the subject of the next section.

Exact or normal approximation? The actual decision rule

The signed-rank statistic has a known discrete null distribution: with n non-zero differences, each rank 1…n is independently positive or negative with probability ½, giving 2n equally likely sign patterns. Enumerating them gives an exact p-value. For large n that enumeration is replaced by a normal approximation, using

  • E[W+] = n(n + 1) / 4
  • Var[W+] = n(n + 1)(2n + 1) / 24, minus the tie correction above
  • z = (W+ − E[W+] ± 0.5) / √Var, where the 0.5 is the continuity correction that compensates for approximating a discrete statistic with a continuous distribution

The defaults differ by package, and this is worth checking rather than assuming:

Software Exact by default when… With ties or zeros Statistic reported
R, stats::wilcox.test fewer than 50 finite values Current R documents exact inference “using the conditional/permutation distribution given the observed ranks”; older releases fell back to the normal approximation with a warning V — the sum of the positive ranks
Python, scipy.stats.wilcoxon (method='auto') no ties or zeros and n ≤ 50 exhaustive permutations when n ≤ 13; asymptotic above that, with a documented caution that the asymptotic method “may not be very accurate even for len(d) > 14” the smaller of the two rank sums for a two-sided test
SPSS Nonparametric Tests normal approximation by default; exact is a separately licensed option Z (and the rank sums in the ranks table)
Stata, signrank reports a normal-approximation z rank sums plus z

Two consequences follow. First, the same data analysed in two packages can produce two different p-values without either being wrong — they are answering with different null distributions. Second, a reported statistic is not self-identifying: V = 61 from R and W = 5 from SciPy can describe the same analysis. Report the statistic with its symbol and its software, or report Z, which is unambiguous.

Worked example: the same data, three p-values

Illustrative example, not real data. Twelve participants are measured on a 0–20 symptom-severity scale before and after an intervention. The post-minus-pre differences are:

−1, +3, +5, +2, +8, 0, +4, −2, +6, +7, +1, +9

One difference is zero. Under Wilcoxon’s default convention it is dropped, leaving n = 11 non-zero differences. Ranking their absolute values (with midranks for the two 1s and the two 2s) gives:

Difference |d| Rank Sign
−1 1 1.5
+1 1 1.5 +
+2 2 3.5 +
−2 2 3.5
+3 3 5 +
+4 4 6 +
+5 5 7 +
+6 6 8 +
+7 7 9 +
+8 8 10 +
+9 9 11 +

W+ = 61 and W = 5, which sum to n(n + 1)/2 = 66 as they must — a useful arithmetic check. The normal approximation gives E[W+] = 33 and Var = 126.5 − 0.25 = 126.25 after the tie correction for two tied pairs, so z = (61 − 33 − 0.5) / 11.24 = 2.45, two-tailed p = .014.

Method Two-tailed p Why it differs
Exact, standard signed-rank distribution for n = 11 .0098 Enumerates all 211 = 2,048 sign patterns, ignoring the ties
Exact, conditional on the observed (tied) ranks .0107 Enumerates sign patterns over the actual midranks
Normal approximation, tie- and continuity-corrected .0144 Approximates a discrete distribution with a continuous one at n = 11
Pratt’s zero handling, exact conditional .0117 The zero is ranked, then dropped; every non-zero rank shifts up and the null variance grows

All four cross α = .05, so the substantive conclusion is stable here — but the approximate p-value is roughly 45% larger than the exact one, and at n = 11 that gap is entirely predictable. Near a decision threshold, on a small sample, the choice of method is the analysis. This is the concrete reason to prefer the exact p-value whenever the sample is small enough for the software to compute it, and to say which you used.

Effect size: rank-biserial correlation, and the r = Z/√N ambiguity

A p-value from a rank test says a difference was detected; it says nothing about magnitude. Two effect sizes are conventionally paired with the signed-rank test, and they are not interchangeable.

Matched-pairs rank-biserial correlation. Kerby’s (2014) simple difference formula expresses it as the proportion of favourable minus unfavourable evidence: rrb = (W+W) / (W+ + W). In the worked example, (61 − 5) / 66 = .85. It runs from −1 to +1, its sign carries the direction of the effect, and it is computed entirely from quantities the test already produced. Because the denominator is the total rank sum, it is scale-free and does not depend on how you obtained the p-value. Its lineage runs back to Cureton (1956) and Glass (1965); Kerby’s presentation is the one most statistics packages implement.

r = Z/√N. Widely used in psychology, and widely reported without saying what N is — which is the problem, because the two defensible readings give different numbers. In the worked example, z = 2.45, and:

  • N = 11 (the number of non-zero pairs) gives r = .74
  • N = 22 (the number of observations, two per pair) gives r = .52

That is the difference between a “large” and a “medium-to-large” effect on the usual conventions — from one dataset. If you report this statistic, state N explicitly. The rank-biserial correlation has no such ambiguity, which is the better reason to prefer it. Note that neither is Cohen’s d: converting a rank statistic to Cohen’s d assumes the normal model the test was chosen to avoid.

Whichever you report, pair it with descriptive statistics on the right scale — medians and interquartile ranges for each condition, plus the median or Hodges–Lehmann estimate of the differences. Means and standard deviations do not belong next to a rank test.

How to report a Wilcoxon signed-rank test

A complete report contains the test name (unambiguous), the sample size actually used, the statistic with its symbol, whether the p-value is exact or approximate, the exact p-value, an effect size, and the descriptive statistics. APA style asks for exact p-values to two or three decimals, no leading zero on values that cannot exceed 1, and statistical symbols in italics.

From the worked example:

“A Wilcoxon signed-rank test was conducted on the 11 participants whose symptom score changed (one participant showed no change and was excluded under the default zero-handling). Scores were significantly higher after the intervention (Mdn = 12, IQR = 5) than before (Mdn = 8, IQR = 4), exact two-tailed p = .010, W+ = 61, Z = 2.45, matched-pairs rank-biserial r = .85. The Hodges–Lehmann estimate of the median change was 3.5 points.”

Note that the two condition medians differ by 4 points while the median of the paired differences is 3.5 — a small, concrete instance of why the two are not the same quantity, and why the difference-based estimate is the one that belongs next to this test.

Generic template: “A Wilcoxon signed-rank test [indicated / did not indicate] a significant difference in [outcome] between [condition 1] (Mdn = [value], IQR = [value]) and [condition 2] (Mdn = [value], IQR = [value]), [exact / approximate] two-tailed p = [value], [statistic] = [value], Z = [value], rrb = [value]. [n] of [N] pairs showed a non-zero difference; zeros were handled by [convention].”

Three details separate an adequate report from a good one, and all three are usually missing: the zero-handling convention, whether the p-value is exact or approximate, and the n actually entering the test when it differs from the number of pairs. Each changes the number a reader would reproduce. CASRAI’s guide to reporting p-values covers the general conventions, and statistical significance covers what a threshold verdict does and does not establish.

Power, and when not to use this test

The efficiency cost of ranking is smaller than most researchers assume. Against normally distributed data — the case most favourable to the paired t-test — the asymptotic relative efficiency of the signed-rank test is 3/π ≈ 0.955, meaning roughly 105 observations to match what the t-test achieves with 100. Against heavy-tailed or outlier-prone data the signed-rank test can be substantially more efficient. “Non-parametric tests are much less powerful” is folklore, not arithmetic.

Do not use the signed-rank test when: the two samples are independent (use Mann-Whitney U or an independent-samples t-test); there are three or more repeated measurements (Friedman, or a mixed-effects model); the pairs are clustered (a mixed model); only the direction of change is meaningful and the magnitudes are not comparable across pairs (the sign test); or the outcome is unordered categorical (McNemar’s test for paired binary data, not a rank test at all). And do not reach for it merely because a normality test returned p < .05 — with a large sample, normality tests reject trivial departures that leave the t-test perfectly well-behaved.

Related checks before you commit

Before switching from a paired t-test, confirm which assumption actually failed rather than assuming it did: CASRAI’s guide to checking the normality assumption covers the formal tests and Q-Q plots that make that call, and note that the assumption belongs to the differences, not to either condition separately. If the research question is association between two variables rather than change within pairs, see the correlation coefficient, including Spearman’s rank correlation — the same rank-based logic applied to monotonic relationships. For the independent-groups and multi-group members of this family, see the Kruskal-Wallis test. This guide sits in CASRAI’s research methods cluster alongside the rest of its statistical test reference material.

Primary sources

  • Wilcoxon, F. (1945). Individual Comparisons by Ranking Methods. Biometrics Bulletin, 1(6), 80–83.
  • Pratt, J. W. (1959). Remarks on Zeros and Ties in the Wilcoxon Signed Rank Procedures. Journal of the American Statistical Association, 54(287), 655–667. doi:10.1080/01621459.1959.10501526
  • Kerby, D. S. (2014). The Simple Difference Formula: An Approach to Teaching Nonparametric Correlation. Comprehensive Psychology, 3. (Rank-biserial correlation; earlier lineage in Cureton, 1956, Psychometrika, and Glass, 1965, Journal of Educational Measurement.)
  • R Core Team. stats::wilcox.test documentation — the null-hypothesis statement and the exact/approximate switching rule quoted above.
  • SciPy developers. scipy.stats.wilcoxon documentation — the zero_method options and the method='auto' thresholds quoted above.

Frequently asked questions

Does the Wilcoxon signed-rank test compare medians?

Not directly. Its null hypothesis is that the distribution of the paired differences is symmetric about zero. It supports a claim about the median of the differences only if you additionally assume that difference distribution is symmetric, and it supports a claim about the difference between the two conditions’ medians only under a further condition, since the median of the differences is generally not the difference of the medians.

What is the difference between the Wilcoxon signed-rank test and the Mann-Whitney U test?

Design. The signed-rank test is for paired or repeated measurements on the same units and ranks the absolute within-pair differences. Mann-Whitney U (equivalently, the Wilcoxon rank-sum test) is for two independent groups and ranks the raw observations pooled across both. Because both carry Wilcoxon’s name, always write “signed-rank” or “rank-sum” explicitly.

What happens to pairs with no difference?

It depends on the convention your software uses. Wilcoxon’s original method, the default in R and SciPy, discards them and reduces n accordingly. Pratt’s method ranks them first and then drops their ranks, which is more conservative. A third option splits their ranks between the two sums. With many zeros the three give visibly different answers, so state which you used.

When should I use the exact test instead of the normal approximation?

Whenever the sample is small enough for your software to compute it — R computes exact by default below 50 finite values, SciPy at 50 or fewer when there are no ties or zeros, and via exhaustive permutation at 13 or fewer when there are. The approximation is what the exact distribution converges to; at small n the two can differ enough to matter near a threshold, as the worked example above shows.

What effect size should I report with a Wilcoxon signed-rank test?

The matched-pairs rank-biserial correlation, (W+W) / (W+ + W), is computed directly from the test and is unambiguous. If you report r = Z/√N instead, state whether N is the number of pairs or the number of observations — the two give materially different values from the same data.

Is a non-parametric test assumption-free?

No. It drops the assumption of a specific distributional family, not the assumption of independence between pairs, not the requirement that difference magnitudes be comparable across pairs, and — for the median interpretation — not symmetry of the differences.

My software reported V = 61 and another reported W = 5 on the same data. Which is right?

Both. R’s V is the sum of the positive ranks; SciPy’s two-sided statistic is the smaller of the two rank sums. They sum to n(n + 1)/2, so each determines the other. Report the symbol and the software, or report Z, which does not vary by convention.

Can I use the Wilcoxon signed-rank test on Likert data?

For paired Likert-type items, cautiously. The test ranks the magnitudes of the differences, which presumes those magnitudes are comparable across pairs — a stronger claim on an ordinal scale than the test’s reputation as “the ordinal-data test” implies. Coarse scales also generate many ties and zeros, which is exactly where the zero-handling convention starts to move the answer. Where only direction is defensible, the sign test assumes less.

Follow CASRAI

Research-administration guidance, standards updates and independent tool reviews.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →