【Python・统计学】Kruskal-Wallis检验/H检验(原理及代码)

本文介绍了Kruskal-Wallis检验的基本概念、原理、应用条件,提供了Python代码示例,并探讨了在实际数据分析中的应用,包括数据实例和Dunn检验的多重比较。
摘要由CSDN通过智能技术生成

前言

自学笔记,分享给对统计学原理不太清楚但需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)~(部分定义等来源于知乎百度等)

本文重点:Kruskal-Wallis检验(Kruskal-Wallis test),也称H检验

1.定义和简单原理

2.应用条件

【3.数据实例以及Python代码

【4.多重比较(例:Dunn检验)

1.定义和简单原理

Kruskal-Wallis检验(Kruskal-Wallis test),也称为克鲁斯卡尔-沃利斯检验或H检验,是一种非参数检验方法,用于比较三个或更多独立样本的差异。它可以看作是Mann-Whitney U检验的扩展

 补充1:Mann-Whitney U检验适用于两组数据,Kruskal-Wallis检验适用于三组及以上数据

【Python・统计学】Mann-Whitney U检验/Wilcoxon秩和检验(原理及代码)icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/138028894

Kruskal-Wallis检验的基本思想是,如果各组样本来自同一总体,那么各组样本的秩和应该相近。具体步骤如下:

  1. 将所有样本的数据合并,并按照从小到大的顺序排列,记录每个数据点的秩(排名)。
  2. 对每个组内的秩求和,计算每个组的平均秩。
  3. 如果各组样本来自同一总体,那么各组的平均秩应该相近。如果某些组的平均秩明显偏高或偏低,则可能表明这些组与其他组存在显著差异。
  4. 计算Kruskal-Wallis检验的统计量H,并根据H的值和自由度,查表或计算p值,以判断是否拒绝原假设。

2.应用条件

  • 数据是独立的随机样本,各组之间相互独立。
  • 数据至少是顺序尺度的,即可以比较大小,但不要求数值之间的差异有意义。
  • 各组样本不必服从正态分布,也不要求方差齐性。
  • 各组样本的分布形状相似(如都是偏态分布或都是对称分布),但不要求完全一致。

3.数据实例以及Python代码

假设我们想比较三种不同教学方法(A、B、C)对学生数学成绩的影响。我们随机选择了一些学生,分别接受这三种教学方法,并记录他们的数学成绩(满分100分)。数据如下:

methodA = [85, 92, 78, 88, 90, 82, 84, 80]
methodB = [75, 80, 82, 74, 79, 76, 81]
methodC = [90, 87, 92, 93, 88, 91, 85, 89, 94]
from scipy.stats import kruskal

# 三组学生的数学成绩
methodA = [85, 92, 78, 88, 90, 82, 84, 80]
methodB = [75, 80, 82, 74, 79, 76, 81]
methodC = [90, 87, 92, 93, 88, 91, 85, 89, 94]

# 进行Kruskal-Wallis检验
statistic, p_value = kruskal(methodA, methodB, methodC)

print(f'检验统计量为: {statistic}')
print(f'p值为: {p_value}')

if p_value < 0.05:
    print('在显著性水平0.05下,拒绝原假设,认为三组学生的数学成绩存在显著差异')
else:
    print('在显著性水平0.05下,接受原假设,认为三组学生的数学成绩没有显著差异')
检验统计量为: 11.40568181818182
p值为: 0.0033381294063426758
在显著性水平0.05下,拒绝原假设,认为三组学生的数学成绩存在显著差异

根据输出结果,p值为0.0033381294063426758,小于显著性水平0.05,因此我们拒绝原假设,认为这三组学生的数学成绩存在显著差异。

需要注意的是,Kruskal-Wallis检验只能判断是否存在显著差异,但无法确定具体是哪些组之间存在差异。如果想进一步了解组间差异,可以进行事后多重比较,如Dunn检验

4.多重比较(例:Dunn检验)

本文使用Dunn检验进行多重比较。

Dunn多重比较代码
rank_A = np.mean([sorted(methodA + methodB + methodC).index(x) + 1 for x in methodA])
    rank_B = np.mean([sorted(methodA + methodB + methodC).index(x) + 1 for x in methodB])
    rank_C = np.mean([sorted(methodA + methodB + methodC).index(x) + 1 for x in methodC])

# 计算总样本量和每个组的样本量
n = len(methodA) + len(methodB) + len(methodC)
n_A, n_B, n_C = len(methodA), len(methodB), len(methodC)
    
# 计算Dunn检验的z值和p值
z_AB, p_AB = mannwhitneyu(methodA, methodB, alternative='two-sided')
z_AC, p_AC = mannwhitneyu(methodA, methodC, alternative='two-sided')
z_BC, p_BC = mannwhitneyu(methodB, methodC, alternative='two-sided')
    
# 调整p值 (Bonferroni correction)
p_AB, p_AC, p_BC = p_AB * 3, p_AC * 3, p_BC * 3
    
print(f'\nDunn事后检验结果:')
print(f'组A vs 组B: p值 = {p_AB}, 均值秩差 = {rank_A - rank_B}')
print(f'组A vs 组C: p值 = {p_AC}, 均值秩差 = {rank_A - rank_C}')
print(f'组B vs 组C: p值 = {p_BC}, 均值秩差 = {rank_B - rank_C}')
    
Dunn事后检验结果:
组A vs 组B: p值 = 0.06265422533333335, 均值秩差 = 5.678571428571429
组A vs 组C: p值 = 0.9698684800000001, 均值秩差 = -2.3611111111111116
组B vs 组C: p值 = 0.001467466666666643, 均值秩差 = -8.03968253968254

从输出结果可以看出,在显著性水平0.05下:

  • 组A与组B的数学成绩没有显著差异(p = 0.06265422533333335 > 0.05)。
  • 组A与组C的数学成绩没有显著差异(p = 0.9698684800000001 > 0.05)。
  • 组B与组C的数学成绩存在显著差异(p = 0.001467466666666643 < 0.05),且组C的均值秩高于组B(均值秩差为负)。

因此,我们可以得出结论,教学方法C的效果显著优于教学方法B,而教学方法A与其他两种方法没有显著差异。

需要注意的是,Dunn检验只是事后多重比较的一种方法,还有其他方法如Nemenyi检验、Conover检验等。此外,Bonferroni校正是一种较为保守的p值调整方法,有时可能会增加第二类错误(假阴性)的风险。根据具体情况,也可以考虑使用其他校正方法,如Holm-Bonferroni校正、FDR校正等。

多重比较方法选择

一般来说,如果样本量相等,可以优先考虑Nemenyi检验;

如果样本量不等,可以考虑Dunn检验或Conover检验;

如果比较次数较少,可以使用Bonferroni校正;

如果比较次数较多,可以考虑Benjamini-Hochberg FDR校正。

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kruskal-Wallis H检验是一种用于比较三个或更多组之间差异的非参数统计检验方法。假设我们对不同品牌汽车的燃油效率进行了调查,并将数据分成了三个组:品牌A、品牌B和品牌C。我们想要知道这三个品牌汽车的燃油效率是否存在显著的差异。 首先,我们将收集到的数据按照品牌分成三组,并对每组的燃油效率进行排名。然后,我们使用Kruskal-Wallis H检验来比较这三组数据的中位数是否有显著差异。在进行检验前,需要对数据进行正态性检验和方差齐性检验。如果数据不满足正态性和方差齐性的要求,可以使用Kruskal-Wallis H检验来代替方差分析。 Kruskal-Wallis H检验的零假设是三组数据的中位数没有显著差异,备择假设是三组数据的中位数存在显著差异。通过计算得出的H统计量与临界值比较,如果H统计量大于临界值,则拒绝零假设,说明三组数据的中位数存在显著差异。 通过Kruskal-Wallis H检验,我们可以得出结论:在显著水平α=0.05下,品牌A、品牌B和品牌C的燃油效率存在显著差异/不存在显著差异。这样的分析结果可以为消费者选择汽车提供参考,也可以为汽车制造商改进产品提供指导。Kr使用Kruskal-Wallis H检验能够帮助我们做出合理的决策和判断。uskal-Wallis H检验是一个非常有用的统计工具,可以在不满足方差齐性和正态性的条件下对多组数据进行比较,为研究和实践提供了很大的便利。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值