Wilcoxon秩和检验MATLAB实现

本文介绍了Wilcoxon秩和检验的基本概念,用于检验两组数据是否有显著差异,通过MATLAB实例展示了如何使用ranksum函数,并解释了p值和q值的含义。最后,讨论了如何正确处理不同数据结构的比较。
摘要由CSDN通过智能技术生成

最近在看论文,看到有作者用Wilcoxon秩和检验来检验两个算法的差异性,好奇了解了一下。

定义

简单点说,就是判断两组数据有无差异性,但是看了很多文章,很多人都说是在对比中位数的情况下的比较。想详细了解的,可以调转链接

关于Wilcoxon秩和检验(Wilcoxon rank-sum test) - 知乎 (zhihu.com)

威尔科克森秩和检验 - MATLAB ranksum - MathWorks 中国

说的再好,还是直接看实例,看得头疼

在这里直接使用大规模的(0,1)均匀分布数据来实现

x=rand(1,10000);
y=rand(1,10000);
[p,q,r]=ranksum(x,y)

p = 
   0.640773667675908
q = logical
   0
r = 包含以下字段的 struct:
       zval: 0.466617355456995
    ranksum: 100195501

在这里本人对于输出结果的解读是这样的,在64%水平上没有差异。按官方的表示是

表示未能在 64% 显著性水平上拒绝原假设

多次运行,发现q是不变的,在MATLAB中文网里面说过的,q要么是0,要么是1,所以,得出结论:

当q=0时,表示两组数据没有差异的;反之,为1时是有差异的

验证一下

x=rand(100,1);
y=5*rand(100,1);
[p,q,r]=ranksum(x,y)

p = 
     5.026024152685828e-22
q = logical
   1
r = 包含以下字段的 struct:
       zval: -9.647721020817423
    ranksum: 6101

还有就是考虑列时,同样的效果

x=rand(10000,1);
y=rand(10000,1);
[p,q,r]=ranksum(x,y)
p = 
   0.655492485862250
q = logical
   0
r = 包含以下字段的 struct:
       zval: 0.446145031988502
    ranksum: 100187143

有小伙伴可能发现漏洞了,万一比较的是两个10000×2的数据矩阵咋整;给你们考虑到了

x=rand(10000,2);
y=rand(10000,2);
[p,q,r]=ranksum(x,y)

错误使用 ranksum (第 61 行)
RANKSUM 需要向量而不是矩阵数据。

比较的数据有且只能是向量

当然了,在同样的q值下,p值越小,说明差异性越大。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Wilcoxon检验Wilcoxon rank-sum test)是一种非参数的假设检验方法,用于比较两组独立样本的中位数是否相同。Wilcoxon检验的原假设是两组样本的中位数相同,备择假设是两组样本的中位数不同。 在Matlab中,Wilcoxon检验可以使用函数ranksum实现。该函数的用法如下: ```matlab [p,h] = ranksum(x,y) ``` 其中,x和y分别是两组样本的数据,p是假设检验的p值,h是表示是否拒绝原假设的逻辑值。如果h为1,则拒绝原假设,说明两组样本的中位数不同;如果h为0,则不能拒绝原假设,说明两组样本的中位数可能相同。 例如,假设有两组数据x和y: ```matlab x = [6, 8, 10, 12, 14]; y = [5, 7, 9, 11, 13]; ``` 则可以使用ranksum函数进行Wilcoxon检验: ```matlab [p,h] = ranksum(x,y) ``` 运行结果为: ``` p = 0.5 h = 0 ``` 由于p值为0.5,大于显著性水平0.05,且h为0,因此不能拒绝原假设,即两组样本的中位数可能相同。 ### 回答2: Wilcoxon检验又称为Mann-Whitney U检验,是一种非参数检验方法,用于比较两组独立样本的中位数是否有显著差异。 在Matlab中,我们可以使用ranksum函数进行Wilcoxon检验。该函数的语法格式如下: [p,h,stats] = ranksum(x,y,'alpha',0.05,'tail','both') 其中,x和y分别表示两组独立样本数据,'alpha'是置信水平,默认为0.05,'tail'表示检验方向,默认为'both',可以为'left'或'right'。 ranksum函数的返回值分别为p,h和stats。其中,p表示显著性水平;h表示拒绝原假设的判断;stats包含了Wilcoxon检验的统计量,包括和、均数、标准偏差等信息。 在进行Wilcoxon检验之前,需先做数据预处理,包括数据清洗、缺失值处理、数据标准化等。然后,我们可以使用ranksum函数对两组独立样本进行比较,得到显著性水平和拒绝原假设的判断。如果显著性水平小于设定的置信水平,则拒绝原假设,说明两组数据的中位数存在显著差异。 总的来说,Wilcoxon检验是一种常用的假设检验方法,可以用于比较两组独立样本的中位数是否有显著差异。在Matlab中,我们可以使用ranksum函数进行计算,并对结果进行解释和判断。 ### 回答3: Wilcoxon检验是一种非参数统计方法,用于检验两个样本的中位数是否相同。其原假设为两个样本的中位数相同,备择假设为两个样本的中位数不相同。Wilcoxon检验不要求数据呈正态分布,具有较好的稳健性和适用性。Matlab是一种常用的科学计算软件,可以使用其内置函数进行Wilcoxon检验。 在Matlab中,进行Wilcoxon检验有多种方法,包括ranksum函数和signrank函数。其中,ranksum函数适用于两个独立样本,而signrank函数适用于相依的样本(即配对样本)。使用方法如下: 1. 对于独立样本,使用ranksum函数,输入两个样本的数据向量,即可得出检验结果。示例代码如下: data1 = [1, 2, 3, 4, 5]; data2 = [2, 3, 4, 5, 6]; p = ranksum(data1, data2); 其中,p为检验结果的P值,P值小于0.05则拒绝原假设,即认为两个样本的中位数不相同。 2. 对于相依样本,使用signrank函数,输入两个样本的差分值,即可得出检验结果。示例代码如下: data1 = [1, 2, 3, 4, 5]; data2 = [2, 3, 5, 3, 6]; diff = data1 - data2; p = signrank(diff); 其中,p为检验结果的P值,P值小于0.05则拒绝原假设,即认为两个样本的中位数不相同。 需要注意的是,在使用Wilcoxon检验之前,需要满足一些前提条件:样本数据应为连续型数值型数据;两个样本的样本量应该相等或接近;样本数据不能有过多的缺失值或极端异常值。若不符合前提条件,需要进行数据处理或选择其他适用的统计方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值