How to Conduct a Wilcoxon Signed-Rank Test in Python

Spread the love


The Wilcoxon signed-rank test is a non-parametric statistical hypothesis test used to compare two related samples, matched samples, or repeated measurements on a single sample to assess whether their population mean ranks differ. It can be used as an alternative to the paired student’s t-test, t-test for matched pairs, or the t-test for dependent samples when the population cannot be assumed to be normally distributed.

This article will guide you on how to conduct a Wilcoxon signed-rank test in Python using the SciPy library, which provides a suite of statistical functions including the function for this test.

Hypothetical Scenario

Let’s consider a hypothetical scenario: You are a sleep researcher studying the effects of a new therapy on the sleep duration of patients. You record the sleep duration of ten patients before and after undergoing the therapy.

Your null hypothesis is that the therapy has no effect on sleep duration. If the therapy has a significant effect, the sleep duration after the therapy will be significantly different than before the therapy.

Implementing the Wilcoxon Signed-Rank Test

To start, import the necessary libraries:

import numpy as np
import pandas as pd
from scipy.stats import wilcoxon

Assume that you have the sleep duration data stored in two Python lists, ‘before_therapy’ and ‘after_therapy’:

before_therapy = [7.3, 7.1, 6.9, 7.2, 7.4, 7.0, 7.3, 7.2, 7.1, 7.0]
after_therapy = [7.8, 7.6, 7.5, 7.9, 7.6, 7.7, 7.7, 7.8, 7.6, 7.9]

You can perform the Wilcoxon signed-rank test using the wilcoxon function from scipy.stats.

w_stat, p_value = wilcoxon(before_therapy, after_therapy)

The wilcoxon function calculates the Wilcoxon signed-rank test and returns the test statistic (W-statistic) and the associated p-value.

Interpreting the Results

After performing the test, you can print the results.

print('W-statistic:', w_stat)
print('P-value:', p_value)

The W-statistic is the result of the Wilcoxon signed-rank test calculation, and the p-value is the probability of observing the data or more extreme data, given that the null hypothesis is true.

In most cases, if the p-value is less than a chosen significance level (usually 0.05), you would reject the null hypothesis. In this case, rejecting the null hypothesis means concluding that the therapy has a significant effect on sleep duration.


The Wilcoxon signed-rank test is a robust non-parametric alternative to the paired samples t-test, useful when the assumptions of the t-test are violated. Python, with its versatile libraries like SciPy, offers a simple and efficient way to perform this test.

However, remember that statistical tests are tools, and their validity and reliability largely depend on the appropriateness of the test for the given data and research question. So, always ensure you carry out proper data cleaning, pre-processing, and exploratory data analysis before performing any statistical tests.

Leave a Reply