エクセル関数を使ったマンホイットニーのU検定のやり方【コピペ用テンプレートあり】

はじめに
エクセル関数を使った、
下にテンプレート(セルデータサンプル)があるので、
マンホイットニーのu検定とは
マンホイットニーのU検定とは、「2つの母集団の分布の中央値に有意差があるか」を判定する統計的仮説検定の1つです。
いつ使うのか?
マンホイットニーのU検定は、以下のような場合に使用します。
- カテゴリデータでない
- データが正規分布していない、または外れ値が大きい(間隔・比率尺度データのとき)
- データが独立した2群(グループ)
マンホイットニーのU検定は、
- 2群の両方のサイズ n ≧ 8
- 2群の内の片方のサイズ n ≧ 21
算出値の意味
仮説検定では、 p値 を算出し、 有意水準α と比較を行います。 NORMSDIST
関数を使って得られます。
p値 と 有意水準α による判定は以下の通りです。
- p値 < α のとき: 各群の母集団の中央値の間に有意差が ある
- p値 ≥ α のとき: 各群の母集団の中央値の間に有意差が ない
エクセルでの算出方法
以下の 全セルをコピー
ボタンをクリックし、エクセルの A1
セルに貼り付けると、 K16
セルにp値(下記の場合 0.031449255
)、 K19
セルに検定結果(下記の場合 (有意差)あり
)が出力されます。
データを書き換える場合は、 A
, B
列のデータを書き換え、 J3
, J4
セルのグループ名も更新してください。 D
~ G
列のセル中の計算式を下に拡張(コピー)、
A | B | C | D | E | F | G | H | I | J | K | L | M | |
1 | データ | ||||||||||||
2 | グループ | 値 | 順位 | 同値判定 | k | k^3-k | 順位和 | n | U | ||||
3 | X | 99 | =RANK.AVG(B3,B:B) | =IF(ROW()=MATCH(B3,B:B,0),1,0) | =IF(E3=1,COUNTIF(B:B,B3),0) | =F3^3-F3 | X | =SUMIFS(D:D,A:A,J3) | =COUNTIFS(A:A,J3) | =$L$3*$L$4+(L3*(L3+1))/2-K3 | |||
4 | Y | 137 | =RANK.AVG(B4,B:B) | =IF(ROW()=MATCH(B4,B:B,0),1,0) | =IF(E4=1,COUNTIF(B:B,B4),0) | =F4^3-F4 | Y | =SUMIFS(D:D,A:A,J4) | =COUNTIFS(A:A,J4) | =$L$3*$L$4+(L4*(L4+1))/2-K4 | |||
5 | X | 108 | =RANK.AVG(B5,B:B) | =IF(ROW()=MATCH(B5,B:B,0),1,0) | =IF(E5=1,COUNTIF(B:B,B5),0) | =F5^3-F5 | |||||||
6 | X | 111 | =RANK.AVG(B6,B:B) | =IF(ROW()=MATCH(B6,B:B,0),1,0) | =IF(E6=1,COUNTIF(B:B,B6),0) | =F6^3-F6 | |||||||
7 | Y | 124 | =RANK.AVG(B7,B:B) | =IF(ROW()=MATCH(B7,B:B,0),1,0) | =IF(E7=1,COUNTIF(B:B,B7),0) | =F7^3-F7 | N | =L3+L4 | |||||
8 | Y | 134 | =RANK.AVG(B8,B:B) | =IF(ROW()=MATCH(B8,B:B,0),1,0) | =IF(E8=1,COUNTIF(B:B,B8),0) | =F8^3-F8 | T | =SUM(G:G) | |||||
9 | X | 116 | =RANK.AVG(B9,B:B) | =IF(ROW()=MATCH(B9,B:B,0),1,0) | =IF(E9=1,COUNTIF(B:B,B9),0) | =F9^3-F9 | |||||||
10 | X | 133 | =RANK.AVG(B10,B:B) | =IF(ROW()=MATCH(B10,B:B,0),1,0) | =IF(E10=1,COUNTIF(B:B,B10),0) | =F10^3-F10 | U | =MIN(M3:M4) | |||||
11 | Y | 150 | =RANK.AVG(B11,B:B) | =IF(ROW()=MATCH(B11,B:B,0),1,0) | =IF(E11=1,COUNTIF(B:B,B11),0) | =F11^3-F11 | μ_u | =L3*L4/2 | |||||
12 | X | 103 | =RANK.AVG(B12,B:B) | =IF(ROW()=MATCH(B12,B:B,0),1,0) | =IF(E12=1,COUNTIF(B:B,B12),0) | =F12^3-F12 | σ_u^2 | =L3*L4/12*(K7+1-K8/(K7*(K7-1))) | |||||
13 | Y | 135 | =RANK.AVG(B13,B:B) | =IF(ROW()=MATCH(B13,B:B,0),1,0) | =IF(E13=1,COUNTIF(B:B,B13),0) | =F13^3-F13 | z_u | =ABS((K10-K11))/SQRT(K12) | |||||
14 | X | 139 | =RANK.AVG(B14,B:B) | =IF(ROW()=MATCH(B14,B:B,0),1,0) | =IF(E14=1,COUNTIF(B:B,B14),0) | =F14^3-F14 | |||||||
15 | Y | 90 | =RANK.AVG(B15,B:B) | =IF(ROW()=MATCH(B15,B:B,0),1,0) | =IF(E15=1,COUNTIF(B:B,B15),0) | =F15^3-F15 | 有意水準α | 0.05 | |||||
16 | Y | 112 | =RANK.AVG(B16,B:B) | =IF(ROW()=MATCH(B16,B:B,0),1,0) | =IF(E16=1,COUNTIF(B:B,B16),0) | =F16^3-F16 | p値 | =2*(1-NORMSDIST(K13)) | |||||
17 | X | 146 | =RANK.AVG(B17,B:B) | =IF(ROW()=MATCH(B17,B:B,0),1,0) | =IF(E17=1,COUNTIF(B:B,B17),0) | =F17^3-F17 | |||||||
18 | X | 150 | =RANK.AVG(B18,B:B) | =IF(ROW()=MATCH(B18,B:B,0),1,0) | =IF(E18=1,COUNTIF(B:B,B18),0) | =F18^3-F18 | 結果 | ||||||
19 | X | 155 | =RANK.AVG(B19,B:B) | =IF(ROW()=MATCH(B19,B:B,0),1,0) | =IF(E19=1,COUNTIF(B:B,B19),0) | =F19^3-F19 | 有意差 | =IF(K16<=K15,"あり","なし") | |||||
20 | X | 141 | =RANK.AVG(B20,B:B) | =IF(ROW()=MATCH(B20,B:B,0),1,0) | =IF(E20=1,COUNTIF(B:B,B20),0) | =F20^3-F20 | |||||||
21 | X | 139 | =RANK.AVG(B21,B:B) | =IF(ROW()=MATCH(B21,B:B,0),1,0) | =IF(E21=1,COUNTIF(B:B,B21),0) | =F21^3-F21 | |||||||
22 | X | 196 | =RANK.AVG(B22,B:B) | =IF(ROW()=MATCH(B22,B:B,0),1,0) | =IF(E22=1,COUNTIF(B:B,B22),0) | =F22^3-F22 | |||||||
23 | X | 155 | =RANK.AVG(B23,B:B) | =IF(ROW()=MATCH(B23,B:B,0),1,0) | =IF(E23=1,COUNTIF(B:B,B23),0) | =F23^3-F23 | |||||||
24 | X | 159 | =RANK.AVG(B24,B:B) | =IF(ROW()=MATCH(B24,B:B,0),1,0) | =IF(E24=1,COUNTIF(B:B,B24),0) | =F24^3-F24 | |||||||
25 | X | 161 | =RANK.AVG(B25,B:B) | =IF(ROW()=MATCH(B25,B:B,0),1,0) | =IF(E25=1,COUNTIF(B:B,B25),0) | =F25^3-F25 | |||||||
26 | X | 164 | =RANK.AVG(B26,B:B) | =IF(ROW()=MATCH(B26,B:B,0),1,0) | =IF(E26=1,COUNTIF(B:B,B26),0) | =F26^3-F26 | |||||||
27 | X | 144 | =RANK.AVG(B27,B:B) | =IF(ROW()=MATCH(B27,B:B,0),1,0) | =IF(E27=1,COUNTIF(B:B,B27),0) | =F27^3-F27 | |||||||
28 | X | 150 | =RANK.AVG(B28,B:B) | =IF(ROW()=MATCH(B28,B:B,0),1,0) | =IF(E28=1,COUNTIF(B:B,B28),0) | =F28^3-F28 | |||||||
29 | X | 132 | =RANK.AVG(B29,B:B) | =IF(ROW()=MATCH(B29,B:B,0),1,0) | =IF(E29=1,COUNTIF(B:B,B29),0) | =F29^3-F29 | |||||||
30 | Y | 164 | =RANK.AVG(B30,B:B) | =IF(ROW()=MATCH(B30,B:B,0),1,0) | =IF(E30=1,COUNTIF(B:B,B30),0) | =F30^3-F30 | |||||||
31 | Y | 172 | =RANK.AVG(B31,B:B) | =IF(ROW()=MATCH(B31,B:B,0),1,0) | =IF(E31=1,COUNTIF(B:B,B31),0) | =F31^3-F31 | |||||||
32 | Y | 154 | =RANK.AVG(B32,B:B) | =IF(ROW()=MATCH(B32,B:B,0),1,0) | =IF(E32=1,COUNTIF(B:B,B32),0) | =F32^3-F32 | |||||||
33 | Y | 154 | =RANK.AVG(B33,B:B) | =IF(ROW()=MATCH(B33,B:B,0),1,0) | =IF(E33=1,COUNTIF(B:B,B33),0) | =F33^3-F33 | |||||||
34 | X | 130 | =RANK.AVG(B34,B:B) | =IF(ROW()=MATCH(B34,B:B,0),1,0) | =IF(E34=1,COUNTIF(B:B,B34),0) | =F34^3-F34 | |||||||
35 | Y | 151 | =RANK.AVG(B35,B:B) | =IF(ROW()=MATCH(B35,B:B,0),1,0) | =IF(E35=1,COUNTIF(B:B,B35),0) | =F35^3-F35 | |||||||
36 | X | 147 | =RANK.AVG(B36,B:B) | =IF(ROW()=MATCH(B36,B:B,0),1,0) | =IF(E36=1,COUNTIF(B:B,B36),0) | =F36^3-F36 | |||||||
37 | Y | 160 | =RANK.AVG(B37,B:B) | =IF(ROW()=MATCH(B37,B:B,0),1,0) | =IF(E37=1,COUNTIF(B:B,B37),0) | =F37^3-F37 | |||||||
38 | Y | 162 | =RANK.AVG(B38,B:B) | =IF(ROW()=MATCH(B38,B:B,0),1,0) | =IF(E38=1,COUNTIF(B:B,B38),0) | =F38^3-F38 | |||||||
39 | Y | 178 | =RANK.AVG(B39,B:B) | =IF(ROW()=MATCH(B39,B:B,0),1,0) | =IF(E39=1,COUNTIF(B:B,B39),0) | =F39^3-F39 | |||||||
40 | Y | 179 | =RANK.AVG(B40,B:B) | =IF(ROW()=MATCH(B40,B:B,0),1,0) | =IF(E40=1,COUNTIF(B:B,B40),0) | =F40^3-F40 | |||||||
41 | Y | 182 | =RANK.AVG(B41,B:B) | =IF(ROW()=MATCH(B41,B:B,0),1,0) | =IF(E41=1,COUNTIF(B:B,B41),0) | =F41^3-F41 | |||||||
42 | Y | 182 | =RANK.AVG(B42,B:B) | =IF(ROW()=MATCH(B42,B:B,0),1,0) | =IF(E42=1,COUNTIF(B:B,B42),0) | =F42^3-F42 | |||||||
43 | X | 112 | =RANK.AVG(B43,B:B) | =IF(ROW()=MATCH(B43,B:B,0),1,0) | =IF(E43=1,COUNTIF(B:B,B43),0) | =F43^3-F43 | |||||||
44 | Y | 169 | =RANK.AVG(B44,B:B) | =IF(ROW()=MATCH(B44,B:B,0),1,0) | =IF(E44=1,COUNTIF(B:B,B44),0) | =F44^3-F44 | |||||||
45 | Y | 187 | =RANK.AVG(B45,B:B) | =IF(ROW()=MATCH(B45,B:B,0),1,0) | =IF(E45=1,COUNTIF(B:B,B45),0) | =F45^3-F45 | |||||||
46 | Y | 149 | =RANK.AVG(B46,B:B) | =IF(ROW()=MATCH(B46,B:B,0),1,0) | =IF(E46=1,COUNTIF(B:B,B46),0) | =F46^3-F46 | |||||||
47 | Y | 109 | =RANK.AVG(B47,B:B) | =IF(ROW()=MATCH(B47,B:B,0),1,0) | =IF(E47=1,COUNTIF(B:B,B47),0) | =F47^3-F47 | |||||||
48 | X | 79 | =RANK.AVG(B48,B:B) | =IF(ROW()=MATCH(B48,B:B,0),1,0) | =IF(E48=1,COUNTIF(B:B,B48),0) | =F48^3-F48 | |||||||
49 | X | 109 | =RANK.AVG(B49,B:B) | =IF(ROW()=MATCH(B49,B:B,0),1,0) | =IF(E49=1,COUNTIF(B:B,B49),0) | =F49^3-F49 | |||||||
50 | X | 188 | =RANK.AVG(B50,B:B) | =IF(ROW()=MATCH(B50,B:B,0),1,0) | =IF(E50=1,COUNTIF(B:B,B50),0) | =F50^3-F50 | |||||||
51 | X | 64 | =RANK.AVG(B51,B:B) | =IF(ROW()=MATCH(B51,B:B,0),1,0) | =IF(E51=1,COUNTIF(B:B,B51),0) | =F51^3-F51 | |||||||
52 | X | 168 | =RANK.AVG(B52,B:B) | =IF(ROW()=MATCH(B52,B:B,0),1,0) | =IF(E52=1,COUNTIF(B:B,B52),0) | =F52^3-F52 | |||||||
53 | X | 168 | =RANK.AVG(B53,B:B) | =IF(ROW()=MATCH(B53,B:B,0),1,0) | =IF(E53=1,COUNTIF(B:B,B53),0) | =F53^3-F53 | |||||||
54 | X | 115 | =RANK.AVG(B54,B:B) | =IF(ROW()=MATCH(B54,B:B,0),1,0) | =IF(E54=1,COUNTIF(B:B,B54),0) | =F54^3-F54 | |||||||
55 | Y | 180 | =RANK.AVG(B55,B:B) | =IF(ROW()=MATCH(B55,B:B,0),1,0) | =IF(E55=1,COUNTIF(B:B,B55),0) | =F55^3-F55 | |||||||
56 | X | 135 | =RANK.AVG(B56,B:B) | =IF(ROW()=MATCH(B56,B:B,0),1,0) | =IF(E56=1,COUNTIF(B:B,B56),0) | =F56^3-F56 | |||||||
57 | Y | 191 | =RANK.AVG(B57,B:B) | =IF(ROW()=MATCH(B57,B:B,0),1,0) | =IF(E57=1,COUNTIF(B:B,B57),0) | =F57^3-F57 | |||||||
58 | Y | 110 | =RANK.AVG(B58,B:B) | =IF(ROW()=MATCH(B58,B:B,0),1,0) | =IF(E58=1,COUNTIF(B:B,B58),0) | =F58^3-F58 | |||||||
59 |
算出手順
エクセルでマンホイットニーのU検定(正規近似)を行うための手順は、以下の6つです。
1. データ値の順位を算出
2グループを混ぜたデータを、RANK.AVG()
関数で小さい順に並べます。
2. 重複の補正項の計算
データ中に重複がある場合、検定統計量 を算出する値に補正項 を入れる必要があります。
補正項:
そのために必要な の計算を、E
~ G
列で以下のように行います。
- 同値判定 (
E
列):重複している場合は、2回目以降の重複値で0
を、それ以外は1
を返す(ROW()
,MATCH()
関数使用)。 - の算出 (
F
列): 重複数をカウント(同値判定 =1
の行のみ)。 - の算出 (
G
列): を使って計算。
ROW関数
指定したセルの行番号を返す。
未指定の場合、呼び出し元のセルが指定される。例:
=ROW()
- 第1引数 : セルの指定範囲(オプション)
MATCH関数
指定した範囲の中で検索し、最初にヒットした相対位置を返す。
例:
=MATCH(50,B:B,0)
- 第1引数 (
99
): 検索値(必須)- 第2引数 (
B:B
): 検索範囲(必須)- 第3引数 (
0
): 照合の型を0
,-1
,1
で指定(オプション)
0
: 完全一致したセルを返す1
: 検索値以下の最大値のセルを返す-1
: 検索値以上の最小値のセルを返す
3. グループ別に順位和, , を算出
2グループそれぞれ、個別の順位和とデータサイズ 、値 を算出します。
a. 順位和
SUMIFS()
関数を使い、各グループごとに順位和(順位の合計値)を算出します。
SUMIFS関数
条件にマッチした値のみの合計値を返す。
第4引数, 第5引数, ... を追加することで、条件を増やすことができる(省略可、最大127条件)。例:
=SUMIFS(D:D,A:A,J3)
- 第1引数 (
D:D
): 合計する値の範囲(必須)- 第2引数 (
A:A
): 条件をチェックする範囲(必須)- 第3引数 (
J3
): 条件(必須)- 第4引数, 第5,...引数 : 条件範囲と条件を追加(オプション)
b. データサイズ
=COUNTIFS()
関数を使い、各グループごとにデータサイズを算出します。
COUNTIFS関数
条件にマッチした値をカウントする。
第3引数, 第4引数, ... を追加することで、条件を増やすことができる(省略可、最大127条件)。例:
=COUNTIFS(A:A,J3)
- 第1引数 (
J3
): 条件をチェックする範囲(必須)- 第2引数 (
J3
): 条件(必須)- 第3引数, 第4,...引数 : 条件範囲と条件を追加(オプション)
c. 値
上記の a., b.の結果を使って、各グループごとに値を算出します。
- : グループ のデータサイズ
- : グループ のデータサイズ
- : グループ の順位和
4. 検定統計量 の算出
手順2, 3で算出した値を使って、検定統計量 を算出します。
5. α設定、p値の算出
事前に、有意水準αを設定します。
次に、検定統計量 から、NORMSDIST()
関数を使ってp値を算出します。
NORMSDIST関数
標準正規分布の累積分布関数を返す。
例:
=NORMSDIST(1.96)
- 第1引数 (
1.96
): 標準正規分布の値(必須)
6. 結果の表示
手順5で設定した有意水準と、算出したp値を比較し、検定結果を表示します。