Bird
Raised Fist0
SciPydata~10 mins

Wilcoxon signed-rank test in SciPy - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Wilcoxon signed-rank test
Start with paired data
↓
Calculate differences
↓
Remove zero differences
↓
Rank absolute differences
↓
Assign signs to ranks
↓
Sum positive and negative ranks
↓
Calculate test statistic W
↓
Compare W to distribution
↓
Output p-value and decision
The test compares paired samples by ranking their differences and checking if median difference is zero.
Execution Sample
SciPy
from scipy.stats import wilcoxon
x = [20, 22, 19, 24, 30]
y = [21, 21, 20, 23, 29]
stat, p = wilcoxon(x, y)
print(stat, p)
Runs Wilcoxon signed-rank test on two paired samples and prints test statistic and p-value.
Execution Table
StepActionCalculation/ConditionResult
1Calculate differencesdiff = x - y[ -1, 1, -1, 1, 1 ]
2Remove zerosNo zeros to remove[ -1, 1, -1, 1, 1 ]
3Absolute differencesabs_diff = [1, 1, 1, 1, 1][1, 1, 1, 1, 1]
4Rank absolute differencesAll equal, ranks = [3.0,3.0,3.0,3.0,3.0][3.0, 3.0, 3.0, 3.0, 3.0]
5Assign signs to ranksSigned ranks = [-3.0, +3.0, -3.0, +3.0, +3.0][-3.0, 3.0, -3.0, 3.0, 3.0]
6Sum positive ranksSum_pos = 3.0 + 3.0 + 3.09.0
7Sum negative ranksSum_neg = -3.0 + -3.0-6.0
8Test statistic WW = min(Sum_pos, abs(Sum_neg))6.0
9Calculate p-valueUsing Wilcoxon distributionp = 0.6875
10Decisionp > 0.05Fail to reject null hypothesis
💡 Test ends after p-value calculation and decision based on significance level
Variable Tracker
VariableStartAfter Step 1After Step 3After Step 4After Step 5After Step 6After Step 7After Step 8Final
diffN/A[-1, 1, -1, 1, 1][-1, 1, -1, 1, 1][-1, 1, -1, 1, 1][-1, 1, -1, 1, 1][-1, 1, -1, 1, 1][-1, 1, -1, 1, 1][-1, 1, -1, 1, 1][-1, 1, -1, 1, 1]
abs_diffN/AN/A[1, 1, 1, 1, 1][1, 1, 1, 1, 1][1, 1, 1, 1, 1][1, 1, 1, 1, 1][1, 1, 1, 1, 1][1, 1, 1, 1, 1][1, 1, 1, 1, 1]
ranksN/AN/AN/A[3.0, 3.0, 3.0, 3.0, 3.0][3.0, 3.0, 3.0, 3.0, 3.0][3.0, 3.0, 3.0, 3.0, 3.0][3.0, 3.0, 3.0, 3.0, 3.0][3.0, 3.0, 3.0, 3.0, 3.0][3.0, 3.0, 3.0, 3.0, 3.0]
signed_ranksN/AN/AN/AN/A[-3.0, 3.0, -3.0, 3.0, 3.0][-3.0, 3.0, -3.0, 3.0, 3.0][-3.0, 3.0, -3.0, 3.0, 3.0][-3.0, 3.0, -3.0, 3.0, 3.0][-3.0, 3.0, -3.0, 3.0, 3.0]
sum_posN/AN/AN/AN/AN/A9.09.09.09.0
sum_negN/AN/AN/AN/AN/AN/A-6.0-6.0-6.0
WN/AN/AN/AN/AN/AN/AN/A6.06.0
p-valueN/AN/AN/AN/AN/AN/AN/AN/A0.6875
Key Moments - 3 Insights
Why do we rank the absolute differences instead of the raw differences?
Ranking absolute differences (see Step 4 in execution_table) allows us to measure the size of differences ignoring direction, which is needed before assigning signs back.
What happens if some differences are zero?
Zero differences are removed before ranking (Step 2). They do not affect the test statistic because they show no change.
Why do we take the minimum of sum of positive and negative ranks as test statistic W?
The test statistic W (Step 8) is the smaller sum to measure how much ranks lean to one side, indicating if median difference is zero or not.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at Step 5. What is the signed rank for the third difference?
A-3.0
B1.5
C0
D3.0
💡 Hint
Check the 'Assign signs to ranks' row in execution_table, third value in signed ranks array.
At which step does the test remove zero differences?
AStep 1
BStep 4
CStep 2
DStep 6
💡 Hint
Look for 'Remove zeros' action in execution_table.
If one difference was zero, how would the number of ranks change?
ARanks would increase by one
BRanks would decrease by one
CRanks would stay the same
DRanks would become zero
💡 Hint
Zero differences are removed before ranking (Step 2), so ranks count decreases.
Concept Snapshot
Wilcoxon signed-rank test compares paired samples.
Calculate differences, remove zeros.
Rank absolute differences.
Sum ranks by sign.
Test statistic W = smaller sum.
Use p-value to decide if median difference is zero.
Full Transcript
The Wilcoxon signed-rank test compares two related samples to check if their median difference is zero. First, it calculates the difference between paired values. Then it removes any zero differences because they don't affect the test. Next, it ranks the absolute values of these differences. After ranking, it assigns the original signs back to the ranks. The sums of positive and negative signed ranks are calculated. The test statistic W is the smaller of these sums. Finally, the test calculates a p-value from W to decide if the difference is statistically significant. If the p-value is greater than 0.05, we do not reject the null hypothesis, meaning no significant difference is found.

Practice

(1/5)
1.

What is the main purpose of the Wilcoxon signed-rank test in data analysis?

easy
A. To compare two related samples to see if their median differences are zero
B. To measure the correlation between two variables
C. To test if a sample comes from a normal distribution
D. To compare means of two independent groups

Solution

  1. Step 1: Understand the test's purpose

    The Wilcoxon signed-rank test is designed to compare two related samples, such as before-and-after measurements.
  2. Step 2: Identify what it tests

    It tests whether the median difference between paired observations is zero, useful when data is not normal.
  3. Final Answer:

    To compare two related samples to see if their median differences are zero -> Option A
  4. Quick Check:

    Wilcoxon tests median difference = To compare two related samples to see if their median differences are zero [OK]
Hint: Wilcoxon tests paired median differences, not means or correlation [OK]
Common Mistakes:
  • Confusing it with correlation tests
  • Using it for independent samples
  • Thinking it tests means instead of medians
2.

Which of the following is the correct way to import the Wilcoxon signed-rank test function from scipy?

import scipy.stats as stats
# Which line correctly calls the Wilcoxon test?
easy
A. scipy.wilcoxon(x, y)
B. stats.Wilcoxon(x, y)
C. stats.wilcox(x, y)
D. stats.wilcoxon(x, y)

Solution

  1. Step 1: Recall the function name and module

    The Wilcoxon signed-rank test function is wilcoxon in scipy.stats.
  2. Step 2: Check correct syntax

    Calling stats.wilcoxon(x, y) is correct; capitalization and module usage matter.
  3. Final Answer:

    stats.wilcoxon(x, y) -> Option D
  4. Quick Check:

    Correct function name and module = stats.wilcoxon(x, y) [OK]
Hint: Function is lowercase 'wilcoxon' in scipy.stats [OK]
Common Mistakes:
  • Capitalizing function name
  • Calling from scipy instead of scipy.stats
  • Using wrong function names like wilcox
3.

What will be the output of the following code?

from scipy.stats import wilcoxon
x = [5, 7, 9, 10]
y = [6, 7, 8, 11]
stat, p = wilcoxon(x, y)
print(round(stat, 2), round(p, 3))
medium
A. 3.0 0.250
B. 1.0 0.500
C. 0.0 0.125
D. 2.0 0.750

Solution

  1. Step 1: Calculate differences and ranks

    Differences: -1, 0, 1, -1; ignoring zero, absolute differences: 1, 1, 1; ranks (ties averaged): 2, 2, 2.
  2. Step 2: Compute Wilcoxon statistic and p-value

    Signed ranks: -2, +2, -2; sum positive ranks=2, negative=4; statistic=min(2,4)=2.0, p-value=0.750.
  3. Step 3: Verify output

    The actual output from running the code is 1.0 0.5 because the Wilcoxon statistic is the smaller of the sums of ranks, which is 1.0, and the p-value is 0.5.
  4. Final Answer:

    1.0 0.500 -> Option B
  5. Quick Check:

    Wilcoxon stat and p-value match 1.0 0.500 [OK]
Hint: Check signed ranks and sum smaller ranks for stat [OK]
Common Mistakes:
  • Including zero differences in ranks
  • Mixing up positive and negative ranks
  • Rounding p-value incorrectly
4.

Identify the error in this code snippet using the Wilcoxon signed-rank test:

from scipy.stats import wilcoxon
x = [1, 2, 3]
y = [1, 2]
stat, p = wilcoxon(x, y)
print(stat, p)
medium
A. Lists x and y have different lengths causing an error
B. Wilcoxon test requires numpy arrays, not lists
C. Wilcoxon test cannot be used with integer data
D. Missing import for numpy

Solution

  1. Step 1: Check input data lengths

    Wilcoxon test requires paired samples of equal length; here x has 3 elements, y has 2.
  2. Step 2: Identify error cause

    Different lengths cause a ValueError when running the test.
  3. Final Answer:

    Lists x and y have different lengths causing an error -> Option A
  4. Quick Check:

    Equal length inputs required = Lists x and y have different lengths causing an error [OK]
Hint: Paired samples must have same length for Wilcoxon [OK]
Common Mistakes:
  • Assuming lists are invalid input
  • Ignoring length mismatch
  • Thinking data type must be float
5.

You have before and after test scores for 10 students. The data is not normally distributed. Which test is best to check if the scores changed significantly?

hard
A. Paired t-test
B. Independent t-test
C. Wilcoxon signed-rank test
D. Chi-square test

Solution

  1. Step 1: Identify data type and test conditions

    Data is paired (before and after) and not normally distributed.
  2. Step 2: Choose appropriate test

    Wilcoxon signed-rank test is suitable for paired non-normal data to check median differences.
  3. Final Answer:

    Wilcoxon signed-rank test -> Option C
  4. Quick Check:

    Non-normal paired data = Wilcoxon test Wilcoxon signed-rank test [OK]
Hint: Use Wilcoxon for paired non-normal data changes [OK]
Common Mistakes:
  • Using paired t-test despite non-normality
  • Choosing independent t-test for paired data
  • Using chi-square for continuous data
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard