データ解析を始めると、すぐに壁にぶつかります。「t検定を使えばいい?それとも分散分析?ノンパラメトリック検定が必要?」という判断です。目的とデータの条件を整理すれば、使うべき手法は自然に絞れます。このページをブックマークして、迷ったときの判断の起点として使ってください。
検定を選ぶときに確認する3つのポイント
手法選択に必要な情報は3つだけです。
1つ目は比較するグループの数。2グループか、3グループ以上かで使う手法が変わります。
2つ目はデータの対応関係。同じ対象を2回測定した(改善前・改善後など)「対応あり」のデータか、別々のサンプルを測定した「対応なし」のデータかを確認します。
3つ目は正規性と等分散性。シャピロウイルク検定で正規性を、ルビーン検定で等分散性を確認します。これが成立するかどうかで、パラメトリック検定かノンパラメトリック検定かが決まります。
検定手法の選び方フローチャート

テキストでも確認できるよう、フローを以下にまとめます。
2グループを比較する場合
| 対応 | 正規性 | 等分散性 | 使う手法 |
|---|---|---|---|
| あり | あり | — | 対応のあるt検定 |
| あり | なし | — | ウイルコクソンの符号順位和検定 |
| なし | あり | あり | スチューデントのt検定 |
| なし | あり | なし | ウェルチのt検定 |
| なし | なし | — | ウイルコクソンの順位和検定 |
2グループ比較で迷ったときは、ウェルチのt検定を使う、と決めてしまうのも実務的な選択です。スチューデントのt検定は等分散を仮定しますが、ウェルチはその仮定が不要なので、等分散かどうか確認せずに済みます。
3グループ以上を比較する場合
| 対応 | 正規性 | 使う手法 | 有意差後の多重比較 |
|---|---|---|---|
| なし | あり | 一元配置分散分析 | Tukey HSD / ボンフェローニ / ホルム |
| なし | なし | クルスカルワリス検定 | Dunnの多重比較 |
| あり | あり | 反復測定分散分析 | 対応あり多重比較 |
| あり | なし | フリードマン検定 | Dunnの多重比較(対応あり版) |
分散分析で有意差が出ても「どのグループ間に差があるか」はわかりません。どのペアに差があるかを調べるには多重比較法が必要です。比較するグループが3〜5つならTukey HSDが使いやすく、グループ数が多い場合や検出力を重視する場合はホルム補正が向いています。
複数の要因がある場合
「温度と原料の2つの要因を同時に調べたい」など、要因が2つ以上ある実験では分析手法が変わります。
| 要因数 | 手法 | 特徴 |
|---|---|---|
| 2要因 | 二元配置分散分析 | 交互作用(要因の組み合わせ効果)を検出できる |
| 3要因以上・効率重視 | 実験計画法(直交表) | 実験回数を減らして多要因を評価 |
| 最適条件を求めたい | 応答曲面法(RSM) | 要因と応答の関係を曲面でモデル化、最適値を探索 |
「正規性の確認」をどこで実施するか
フローチャートに「正規性あり?」という分岐があります。確認の手順は以下の通りです。
まずシャピロウイルク検定をグループごとに実施します。p値が0.05を超えれば「正規性あり」として進めます。Pythonなら scipy.stats.shapiro() 一行です。
次に等分散性をルビーン検定で確認します(3グループ以上の比較時)。p値が0.05を超えれば「等分散あり」として一元配置分散分析に進めます。Pythonなら scipy.stats.levene() です。
サンプルサイズが大きい(n ≧ 30 程度)場合は、中心極限定理の効果でパラメトリック検定がある程度ロバストに機能します。ヒストグラムや Q-Q プロットで視覚的に確認するだけで十分な場面も多いです。
Pythonで検定を選ぶ際のコード雛形
前提確認から検定まで、2グループ比較のコード例です。
from scipy import stats
# データ
group_a = [52, 55, 53, 49, 56, 58, 54]
group_b = [48, 51, 47, 53, 50, 46, 52]
# Step 1: 正規性確認(各グループ)
_, p_a = stats.shapiro(group_a)
_, p_b = stats.shapiro(group_b)
is_normal = (p_a > 0.05) and (p_b > 0.05)
# Step 2: 等分散性確認
_, p_lev = stats.levene(group_a, group_b)
is_equal_var = p_lev > 0.05
# Step 3: 手法を選択して検定
if is_normal:
if is_equal_var:
stat, p = stats.ttest_ind(group_a, group_b, equal_var=True)
method = "スチューデントのt検定"
else:
stat, p = stats.ttest_ind(group_a, group_b, equal_var=False)
method = "ウェルチのt検定"
else:
stat, p = stats.mannwhitneyu(group_a, group_b, alternative='two-sided')
method = "ウイルコクソンの順位和検定"
print(f"使用手法: {method}")
print(f"統計量 = {stat:.4f}, p値 = {p:.4f}")
このコードをテンプレートとして手元に置いておくと、前提確認から検定まで迷わず進められます。
まとめ:迷ったときの判断軸
「どの検定を使うか」で迷ったときは、グループ数 → 対応あり/なし → 正規性の順に確認すれば答えが出ます。正規性が怪しければノンパラメトリック検定に切り替え、分散分析で有意差が出たら多重比較法に進む、という流れが基本です。
最初はフローチャートを見ながら確認する作業が面倒に感じるかもしれませんが、慣れてくると「このデータはクルスカルワリスだな」と直感で判断できるようになります。それまでこのページを都度参照してください。
各手法の詳しい計算手順や例題は、表内のリンクから確認できます。また、統計学の学習順序が知りたい場合は学習ロードマップも参考にしてください。

