Python统计学教程:Mann-Whitney U检验和Wilcoxon秩和检验原理及代码
前言
自学笔记,分享给对统计学原理不太清楚但需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)~(部分定义等来源于知乎百度等)
本文重点:Mann-Whitney U检验(也称Wilcoxon秩和检验)
【1.定义和相关背景】
【2.应用条件】
【3.数据实例以及Python代码】
1.定义和相关背景
秩和检验(rank sum test)又称顺序和检验,它是一种非参数检验(nonparametric test)。它不依赖于总体分布的具体形式,应用时可以不考虑被研究对象为何种分布以及分布是否已知,因而实用性较强。
在总体分布任意的情形下,检验配对的试验数据所在总体的分布位置有无显著差异,往往可以利用符号检验的方法实现。但是符号检验只考虑差数的正负号,而不考虑差数的绝对值差异,会导致部分试验信息损失,结果较为粗略。为了避免符号检验方法的这一缺陷,Wilcoxon提出了一种改进方法,称为Wilcoxon秩和检验(rank sum test)。这种方法同时考虑了差异的方向和差异的大小,较之符号检验更为有效。而对于成组的试验数据所在总体的分布位置有无差异,也可以采用类似的方法进行检验。
秩和检验是通过将所有观察值(或每对观察值差的绝对值)按照从小到大的次序排列,每一观察值(或每对观察值差的绝对值)按照次序编号,称为秩(或秩次)。对两组观察值(配对设计下根据观察值差的正负分为两组)分别计算秩和进行检验。除了比较各对数据差的符号外,这种方法还进一步比较了各对数据差值大小的秩次高低,因此其检验效率较符号检验为高。
2.应用条件
- 两个独立的样本(即不存在配对关系)。
- 数据至少是有序的(ordinal level),不要求满足正态分布或方差齐性。
- 适用于样本量较小(n1,n2<30)或数据分布严重偏离正态的情况。
补充:关于参数检验非参数检验的使用条件想请参考以下两个说明:
【统计学】参数检验和非参数检验的使用条件(图表说明)https://mp.csdn.net/mp_blog/creation/editor/138028274
【统计学】参数检验和非参数检验的区别和基本统计学https://mp.csdn.net/mp_blog/creation/editor/137423304
3.数据实例以及Python代码
下面是一个比较两种英语教学方法在提高学生成绩方面是否有显著差异的例子。
假设想要比较两种英语教学方法(Method A和Method B)的效果。我们随机选择了30名学生,15名接受Method A教学,15名接受Method B教学,并在学期末进行了统一的英语测试(满分100分)。我们想要检验这两种教学方法是否有显著的差异。
数据如下:
Method A: 85, 92, 78, 88, 90, 82, 86, 93, 80, 91, 84, 89, 79, 87, 83
Method B: 80, 85, 75, 82, 88, 78, 83, 90, 77, 86, 81, 84, 76, 79, 87
import numpy as np
from scipy import stats
# 数据
method_a = [85, 92, 78, 88, 90, 82, 86, 93, 80, 91, 84, 89, 79, 87, 83]
method_b = [80, 85, 75, 82, 88, 78, 83, 90, 77, 86, 81, 84, 76, 79, 87]
# 输出数据的基本统计量
print("Method A:")
print(f"Mean: {np.mean(method_a)}")
print(f"Median: {np.median(method_a)}")
print(f"Standard Deviation: {np.std(method_a)}")
print("\nMethod B:")
print(f"Mean: {np.mean(method_b)}")
print(f"Median: {np.median(method_b)}")
print(f"Standard Deviation: {np.std(method_b)}")
# 进行Mann-Whitney U检验
statistic, p_value = stats.mannwhitneyu(method_a, method_b)
print(f"\nMann-Whitney U Test:")
print(f"U statistic: {statistic}")
print(f"P-value: {p_value}")
# 根据p值判断是否存在显著差异
alpha = 0.05
if p_value < alpha:
print("Reject the null hypothesis: The two teaching methods have significantly different effects on students' English scores.")
else:
print("Fail to reject the null hypothesis: The two teaching methods do not have significantly different effects on students' English scores.")
结果:
Method A:
Mean: 85.8
Median: 86.0
Standard Deviation: 4.912513675534162
Method B:
Mean: 82.06666666666666
Median: 82.0
Standard Deviation: 4.574691887420385
Mann-Whitney U Test:
U statistic: 65.0
P-value: 0.03326989436731352
Reject the null hypothesis: The two teaching methods have significantly different effects on students' English scores.
从输出结果可以看出,Method A组的平均分和中位数都高于Method B组。Mann-Whitney U检验的p值为0.0333,小于显著性水平0.05,因此我们拒绝原假设,认为这两种教学方法对学生英语成绩的影响存在显著差异。
作者:TUTO_TUTO