技術メモ

役に立てる技術的な何か、時々自分用の覚書。幅広く興味があります。

pythonでマンホイットニーのU検定

pythonでマンホイットニーのU検定する方法。
scipyを使う。

from scipy import stats
stats.mannwhitneyu(x, y, use_continuity=True, alternative=None)

alternativeは'less','greater','two-sided'。Noneの時は'two-sided'
p値は返り値のpvalueで取れる。

  • テストコード
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# data generate
x = np.random.normal(0,10,size=100)
y = np.random.normal(5,10,size=100)

# visualize
bins = np.linspace(-40,50,18)
plt.hist(x,bins,alpha=0.5)
plt.hist(y,bins,alpha=0.5)

# hypothesis testing
result = stats.mannwhitneyu(x,y)
print(result.pvalue)

plt.show()

0.000717788454812
f:id:swdrsker:20161207034015p:plain:w450

  • 解釈:

p=0.0007<0.05なので、「この2群の中央値が等しい」という帰無仮説が棄却される。
つまり、中央値が異なることが分かったということ。
(※マンホイットニーU検定は平均値ではなく中央値を見ていることに注意)


参考サイト:
scipy.stats.mannwhitneyu — SciPy v0.19.1 Reference Guide

  • 補足:

多群比較するときは一元配置分散分析を使おう。
AとBで検定、BとCで検定、AとCで検定のようなことはしないように。