scipy.stats.ranksums
,wilcoxon
,mannwhitneyu
都会从Matlab的ranksum
中得到不同的结果。
答案 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)