2

, scipy.stats.ranksums,wilcoxonmannwhitneyu给出了与 Matlab 不同的结果ranksum

4

1 回答 1

3

这取决于您使用的选项。检查以下示例:

1- MATLAB

rng('default') % for reproducibility
x = unifrnd(0,1,20,1);
y = unifrnd(0.25,1.25,20,1);
p = ranksum(x,y);
p =
   0.2503

2- Python(为了保持一致,我没有再次生成数字,但我已经将MATLAB中生成的数字移动到Python脚本中)

from scipy.stats import *
import numpy as np

y=np.array([0.905740699156587, 0.285711678574190, 1.09912930586878, 1.18399324775755, 0.928735154857774, 1.00774013057833, 0.993132468124916, 0.642227019534168, 0.905477890177557, 0.421186687811562, 0.956046088019609, 0.28183284637742, 0.526922984960890, 0.296171390631154, 0.347131781235848, 1.07345782832729, 0.944828622975817, 0.567099480060861, 1.20022204883835, 0.284446080502909])
x=np.array([0.814723686393179,  0.905791937075619,  0.126986816293506,  0.913375856139019,  0.632359246225410,  0.0975404049994095, 0.278498218867048,  0.546881519204984,  0.957506835434298,  0.964888535199277,  0.157613081677548,  0.970592781760616,  0.957166948242946,  0.485375648722841,  0.800280468888800,  0.141886338627215,  0.421761282626275,  0.915735525189067,  0.792207329559554,  0.959492426392903])

p = ranksums(x,y)
print p

RanksumsResult(statistic=-1.1631538287209875, pvalue=0.24476709560795806)

此结果具有以下选项:

1- 对于MATLAB

p = ranksum(x,y) 返回两侧 Wilcoxon 秩和 检验的 p 值。ranksum 检验原假设,即 x 和 y 中的数据是来自具有相等中位数的连续分布的样本,而不是它们不是的替代方案。该测试假设两个样本是独立的。x 和 y可以不同的长度。此检验等效于Mann-Whitney U 检验

2-对于Python

计算两个样本的Wilcoxon 秩和统计量。Wilcoxon 秩和检验检验两组测量值来自同一分布的原假设。另一种假设是一个样本中的值更有可能大于另一个样本中的值。该检验应用于比较来自连续分布的两个样本。它不处理 x 和 y 中的测量值之间的关系。


另一个例子

在这里,我使用相同的数据,具有相同的 MATLAB 功能,但选项不同。现在您可以看到结果等于mannwhitneyuScipy 中函数的结果。

MATLAB

[p,h,stats] = ranksum(x,y,'alpha',0.01,'tail','left','method','exact');
p = 
    0.1267

Python

m = mannwhitneyu(xx, yy, use_continuity=True)
print m

MannwhitneyuResult(statistic=157.0, pvalue=0.12514839875175593)
于 2015-07-29T21:21:58.987 回答