非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

这篇具有很好参考价值的文章主要介绍了非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近看论文,看到了Wilcoxon signed-rank test(符号秩检验),咱也不知道是个啥,就学习了一下,这里做一下笔记,方便以后查阅。

非参数检验

概念

数据描述的三个角度:集中趋势,离散程度和分布形态。

常用统计推断检验方法分为两大类:参数检验和非参数检验。

参数检验通常是假设总体服从正态分布,样本统计量服从T分布的基础之上,对总体分布中一些未知的参数,例如总体均值、总体方差和总体标准差等进行统计推断。

如果总体的分布情况未知,同时样本容量又小,无法运用中心极限定理实施参数检验,推断总体的集中趋势和离散程度的参数情况。这时,可以用非参数检验,非参数检验对总体分布不做假设,直接从样本的分析入手推断总体的分布。

非参数检验和参数检验的对比

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
① 适用范围

非参数检验用作参数检验的替代方法,当数据不满足正态性时,将使用非参数检验。因此,关键是要弄清楚是否具有正态分布。如果数据大致呈现"钟型"分布,则可以使用参数检验。

② 检验效能

如果数据满足参数分布,应该优先选择参数检验方法。愿因在于参数检验的检验效能要高于非参数检验。尤其是在样本数较大的情况下,参数检验结果较为稳健,所以即使不服从正态分布,也会选择参数检验。

③ 对比指标

参数检验一般用平均值反映数据的集中趋势;但由于数据不满足正态分布,在非参数检验中如果再使用平均值描述显然不太准确(比如常被吐槽的人均收入),此时中位数是更好的选择。

  1. 参数检验分析结果
    非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
    参数检验用平均值及标准差描述数据分布请况。

  2. 非参数检验分析结果
    非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
    非参数检验结果中使用的是中位数描述差异。

④ 图形展示

除了使用以上指标进行分析,还可以通过图形直观展示数据情况。参数检验常用图形有:折线图、条形图等,非参数检验可以使用箱线图查看。

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

折线图
 

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

箱线图
 

参数检验与非参数检验的方法对比

凡是在分析过程中不涉及总体分布参数的检验方法,都可以称为“非参数检验”。因而,与参数检验一样,非参数检验包括许多方法。以下是最常见的非参数检验及其对应的参数检验对应方法:

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

非参数检验的方法

非参数检验的方法是五花八门,名字也是千奇百怪,但是,这些方法有它们的共性。

上面介绍了,因为对总体的分布形态不清楚或总体分布不是正态分布,所以无法用参数检验来推断总体的集中趋势和离散程度的参数。

统计学家想到用排秩(排序)的方法来规避不是正态分布的问题,用样本的排序情况来推断总体的分布情况。这就好比梁山一百单八将排好了座次,从中随机抽出几个,测试武力值,大概其能够了解梁山的实力如何。

下图是非参数检验常用的检验方法表:
非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

Wilcoxon 检验

Frank Wilcoxon (1892—1965) 是美国的统计学家,发表了 70 篇左右论文,但其最大的贡献就是这 2 个以他名字命名的非参假设检验方法秩和检验符号秩检验。他在 1945 年发表的论文 1 中将二者分别称为 非成对检验 (unpaired experiment)和 成对检验(paired comparison)。 正是因为其巨大影响力使得这两个检验方法都以他的名字命名,并流传下来。

Wilcoxon rank-sum test(秩和检验)

基本概念

在统计学中,Wilcoxon rank-sum test(威尔科克森秩和检验) 也叫 Mann-Whitney U test(曼-惠特尼 U 检验),或者 Wilcoxon-Mann-Whitney test。秩和检验是一个非参的假设检验方法,一般用来检测 2 个数据集是否来自于相同分布的总体。

这里的 “秩” 其实就是 “排名” 的意思,“秩和” 当然就是指 “将排名进行求和” 的操作。在秩和检验中,我们不要求被检验的 2 组数据包含相同个数的元素,换句话说,秩和检验更适用于非成对数据之间的差异性检测。

应用实例

假设我们有 2 组数据 x 1 x_{1} x1 x 2 x_{2} x2,如下表所示, x 1 x_{1} x1中有 7 个元素(列 x 1 x_1 x1中), x 2 x_{2} x2中有 8 个元素(列 x 2 x_{2} x2中),现在使用秩和检验判断这 2 组数据是否存在显著性差异。

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
步骤 1:我们首先将 x 1 x_{1} x1 x 2 x_{2} x2整合成一个序列,并按升序重新排序,序号记在表中的 r a n k rank rank列当中。我们分别计算 2 组数据的排名之和 R 1 R_{1} R1 R 2 R_{2} R2有:
非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
注意,当我们计算若干等值元素的排名时,会用这些元素排名的平均值作为它们在整个序列中的排名。例如 x 1 x_{1} x1中的第 2 个元素与 x 2 x_{2} x2中第3 个元素的值都等于 5,且这 2 个 5 在整个序列中的排名分别是第 5 和第 6,因此这两个元素的排名为 5 + 6 2 = 5.5 \frac{5+6}{2}=5.5 25+6=5.5 。其余等值元素的排名计算也与之类似。

步骤 2:令 n 1 n_{1} n1 n 2 n_{2} n2分别表示 2 组数据的个数,即 n 1 = 7 n_{1}=7 n1=7, n 2 = 8 n_{2}=8 n2=8。再令 T TT 表示小样本的排名和,即 T = R 1 = 77.5 T = R_1 = 77.5 T=R1=77.5。根据计算公式可得 U 1 U_{1} U1 U 2 U_{2} U2的值如下:

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
步骤 3:由于 U 1 U_{1} U1更小,我们依此来查 Wilcoxon 双尾临界表,当 α = 0.05 , n 1 = 7 , n 2 = 8 α = 0.05 , n_1 = 7 , n_2 = 8 α=0.05,n1=7,n2=8时的临界值是 10。因为 U 1 < 10 U_{1} < 10 U1<10,故应该拒绝原假设。

最终结论是: x 1 x_{1} x1 x 2 x_{2} x2存在统计意义上的显著性差异,它们可能来自分布不同的总体。

编程实现

在 python 中我们调用 scipy 包来里的 stats.mannwhitneyu() 函数来实现秩和检验,如下代码:

from scipy import stats

x = [9,5,8,7,10,6,7]
y = [7,4,5,6,3,6,4,4]

def wilcoxon_rank_sum_test(x, y):
	res = stats.mannwhitneyu(x ,y)
	print(res)

wilcoxon_rank_sum_test(x, y)

wilcoxon_rank_sum_test(y, x)

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

Wilcoxon signed-rank test(符号秩检验)

基本概念

Wilcoxon signed-rank test(威尔科克森符号秩检验)也是一种非参的假设检验方法,它成对的检查 2 个数据集中的数据(即 paired difference test)来判断 2 个数据集是否来自相同分布的总体。

应用实例

假设我们有 2 组数据 y 1 y_{1} y1 y 2 y_{2} y2,如下表所示。我们按照如下 3 步来计算 wilcoxon signed-rank test 的结果。
非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
步骤 1:首先对 y 1 y_{1} y1 y 2 y_{2} y2两两成对配对形成 10 个数据对(即 I D = 0 , . . . , 9 ID=0,...,9 ID=0,...,9),然后将这 10 个数据对两两求差,得到符号位 s i g n sign sign列。具体的做法是:当 y 1 y_1 y1元素比 y 2 y_2 y2对应元素大时,符号位为正,即 + 1 +1 +1;当 y 1 y_1 y1元素比 y 2 y_2 y2对应元素小时,符号位为负,即 − 1 -1 1。例如,在 I D = 1 ID=1 ID=1的数据对中, 125 > 110 125 > 110 125>110,故其符号位为 + 1 +1 +1.

步骤 2: 首先对 y 1 y_{1} y1 y 2 y_{2} y2两两成对求差得到绝对值 a b s abs abs列,然后根据 a b s abs abs列排序得到 r a n k rank rank列。当某一对 y 1 y_{1} y1 y 2 y_{2} y2的元素相等时,即 a b s = 0 abs=0 abs=0时,我们不计算其 r a n k rank rank值。例如,在 I D = 4 ID=4 ID=4的数据对中, y 1 y_1 y1 y 2 y_2 y2的值都是 140,因此这对数组没有排名值。

步骤 3: 有了这个 s i g n sign sign r a n k rank rank列的结果后,我们就可以来计算秩和了,其中大于 0 的秩和 W + W^{+} W+和 对于小于 0 的秩和 W − W^{-} W,以及最终的符号秩和 ∣ W ∣ |W| W如下所示,

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
步骤 4:最后我们根据 ∣ W ∣ |W| W 来查表,我们得到当 Wilcoxon 在 α = 0.05 \alpha=0.05 α=0.05 n = 9 n = 9 n=9的时候的临界值是 5,而我们计算出来的 ∣ W ∣ = 9 > 5 |W| = 9 > 5 W=9>5,因此我们不能拒绝原假设。最终结论是: y 1 y_{1} y1 y 2 y_{2} y2不存在统计意义上的显著性差异,它们可能来自于同一分布的总体。

编程实现

在 python 中我们调用 scipy 包来里的 stats.wilcoxon() 函数来实现秩和检验,如下代码,

from scipy import stats

x = [125,115,130,140,140,115,140,125,140,135]
y = [110,122,125,120,140,124,123,137,135,145]

def wilcoxon_signed_rank_test(x, y):
	res = stats.wilcoxon(x ,y)
	print(res)

wilcoxon_signed_rank_test(x, y)

wilcoxon_signed_rank_test(y, x)

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
得到的结果如下,其中 s t a t i s t i c = 18.0 statistic = 18.0 statistic=18.0,表示 2 类符号秩和较小的一个( ∣ W + |W^{+} W+ ∣ W − ∣ |W^{-}| W最小的是 18 18 18); p v a l u e = 0.5936 … pvalue=0.5936… pvalue=0.5936 就是我们需要的 p − v a l u e p-value pvalue 值。之所以出现 Warning 信息是因为我们的数据量太少,一般来讲大于 20 20 20 是比较合适做假设检验的。

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

Wilcoxon 符号秩检验临界表

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
2022年10月12日更新:
我太难了,又看到了Friedman算法,这是个啥,不知道啊,接着学习吧,记录一下!

Friedman 检验与 Nemenyi 后续检验

当我们提出一种算法,需要知道我们的算法和现在已有的算法相比,性能是否更优的时候,就需要用到模型性能评估的方法。

Friedman 检验与 Nemenyi 后续检验方法的特点是:可以进行多个算法的比较

计算序值

假定我们用 D 1 、 D 2 、 D 3 D_1、D_2、D_3 D1D2D3 D 4 D_4 D4四个数据集对算法 A A A B B B C C C进行比较。

首先需要得到每个算法在每个数据集上的测试结果,可以是准确率,也可以是均方误差,然后在每个数据上根据测试性能的好坏进行排序,并赋予序值 1,2,…。

如果算法的测试性能相同,则评分排名。
比如,在 D 1 D_1 D1 D 3 D_3 D3上, A A A 最好、 B B B次之, C C C 最差,而在 D 2 D_2 D2 A A A 最好 B B B C C C性能相同,…,则可以列出如下表所示的序值表,对每一列的序值进行求平均,得到平均序值。

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

Friedman 检验

使用 Friedman 检验来判断这些算法是否性能相同。如果相同,则他们的平均序值应该相等。

假定我们在 N N N个数据集上比较 k k k个算法,令 r i r_i ri表示第 i i i个算法的平均序值。为简化讨论,暂时不考虑平分序值的情况,则 r i r_i ri服从正态分布,其均值和方差分别为 ( k + 1 ) / 2 (k+1)/2 (k+1)/2 ( k 2 − 1 ) / 12 (k^2-1)/12 (k21)/12。变量

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
k k k N N N都较大时,服从自由度为 k − 1 k-1 k1 χ 2 \chi^2 χ2分布。

然后,上述的这样的 “原始 Friedman 检验” 过于保守,现在通常使用变量

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
其中, τ F \tau_F τF服从自由度为 k − 1 k-1 k1 ( k − 1 ) ( N − 1 ) (k-1)(N-1) (k1)(N1) F F F分布。常用的临界值可以见下表。

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
若 “所有算法的性能相同” 这个假设被拒绝,则说明算法的性能显著不同。

Nemenyi 后续检验

这个时候就需要使用 “后续检验”(post-hoc test)来进一步区分算法。常用的算法是 Nemenyi 后续检验。

Nemenyi 检验计算出平均序值差别的临界值域

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验
下表给出了 α = 0.05 \alpha = 0.05 α=0.05 0.1 0.1 0.1时常用的 q α q_\alpha qα值。

若两个算法的平均序值之差超出了临界值域#CD# ,则以相应的置信度拒绝 “两个算法性能相同” 这一假设。

非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验

Python实现

import numpy as np
import matplotlib.pyplot as plt
 
 
def Friedman(n, k, data_matrix):
    '''
    Friedman 检验
    :param n:数据集个数
    :param k: 算法种数
    :param data_matrix:排序矩阵
    :return:T1
    '''
 
    # 计算每个算法的平均序值
    row, col = data_matrix.shape  # 获取矩阵的行和列
    xuzhi_mean = list()
    for i in range(col):  # 计算平均序值
        xuzhi_mean.append(data_matrix[:, i].mean())  # xuzhi_mean = [1.0, 2.125, 2.875] list列表形式
    sum_mean = np.array(xuzhi_mean)  # 转成 numpy.ndarray 格式方便运算
 
    sum_ri2_mean = (sum_mean ** 2).sum()  # 整个矩阵内的元素逐个平方后,得到的值相加起来
    result_Tx2 = (12 * n) * (sum_ri2_mean - ((k * ((k + 1) ** 2)) / 4)) / (k * (k + 1))  # P42页的公式
    result_Tf = (n - 1) * result_Tx2 / (n * (k - 1) - result_Tx2)  # P42页的公式
    return result_Tf
 
 
def nemenyi(n, k, q):
    '''
    Nemenyi 后续检验
    :param n:数据集个数
    :param k:算法种数
    :param q:直接查书上2.7的表
    :return:
    '''
    cd = q * (np.sqrt((k * (k + 1) / (6 * n))))
    return cd
 
 
data = np.array([[1, 2, 3], [1, 2.5, 2.5], [1, 2, 3], [1, 2, 3]])
 
T1 = Friedman(4, 3, data)
cd = nemenyi(4, 3, 2.344)
print('tf={}'.format(T1))
print('cd={}'.format(cd))
 
# 画出CD图
row, col = data.shape  # 获取矩阵的行和列
xuzhi_mean = list()
for i in range(col):  # 计算平均序值
    xuzhi_mean.append(data[:, i].mean())  # xuzhi_mean = [1.0, 2.125, 2.875] list列表形式
sum_mean = np.array(xuzhi_mean)
# 这一句可以表示上面sum_mean: rank_x = list(map(lambda x: np.mean(x), data.T))  # 均值 [1.0, 2.125, 2.875]
name_y = ["A1", "A2", "A3"]
# 散点左右的位置
min_ = sum_mean - cd / 2
max_ = sum_mean + cd / 2
# 因为想要从高出开始画,所以数组反转一下
name_y.reverse()
sum_mean = list(sum_mean)
sum_mean.reverse()
max_ = list(max_)
max_.reverse()
min_ = list(min_)
min_.reverse()
# 开始画图
plt.title("Friedman")
plt.scatter(sum_mean, name_y)  # 绘制散点图
plt.hlines(name_y, max_, min_)
plt.show()

参考资料

如何理解非参数检验?

非参数检验思路总结,清晰理解就靠它了!

Wilcoxon 检验之 rank-sum 与 signed-rank

威尔科克森(Wilcoxon)符号秩检验:定义,运行方式

Wilcoxon Signed Rank Test: Definition, How to Run, SPSS

模型性能评估之 Friedman 检验与 Nemenyi 后续检验

【西瓜书 第二章】2.4.4 Friedman 检验 和 Nemenyi 检验文章来源地址https://www.toymoban.com/news/detail-408165.html

到了这里,关于非参数检验——Wilcoxon 检验 & Friedman 检验与 Nemenyi 后续检验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Wilcoxon秩和检验

            Wilcoxon秩和检验是基于样本数据秩和。先将两样本看成是单一样本(混合样本)然后由小到大排列观察值统一编秩.如果原假设两个独立样本来自相同的总体为真,那么秩将大约均匀分布在两个样本中,即小的、中等的、大的秩值应该大约均匀被分在两个样本中。如果备

    2024年02月12日
    浏览(33)
  • SPSS参数检验、非参数检验、方差分析

    在做数据分析的时候,不是只要有数据,就拿去做模型,也有很多数据,结合需求,是不需要用到模型的,比如: 奶茶店,老板想看一下,合作时间(年份为单位)与奶茶店销量的关系与差异。 像这样,只有一个自变量和一个因变量的数据,做模型效果是非常差的,也不能

    2023年04月08日
    浏览(57)
  • 参数检验和非参数检验(结合SPSS分析)

    概念 :是一种根据样本数据来推断总体的分布或均值、方差等总体统计参数的方法。 根据 样本 来推断 总体 的原因: 总体数据不可能全部收集到。如:质量检测问题 收集到总体全部数据要耗费大量的人力和财力 假设检验包括: 参数检验 非参数检验 基本原理 :利用小概率

    2024年02月06日
    浏览(46)
  • 参数与非参数检验:理解差异并正确使用

    数据科学是一个快速发展的领域,它在很大程度上依赖于统计技术来分析和理解复杂的数据集。这个过程的一个关键部分是假设检验,它有助于确定从样本中获得的结果是否可以推广到总体。 在这篇文章中,我们将探讨参数与非参数检验之间的区别,提供示例以更好地理解它

    2023年04月24日
    浏览(45)
  • 非参数检验方法,核密度估计简介

    在20世纪,统计学还处于起步阶段计算机还不是那么流行的时候,假设正态分布是生成数据的标准。这主要是因为在那个所有结果都是手工计算的时代,正态分布可以使计算不那么繁琐。 但在这个大数据时代,随着计算能力的提高,数据的可用性使得统计学家采用了更现代的

    2024年02月07日
    浏览(39)
  • 参数估计和假设检验的区别与联系

    笔记来源: 参数估计与假设检验 参数估计和假设检验有什么区别? 参数估计和假设检验是推断统计的两个组成部分,它们都是根据样本信息对总体的数量特征进行推断 下图来自《统计学图鉴》 参数估计和假设检验都是以抽样分布为理论依据,建立在概率论基础之上的统计

    2024年02月09日
    浏览(41)
  • 2023年数学建模:参数估计与假设检验:自助法(Bootstrap)详解

    目录 1. 引言 2. 自助法简介 3. 自助法在参数估计中的应用 3.1 原理

    2024年02月08日
    浏览(44)
  • 概率论与数理统计:第七章:参数估计 第八章:假设检验

    1.矩估计 p i ( θ ) p_i(θ) p i ​ ( θ ) 、 f ( x i , θ ) f(x_i,θ) f ( x i ​ , θ ) ,用矩估计法来估计未知参数θ { X ˉ = E ( X ) 1 n ∑ i = 1 n X i 2 = E ( X 2 ) left{begin{aligned} bar{X} = E(X) \\\\ dfrac{1}{n}sumlimits_{i=1}^nX_i^2 = E(X^2) end{aligned}right. ⎩ ⎨ ⎧ ​ X ˉ = n 1 ​ i = 1 ∑ n ​ X i 2 ​ = ​ E

    2024年02月11日
    浏览(45)
  • Midjourney万能高清咒语,真正的近看也美

    明明我都拿人家的图垫图了,为什么质量还是很差? 明明别人都把咒语分享出来了,为什么质量还是很差? 今天我们就来解决这两个问题,看到就是缘分,点点手指来个小心心不过分吧,哈哈 什么你在怀疑我的实力,可以看我第一张图的对比效果,可以来一张图片PK下呦 问

    2024年02月10日
    浏览(45)
  • Java代码瘦身,巧用 @Valid,@Validated 的分组校验和嵌套检验,实现高阶参数校验操作

            在 JavaEE 项目中, RestFull 层接收参数首先要对一些字段的格式进行校验,以防止所有查询都落到数据库,这也是一种合理的限流手段。以前基本上都是用 if...else...,这样的代码太啰嗦,除了使用策略模式进行优化,今天介绍一下校验注解@Valid,@Validated和@PathVariable,

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包