一、kw检验概述
在对比两个或者多个组的数据时,我们通常采用t检验或者ANOVA方差分析来判断它们的显著性差别,但是在某些情况下,这些方法并不适用。比如,我们需要比较的两个组的数据在方差上远远不相等,或者是样本的分布不符合正态分布假设。
这时,我们可以使用非参数的kw检验(Kruskal-Wallis检验)来代替前面的t检验和ANOVA分析。kw检验不依赖于总体分布类型,也不要求样本为正态分布。它是分析多个样本的差异性的一种常用方法。
kw检验通过将多组数据汇总排列成一列,再根据秩次重新划分回原始的原始组。把同一个组内的所有数据的秩次加总作为每一个组的统计量,并把这些统计量和数据的样本量一起代入相应的统计分布函数进行推断,从而判断多组数据中是否存在显著差异。
二、kw检验的假设
kw检验包括两个零假设和两个备择假设:
- 零假设1($H_{0}$):所有总体的分布都相同
- 零假设2($H_{0}$):两个或多个总体的分布没有显著差异
- 备择假设1($H_{1}$):至少存在一个总体的分布与其他总体不同
- 备择假设2($H_{1}$):所比较的总体之间存在显著性差异
三、kw检验的计算方法
kw检验的计算方法有以下几个步骤:
- 把数据汇总,计算秩次,把秩次还原到原始数据中的相应位置
- 对每个组的秩次求和
- 计算检验统计量$H$
- 根据$H$在自由度为$k-1$的卡方分布中查找P值,并根据显著性水平判断零假设是否拒绝
下面是使用Python实现kw检验的示例代码:
<Python>
import scipy.stats
def kw_test(data):
""" Performs Kruskal-Wallis test for a list of samples.
Parameters:
-----------
data: list
a list of samples, where each sample is a list of observations
Returns:
--------
H: float
test statistic
pval: float
corresponding p-value
"""
H, pval = scipy.stats.kruskal(*data)
return H, pval
data = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
H, pval = kw_test(data)
print("H = %.3f, p-value = %.3f" % (H, pval))
</Python>
四、kw检验的注意事项
在使用kw检验时,需要注意以下几个问题:
- 当样本量不均等时,有可能产生不稳定的结果,此时可以使用Mann-Whitney-Wilcoxon等秩和检验
- kw检验是对所有总体的总体值进行比较,因此当两个或多个总体的分布不同,但是它们的分布的中位数相等时,kw检验可能得出不正确的结论。
- 如果我们在多个样本之间进行多重比较,需要进行后续的多重比较校正,否则可能会产生false positive。