Tracks
t検定を実行して妙なp値が出たものの、後になってデータが正規分布からほど遠いことが判明した——そんな経験はありませんか?
これは誰にでも一度は起こることです。t検定の問題は、データが正規分布に従うと仮定している点にあります。この仮定が成り立たないと、結果はミスリーディングになり得ます。歪んだデータや小標本は、いずれも正規性の仮定に反します。しかも現実のデータは、教科書どおりに振る舞うことはめったにありません。
そこで役立つのがマン=ホイットニーのU検定です。平均ではなく順位に基づいて2群を比較するノンパラメトリックな手法で、分布の形状を前提としません。
本記事では、マン=ホイットニーのU検定の概要、使いどころ、数式の仕組み、そしてPythonとRでの実行と解釈方法を解説します。
そもそもt検定とは何か?という方は、Introduction to Python T-Tests のブログ記事をお読みください。疑問はすべて解消します。
マン=ホイットニーのU検定とは?
マン=ホイットニーのU検定は、2つの独立した群を比較するためのノンパラメトリック検定です。
t検定と異なり、データが正規分布に従うことを仮定しません。生の値を順位に変換して両群の分布を比較します。これにより、データが歪んでいる、外れ値がある、その他の理由で正規性を満たさない場合に適した手法となります。
なお、ウィルコクソンの順位和検定とも呼ばれます。実質的には同義です。
マン=ホイットニーのU検定を使うとき
マン=ホイットニーのU検定には前提条件があります。以下すべてを満たす場合にのみ使用してください。
- 2つの独立した群: サンプルが重複せず、一方の群の値が他方に影響しない
- 順序尺度または連続データ: 例:テスト得点、反応時間、その他の測定値
- 非正規分布: データが歪んでいる、裾が厚い、または小標本で正規性を確認できない
- 小標本: 中心極限定理に頼れるほどのデータがない場合
例を見てみましょう。
異なる方法で教えられた2つのクラスがあり、どちらがより良い試験結果を出したかを知りたいとします。得点をプロットすると正規分布ではなく、片方のクラスでは外れ値が分布を右に引っ張っていることがわかりました。t検定は群の平均を比較するため、外れ値が平均を押し上げ、実態以上にそのクラスが良く見えてしまいます。
その歪んだ平均がt検定の計算に入り、得られたp値は群間差を正しく反映しません。マン=ホイットニーのU検定は、生の得点ではなく順位を用いるため、この問題が起きにくいのです。単一の外れ値は最大順位を取るだけで、平均のように結果を歪めることはできません。
また、1〜5の尺度のアンケート回答のような順序データにも適しています。これらは真の連続量ではないため、平均を計算してもあまり意味がありません。
マン=ホイットニーのU検定の式
本検定では各群に対して1つずつ、計2つのU統計量が得られます。式は次のとおりです。

マン=ホイットニーのU検定の式
ここで:
-
n1とn2は群1と群2の標本サイズ -
R1とR2は各群の順位和(各群の観測値に割り当てられた全順位の合計)
順位和は、両群のすべての値を結合し、小さい順に並べ、各値に順位を割り当てて計算します。最小値に1、次に2という具合です。その後、各群に属する順位をそれぞれ合計します。
検定統計量は U1 と U2 の小さいほうです。これを臨界値と比較するか、p値の計算に用います。
もっとも、手計算する必要はありません。PythonとRが計算してくれます。すぐ後でお見せします。
マン=ホイットニーのU検定の前提
マン=ホイットニーのU検定はt検定より柔軟ですが、守るべき前提が3つあります。
- 独立したサンプル: 2群は互いに影響しない。一方の観測値は他方の観測値と関係を持たない
- 順序尺度または連続データ: 自然な順序があること——どちらが大きい(高い)かを判断できること
- 分布形状が類似: 結果を中央値の比較として解釈したい場合、両群の分布形状はおおむね同じであるべきです。形状が異なる場合でも検定自体は機能しますが、中央値ではなく平均順位の比較になります。
3つ目の前提が最も混乱を招きやすい点です。
マン=ホイットニーのU検定はしばしば中央値の検定と説明されますが、それが成り立つのは2つの分布の形状が似ている場合だけです。形状が異なる場合、結果が示すのはより一般的なこと、つまり一方の群の値が他方より高くなる傾向があるかどうかです。
Pythonでのマン=ホイットニーのU検定
Pythonのscipy.statsモジュールにはマン=ホイットニーのU検定の関数があります。2つのクラスの試験得点を用いた簡単な例を示します。
from scipy.stats import mannwhitneyu
class_a = [72, 85, 90, 65, 78, 88, 95, 70, 83, 76]
class_b = [60, 55, 74, 68, 80, 58, 63, 71, 66, 59]
stat, p_value = mannwhitneyu(class_a, class_b, alternative="two-sided")
print(f"U statistic: {stat}")
print(f"P-value: {p_value:.4f}")

Pythonでのマン=ホイットニーのU検定
引数 alternative="two-sided" は、2群がどちらの方向にも異なり得るかを検定することを指定します。あらかじめどちらが高いとは仮定しません。方向性のある仮説があるなら、代わりに"less" か "greater" を使います。
ここでのp値は0.0046で、一般的な閾値0.05を下回っています。つまり帰無仮説を棄却でき、2つのクラスの得点分布には統計的に有意な差があると言えます。
U統計量自体は文脈がなければ多くを語りません。統計的有意性の判断にはp値に注目し、差の向きを把握するには生データや中央値を確認してください。
Rでのマン=ホイットニーのU検定
Rでは wilcox.test() 関数でマン=ホイットニーのU検定を実行します。先ほどと同じ試験得点の例を使います。
class_a <- c(72, 85, 90, 65, 78, 88, 95, 70, 83, 76)
class_b <- c(60, 55, 74, 68, 80, 58, 63, 71, 66, 59)
wilcox.test(class_a, class_b, alternative = "two.sided")

Rでのマン=ホイットニーのU検定
ここでの W 統計量はU統計量と同じもので、Rではラベルが異なるだけです。解釈もPythonと同様で、p値0.0029は0.05を下回っているため、2群間に統計的に有意な差があります。
データ内の同順位(ties)に関する警告が表示されることもあります。
これは、両群にまたがって同一の値が2つ以上存在する場合に発生し、順位の割り当てに影響します。Rはこれを内部で処理しますが、同順位が多い場合は、データが検定の前提を満たしているか確認するとよいでしょう。
マン=ホイットニーのU検定の結果解釈
マン=ホイットニーのU検定の帰無仮説は、2群が同じ分布に由来する、言い換えれば差がないというものです。目的はそれに反する証拠を見つけることです。
その判断に使うのがp値です。
- p < 0.05: 帰無仮説を棄却します。2群の分布は異なっており、その差は統計的に有意です。
- p >= 0.05: 帰無仮説を棄却する十分な証拠がありません。群が同一という意味ではなく、データが明確な差を示していないということです。
忘れてはならないのは、マン=ホイットニーのU検定は分布を比較する検定だという点です。有意差が出たからといって平均が高いと示すわけではなく、一方の群の値がもう一方より高い順位を取りやすいことを示します。差の方向を述べたい場合は、平均ではなく各群の中央値を確認してください。
マン=ホイットニーのU検定とt検定の比較
いずれの検定も「2群の比較」という同じ課題を解きますが、アプローチは異なります。選択を誤ると結果に影響します。
t検定
t検定は2群の平均を比較します。データが正規分布に従うという仮定のもとで成り立ち、この仮定が真であれば有効な検定です。
問題はその仮定です。データが歪んでいる、あるいは小標本で正規性の確認が難しい場合、t検定の結果は信頼性を欠くことがあります。平均は極端な値に引っ張られ、その影響はp値に表れます。
t検定を使うのは次のような場合です。
- データが正規分布に従っている
- 十分な標本サイズがある
- 大きな歪みや外れ値のない連続データを扱っている
マン=ホイットニーのU検定
マン=ホイットニーのU検定は、平均ではなく分布を比較します。両群の全ての値をまとめて順位付けし、一方の群が一貫して高い順位を取るかどうかを調べます。順位に基づくため、外れ値や歪みの影響を同じようには受けません。
データが実際に正規分布に従う場合には、t検定のほうが差をより確実に検出します。マン=ホイットニーのU検定はより柔軟ですが、その分、感度をいくらか犠牲にします。
マン=ホイットニーのU検定を使うのは次のような場合です。
- データが正規分布に従っていない
- 順序データを扱っている
- 小標本で正規性を確認できない
- 外れ値があり、除去できない
両者の簡単な比較はこちらです。

t検定とマン=ホイットニーのU検定の比較
迷ったときは、まず分布を確認しましょう。おおむね正規ならt検定、そうでなければマン=ホイットニーのU検定が安全です。
マン=ホイットニーのU検定でよくある誤り
この検定での誤りの多くは、検定が何をしているのかを正しく理解していないことに起因します。とくに多いものを挙げます。
平均を比較していると仮定する
最も一般的な誤りです。マン=ホイットニーのU検定は平均ではなく分布を比較します。有意差が出ても、それは一方の群の値が高い順位を取りやすいことを示すのであって、平均が高いことを意味しません。差を記述する必要がある場合は、平均ではなく中央値を報告してください。
分布形状の違いを無視する
2群の分布形状が異なる(片方は右に歪み、もう片方は対称)場合、結果を中央値の比較として解釈することはできません。検定自体は動作しますが、出力が示すのは分布全体の違いであり、中心のシフトではありません。中央値について結論を出す前に、分布を確認しましょう。
p値の誤解釈
p値が0.05未満であれば統計的に有意な差があることを意味します。ただし、それが差の大きさや実務上の重要性を示すわけではありません。非常に大きな標本では、実際の差がごく小さくても有意なp値が得られます。効果量が重要なら、別途計算してください。
対応のあるデータに使う
マン=ホイットニーのU検定は2つの独立群向けです。対応のあるデータ(同一被験者の2回測定、マッチドペアなど)の場合は、代わりにウィルコクソンの符号付順位検定を使ってください。
マン=ホイットニーのU検定を使うべきでない場合
マン=ホイットニーのU検定が最適でない状況もあります。次のケースでは別の手法を選びましょう。
データが対応あり
同一の被験者が両群に現れる(介入前後の測定、マッチドペアなど)場合、2つのサンプルは独立ではありません。マン=ホイットニーのU検定は独立を前提とするため、ここで用いると観測間の関係を無視し、信頼性のない結果を招きます。ウィルコクソンの符号付順位検定を使用してください。
群が3つ以上ある
マン=ホイットニーのU検定は一度に2群しか比較できません。3群以上を比較する場合は、ノンパラメトリックな一元配置分散分析に相当し、複数群に対応できるクラスカル=ウォリス検定を使います。
正規データかつ大標本である
マン=ホイットニーのU検定の主な利点は、正規性を仮定しないことです。データが正規分布に従い、その確認に十分な標本があるなら、t検定のほうが適しています。そのほうが検出力が高く、真の差があるときにそれを見つけやすくなります。
まとめ
マン=ホイットニーのU検定は、データが正規分布に従わず、t検定が適さないときの有力な選択肢です。
生の値ではなく順位で比較するため、歪みや小標本といった状況でパラメトリック検定を不安定にする仮定を回避できます。現実世界の分析では、データが思いどおりに振る舞うことは稀であり、この検定は有効です。
ここでのより大きな教訓は、検定の選択です。どんなデータにも万能な検定はありません。まずデータ——分布、構造、標本サイズ——を確認し、その特性に合わせて選びましょう。正しい検定とは、データに最も適合するものです。
統計が初めて、あるいは深く学びたい場合は、Statistician in R トラックで、52時間分の教材を通じて実務に通用するスキルを身につけられます。
FAQs
マン=ホイットニーのU検定は何に使いますか?
マン=ホイットニーのU検定は、データが正規分布に従うと仮定できないときに、2つの独立群を比較するために使います。両群のすべての値をまとめて順位付けし、一方の群が一貫して高い順位を取るかを確認します。順序データと連続データのどちらにも適用できます。
マン=ホイットニーのU検定はt検定とどう違いますか?
t検定は2群の平均を比較し、正規分布を仮定します。マン=ホイットニーのU検定は順位に基づいて分布を比較するため、その仮定を置きません。データが歪んでいる、あるいは小標本の場合は、マン=ホイットニーのU検定のほうが安全です。
マン=ホイットニーのU検定はいつ使うべきですか?
2つの独立群があり、データが順序尺度または連続で、正規性を確認できない場合に使います。小標本で外れ値がある場合にも適しています。データが正規分布に従い標本が大きいなら、一般的にはt検定のほうが良い結果になります。
マン=ホイットニーのU検定におけるp値は何を示しますか?
p値が0.05未満であれば、2群の分布に統計的に有意な差があることを示します。差の大きさや実務的な意味は示しません。その評価には、別途効果量を計算し、各群の中央値を見る必要があります。
対応のあるデータにマン=ホイットニーのU検定は使えますか?
いいえ。マン=ホイットニーのU検定は2群が独立していることを仮定します。つまり、一方の群の値が他方に影響しないことが必要です。対応のあるデータ(同一被験者の前後比較など)の場合は、ウィルコクソンの符号付順位検定を使ってください。対応のあるデータにマン=ホイットニーのU検定を用いると、観測間の関係を無視してしまい、信頼性のない結果になります。