1. 常见非参数检验
-
符号检验signtest
对两个样本是配对检验。没有考虑差值的幅度,只考虑了差值的正负.
matlab调用函数sign rank,带有一个参数’method’,取值‘exact’或’approximate’ -
wilcoxon 威尔科克森符号秩检验
是配对检验,不仅考虑了差值的正负,还考虑了差值的绝对值(幅度)。秩即排名、次序,是差值绝对值的排名。
matlab调用signrank -
wilcoxon 威尔科克森秩和检验
非配对检验,直接对两样本的所有数据进行排名。
matlab调用ranksum,另见我的参考博客 -
McNemar检验
观察值得是二分类数据,且以自身为参照
https://xw.qq.com/amphtml/20191029A0KEGV00
参考:链接
McNemar检验适用于两个相关样本比例差异检验
满足约束与约束不满足
没有配对关系,但感觉可以用来衡量约束满足的概率是否增大。对 -
Marginal Homgeneity检验
边际同质性检验
图片来源:https://zhuanlan.zhihu.com/p/49472487
2. 复杂的例子
因为项目中遇到了需要非参数检验的地方,所以学习了相关的知识。问题如下:
比较两个算法的性能,有在n个实例上跑出来的结果。一个算法在一个实例上跑出来的结果有两个指标。第一个指标是布尔类型,第二个是数值类型。
如果在第一个指标上都为False则直接打平,若一个False一个True则True对应的那个直接占优,只有第一个指标都为True的话才比较第二个指标的数值大小。
这样的场景有什么(统计性)方法比较两算法优劣
抽象出来应该如下表述:
比较两个样本的差异,每个样本有n个个体,存在配对关系。每个个体有两个指标。第一个指标是布尔类型,第二个是数值类型。
如果在第一个指标上都为False则直接打平,若一个False一个True则True对应的那个直接占优,只有第一个指标都为True的话才比较第二个指标的数值大小。
请问这样有什么(统计性)方法比较两样本优劣吗
最终方案:先对指标1进行McNemar检验,再对两指标整体进行符号检验,合成一个指标,只需要标记正负就可。
和这个文档里最后一个例题有点像,链接
clc
clear
rng(1)
a = rand(100, 1);
b = rand(100, 1) + 0.2;
% b(1:10) = a(1:10);
[p, h] = signtest(a, b) % 1 0.0037
a_(a<b) = -1; % 不能带等号
a_(a>b) = 1; % 不能带等号
[p, h] = signtest(a_, 0) % 1 0.0037
3. Matlab的ttest与ttest2
Matlab的 ttest和ttest2,前者是配对检验,后者不是。故
ttest(a,b) != ttest(a, reverse(b)
ttest2(a,b) == ttest2(a, reverse(b)