Mann-Witney-U-test是t参数的非参数等价物,只能用于正态分布数据。在Scipy中,两种测试均可用:
t-test:http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html
Mann-Witney-U-test:http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.mannwhitneyu.html
虽然ttest可以通过例如3d数组通过指定轴来执行计算,这似乎不可能用于Mann-Witney-U-test?
import numpy
from scipy import stats
A1= numpy.random.normal(1,1,50).reshape(25, 2)
A2= numpy.random.normal(1,1,50).reshape(25, 2)
A3= numpy.random.normal(1,1,50).reshape(25, 2)
A4= numpy.random.normal(1,1,50).reshape(25, 2)
A5= numpy.random.normal(1,1,50).reshape(25, 2)
A = numpy.dstack((A1,A2,A3,A4,A5))
B1= numpy.random.normal(3,1,50).reshape(25, 2)
B2= numpy.random.normal(3,1,50).reshape(25, 2)
B3= numpy.random.normal(3,1,50).reshape(25, 2)
B4= numpy.random.normal(3,1,50).reshape(25, 2)
B5= numpy.random.normal(3,1,50).reshape(25, 2)
B = numpy.dstack((B1,B2,B3,B4,B5))
ttest_result = stats.ttest_ind(A,B,axis=2)
但是不能指定Mann-Witney-U-test的轴(如stats.mannwhitneyu(A1,B1,axis=2)
)
是否有可能为指定的3D阵列轴运行mannwhitneyu? 由于mannwhitneyu()接受两个数组,numpy.apply_along_axis()也不能直接使用。有什么建议?
答案 0 :(得分:0)
如果你想在这个例子中在第3轴上执行类似的操作,我想你可以做到以下几点:
In [304]:
result = map(stats.mannwhitneyu, A.reshape(-1, A.shape[2]),B.reshape(-1, B.shape[2]))
u = np.array([item[0] for item in result]).reshape(A.shape[0], -1)
p = np.array([item[1] for item in result]).reshape(A.shape[0], -1)
In [305]:
u
Out[305]:
array([[ 0., 4.],
...
[ 1., 2.]])
In [306]:
p
Out[306]:
array([[ 0.00609289, 0.04734647],
...
[ 0.01078587, 0.01835693]])