🔍
WelchのANOVA|独立3群以上の差検定
概要
3群以上のグループに対して平均値に有意な差があるかを検定する手法(等分散性不要)
主な用途
パターン | 説明 | 実務ユースケース |
---|---|---|
群間比較(3群以上) | 異なる3群以上の平均を比較 | 地域(東京・大阪・福岡)や施策別(A,B,C)で売上額に差があるかを検証 |
属性による比較 | 属性で分けた3群以上の差を比較 | 学歴別に平均収入の差を検定 |
ランダム分割テスト | 無作為に3群以上を作り効果を検証 | ボタンA/B/Cでクリック率の差を検定 |
データ要件
- 従属変数:数値型(例:売上額、収入、クリック率など)
- 独立変数:3群以上の独立したカテゴリグループ(例:都道府県、施策、属性など)
- 前提条件:
- 各群が独立している(同一人物が複数群にいない)
- 各群の従属変数が正規分布に従う
- 等分散性は不要(仮定しない)
理論
WelchのANOVAでは、各群の分散とサイズが異なることを考慮しつつ、
群間の平均値の違いが偶然かどうかを検定
- 帰無仮説:すべての群の母平均は等しい(=差がない)
- 対立仮説:いずれかの群に平均の差がある(=差がある) ※ 片側検定は存在しない
【検定の手順】
- 各群の平均・分散・サンプルサイズを取得
- サンプルサイズに基づき、重み係数を算出
- 重みを使用して調整後平均を計算
- 重みと平均、調整後平均を使用して平方平均を算出
- ラムダ項を計算
- 平方和とラムダ項、自由度からF統計量を計算
-
自由度に基づきF分布からp値を計算
→ p値が有意水準(例:0.05)未満なら帰無仮説は棄却=平均値に有意な差があると判断
計算式は複雑なため、通常は
pingouin.welch_anova()
やstatsmodels
を使用
実装コード例
import pingouin as pg
import pandas as pd
# WelchのANOVA('value'を'group'で分けて比較)
anova_result = pg.welch_anova(dv='value', between='group', data=df)
# 結果表示
f_val = anova_result['F'][0]
p_val = anova_result['p-unc'][0]
print(f"F値 = {f_val:.3f}, p値 = {p_val:.5f}")
if p_val < 0.05:
print("→ 少なくとも1つのグループに有意な平均差があります(WelchのANOVA)")
else:
print("→ 有意な差は確認できません(平均差なし)")
注意点・Tips
- 等分散性を仮定しないため、より現実に即した検定が可能
- 正規分布の前提は残るため、分布の歪みに注意
-
「どの群が違うか」はANOVA単体ではわからない:
→ 有意差が出た場合は事後検定で確認する必要あり
必要に応じてBonferroni補正などを考慮
ケーススタディ
🔗ComingSoon
関連手法
- 前提条件に関連する手法
- 類似手法
- 一元配置ANOVA(等分散を仮定する3群以上の差検定)
- 関連手法
- Tukey HSD(事後の多重比較用手法)
- Games-Howell(等分散を仮定しない多重比較検定)
- Bonferroni補正(多重比較時の第1種過誤の抑制)
Discussion