最近在看论文,看到有作者用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值越小,说明差异性越大。