🔍

一元配置ANOVA(分散分析)|独立3群以上の差検定

に公開

概要

3群以上のグループに対して平均値に有意な差があるかを検定する手法

主な用途

パターン 説明 実務ユースケース
群間比較(3群以上) 異なる3群以上の平均を比較 地域(東京・大阪・福岡)や施策別(A,B,C)で売上額に差があるかを検証
属性による比較 属性で分けた3群以上の差を比較 学歴別に平均収入の差を検定
ランダム分割テスト 無作為に3群以上を作り効果を検証 ボタンA/B/Cでクリック率の差を検定

データ要件

  • 従属変数:数値型(例:CV率、収入、クリック率など)
  • 独立変数:3群以上の独立したカテゴリグループ(例:都道府県、施策別、属性など)
  • 前提条件:
    • 比較する3群以上の各群間に独立性がある(同一人物が複数群にいない)
    • 各群の従属変数が正規分布に従う
    • 各群での等分散性があること

理論

各グループ内のばらつきと、グループ間のばらつきを比較し、
群間の差がランダムなばらつきに比べて大きいかどうかを検定
 - 帰無仮説:すべての群の母平均は等しい(=差がない)
 - 対立仮説:いずれかの群に平均の差がある(=差がある) ※ 片側検定は存在しない

【検定の手順】

  1. 全体、要因、残差の平方和を求める

  2. 全体、要因、残差の自由度N,k-1,N-kを求める

    • k:群数(例:A,B,Cの場合3)
    • N:全データ数(例:A,B,C群それぞれ10件ずつの場合30)
  3. 要因と残差の平均平方を求める

    要因の平均平方 = \frac{要因の平方和}{自由度k-1}
    残差の平均平方 = \frac{残差の平方和}{自由度N-k}
  4. 「群間のばらつき(要因の平均平方)」と「群内のばらつき(残差の平均平方)」からF統計量を算出

F = \frac{群間のばらつき(要因の平均平方)}{群内のばらつき(残差の平均平方)}
  1. 自由度(k-1,N-k)に基づきF分布からp値を計算
     → p値が有意水準(例:0.05)未満なら帰無仮説は棄却=平均値に有意な差があると判断

p値が有意でも「どの群が違うか」はわからないため、事後検定(TukeyのHSDなど)を行うのが一般的

実装コード例

Python

import pandas as pd
from scipy.stats import f_oneway

# 3群のデータを抽出
group1 = df[df['group'] == 'A']['value']
group2 = df[df['group'] == 'B']['value']
group3 = df[df['group'] == 'C']['value']

# 一元配置ANOVA
f_stat, p_val = f_oneway(group1, group2, group3)

print(f"F値 = {f_stat:.3f}, p値 = {p_val:.5f}")

if p_val < 0.05:
    print("→ 少なくとも1つのグループに有意な平均差があります")
else:
    print("→ 有意な差は確認できません(平均差なし)")

注意点・Tips

  • 「正規性」と「等分散性」が前提となる
    → 正規性・等分散性を満たさない場合は非対応のANOVA(WelchのANOVA)やノンパラメトリック検定(Kruskal-Wallis)を検討
  • 「どの群が違うか」はANOVA単体ではわからない
    → 有意差が出た場合は「TukeyのHSD」など事後検定で確認する必要あり
      必要に応じてBonferroni補正などを考慮

ケーススタディ

🔗ComingSoon

関連手法

参考リンク・文献

Discussion