Matlab signrank 函数中的矛盾结果(Wilcoxon 符号秩检验)[重复]

Posted

技术标签:

【中文标题】Matlab signrank 函数中的矛盾结果(Wilcoxon 符号秩检验)[重复]【英文标题】:Contradictory results in Matlab signrank function (Wilcoxon signed rank test) [duplicate] 【发布时间】:2019-03-18 10:59:15 【问题描述】:

这是我提出的算法和基准算法的错误:

>> [algo_err benchmark_err]

ans =

    0.3000    0.2000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.2000
    0.1000    0.1000
    0.1000    0.1000
    0.2000    0.2000
    0.2000    0.2000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.2000    0.3000
    0.2000    0.2000
    0.1000    0.1000
    0.1000    0.1000
    0.1000    0.2000
    0.1000    0.1000
    0.2000    0.1000
    0.1000    0.1000
    0.1000    0.1000
    0.2000    0.1000
    0.2000    0.2000

这是我运行 Wilcoxon 符号秩检验时的结果:

>> [P,H] = signrank(algo_err,benchmark_err);
>> P

P =

     1

>> Win = sum(algo_err < benchmark_err)

Win =

     3

>> Equal = sum(algo_err == benchmark_err)

Equal =

     0

>> Loss = sum(algo_err > benchmark_err)

Loss =

    27

但我认为结果是矛盾的,因为损失的数量如此之多,P本来应该很小。然而这里的 P 是 1。

【问题讨论】:

我建议使用上述重复项,因为在我看来,您有许多相等的元素,但您的 Equal 计算结果为 0。这是因为浮点错误,如链接问答中所述。 【参考方案1】:

signrank(x,y) 检验 x-y 均值为零的假设。 p=1 表示在确定性为 1 (=100%) 的情况下您不能接受测试 假设,意味着 x 和 y 不同(无论 x>y 或 x 小于 y)。

如果你想测试是否x>y,你应该使用

signrank(x,y,'tail','right')

否则(对于 x 小于 y)

signrank(x,y,'tail','left')

【讨论】:

以上是关于Matlab signrank 函数中的矛盾结果(Wilcoxon 符号秩检验)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中HMM函数SEQ(观察序列的值)必须是正整数吗

matlab中的rem怎么用

matlab中关于卷积有一个这样的例子 conv([1 1 1],[1 1 1]) 运行后的结果为 1 2 3 2 1

我用matlab中的griddata 函数,但是插值以后的结果有些点的值小于0,有没有啥办法能控制插值结果的范围

为啥matlab中的ncread函数会减少浮点数? [复制]

matlab中的bar函数怎么用