【R言語】正規分布に従わないデータに!マン・ホットニーのU検定(WMW検定)の基本手順とサンプルコード
WMW検定(マン・ホッケーのU検定 / ウィルコクソンの順位和検定)は、データが正規分布に従わない場合や、アンケートの満足度のような「順序尺度」のデータを比較したいときに使われるノンパラメトリック検定です。
0. WMW検定の特徴と向いているデータ
t検定とは異なり、データの「実際の数値の大きさ」ではなく「データの順位(大小関係)」をもとに2つのグループに差があるかを検証します。
【 向いているデータの例 】
- アンケートの満足度(1〜5点など): 正規分布に従いにくい順序データ。
- 購入金額や滞在時間: 一部の極端な数値(外れ値)によって分布が大きく歪んでいるデータ。
1. サンプルデータの作成(満足度スコアの例)
【 手順 】 今回は、店舗Aと店舗Bにおける顧客の満足度(1〜5点)のダミーデータを作成して検定を行います。
【 サンプルコード 】
# 1. 再現性のための乱数シードの設定
set.seed(456)
# 2. 店舗Aと店舗Bの満足度スコア(1〜5点)のダミーデータを生成
shop_a <- sample(1:5, size = 40, replace = TRUE, prob = c(0.05, 0.1, 0.2, 0.4, 0.25))
shop_b <- sample(1:5, size = 40, replace = TRUE, prob = c(0.2, 0.3, 0.3, 0.15, 0.05))
# 3. データフレームへの統合
df_shop <- data.frame(
store = factor(rep(c("Store_A", "Store_B"), each = 40)),
score = c(shop_a, shop_b)
)
# データの先頭6行を確認
head(df_shop)
【 実行結果 】
store score
1 Store_A 4
2 Store_A 4
3 Store_A 3
4 Store_A 2
5 Store_A 3
6 Store_A 4
1 Store_A 4
2 Store_A 4
3 Store_A 3
4 Store_A 2
5 Store_A 3
6 Store_A 4
2. WMW検定の実行手順
【 手順 】 RでWMW検定を行うには、t検定とほぼ同じ要領で wilcox.test() 関数を使用します。
【 サンプルコード 】
# Step 1: グループごとの要約(中央値の算出)
aggregate(score ~ store, data = df_shop, FUN = median)
# Step 2: マン・ホッケーのU検定(WMW検定)の実行
res_mw <- wilcox.test(score ~ store, data = df_shop)
# 検定結果のコンソール出力
print(res_mw)
【 実行結果 】
# Step 1 の結果(中央値)
store score
1 Store_A 3.5
2 Store_B 3.0
# Step 2 の結果(print(res_mw))
Wilcoxon rank sum test with continuity correction
data: score by store
W = 1093.5, p-value = 0.003499
alternative hypothesis: true location shift is not equal to 0
store score
1 Store_A 3.5
2 Store_B 3.0
# Step 2 の結果(print(res_mw))
Wilcoxon rank sum test with continuity correction
data: score by store
W = 1093.5, p-value = 0.003499
alternative hypothesis: true location shift is not equal to 0
3. 結果の見方とまとめ
【 ポイント 】
[ 検定結果の読み方 ]
1.W統計量(W = 1093.5)とは?
→ 全データを合わせ小さな順に並べたときの「順位の合計(順位和)」を一方のグループで足し合わせた値です。この値が、2つのグループに偏りがないとした場合の期待値からどれくらい離れているかを示しています。
2.なぜその結論になるのか?(p値との関係)
→ W = 1093.5 という偏りが「偶然に起こる確率」を計算したものが
3.中央値の比較
→ 店舗Aの中央値は 3.5、店舗Bの中央値は 3.0 であり、店舗Aの方が満足度が高い傾向にあることが裏付けられます。
1.W統計量(W = 1093.5)とは?
→ 全データを合わせ小さな順に並べたときの「順位の合計(順位和)」を一方のグループで足し合わせた値です。この値が、2つのグループに偏りがないとした場合の期待値からどれくらい離れているかを示しています。
2.なぜその結論になるのか?(p値との関係)
→ W = 1093.5 という偏りが「偶然に起こる確率」を計算したものが
p-value = 0.003499 です。これが一般的な基準である 0.05(5%)を大きく下回っているため、「偶然ではなく、店舗Aと店舗Bの間には明確な満足度の差(分布のズレ)がある」と判断できます。3.中央値の比較
→ 店舗Aの中央値は 3.5、店舗Bの中央値は 3.0 であり、店舗Aの方が満足度が高い傾向にあることが裏付けられます。
4. まとめ
アンケート結果など正規分布に従わない順序データを扱うときは、無理にt検定を使わず wilcox.test() によるWMW検定を選択するのが安全です。
PR