統計的仮説検定

統計的検定の選び方【目的別フロー図と手法一覧】

記事内に広告が含まれています。

データ解析を始めると、すぐに壁にぶつかります。「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}")

このコードをテンプレートとして手元に置いておくと、前提確認から検定まで迷わず進められます。

まとめ:迷ったときの判断軸

「どの検定を使うか」で迷ったときは、グループ数 → 対応あり/なし → 正規性の順に確認すれば答えが出ます。正規性が怪しければノンパラメトリック検定に切り替え、分散分析で有意差が出たら多重比較法に進む、という流れが基本です。

最初はフローチャートを見ながら確認する作業が面倒に感じるかもしれませんが、慣れてくると「このデータはクルスカルワリスだな」と直感で判断できるようになります。それまでこのページを都度参照してください。

各手法の詳しい計算手順や例題は、表内のリンクから確認できます。また、統計学の学習順序が知りたい場合は学習ロードマップも参考にしてください。

タイトルとURLをコピーしました