, scipy.stats.ranksums
,wilcoxon
都mannwhitneyu
给出了与 Matlab 不同的结果ranksum
。
问问题
2457 次
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 功能,但选项不同。现在您可以看到结果等于mannwhitneyu
Scipy 中函数的结果。
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 回答