什么是python相当于Matlab的rankum?

时间:2015-07-29 19:29:32

标签: python matlab scipy statistical-test

scipy.stats.ranksumswilcoxonmannwhitneyu都会从Matlab的ranksum中得到不同的结果。

1 个答案:

答案 0 :(得分: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 = rankum(x,y)返回双侧Wilcoxon秩和的p值   测试。 rankum测试x和y中的数据的零假设   来自连续分布的样本与相等的中位数,反对   替代他们不是。该测试假设两个样本   是独立的。 x和y 可以 不同的长度。这个测试是   相当于 Mann-Whitney U-test

2- Python

  

计算两个样本的 Wilcoxon rank-sum 统计量。该   Wilcoxon秩和检验检验了两组的零假设   测量值来自相同分布。替代方案   假设是一个样本中的值更可能更大   比其他样本中的值。应该使用此测试   比较连续分布中的两个样本。它不是   处理x和y之间的测量之间的联系。

另一个例子

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

<强> 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)