🔍
Bartlett(バートレット)検定|等分散性の検定
概要
2つ以上の独立したグループ間で分散の等質性(等分散性)を検定する方法。
主な用途
パターン | 説明 | 実務ユースケース |
---|---|---|
等分散性の確認 | 2群間の分散が等しいかを検定 | 施策別グループでの売上やCV率比較におけるグループ間の等分散性確認 (前提条件確認) |
グループ間のばらつき比較 | グループ間で数値のばらつきに差があるかどうかを検定 | 3県(東京・神奈川・埼玉)での支出を比較し、ばらつきに差があるかを検証 |
データ要件
- 従属変数:数値型/連続変数(例:売上、CV率、支出)
- 独立変数:独立した2群以上のグループ(例:施策AvsB、都道府県、メール配信ありvsなし など)
- 前提条件:各群が正規分布に従うこと
理論
Bartlett検定は、各群のサンプルサイズ・標本分散をもとに検定統計量を計算し、
理論的なカイ二乗分布に基づいて「分散が等しいか」を検定
- 帰無仮説:すべてのグループで分散は等しい(=等分散)
- 対立仮説:いずれかのグループで分散が異なる(両側検定) ※片側検定は存在しない
【検定の手順】
- 各グループの不偏分散
とサンプルサイズs_i^2 を計算n_i -
Bartlett統計量
を算出し、カイ二乗分布と比較 ※式は省略T -
自由度
のカイ二乗分布に基づいてp値を算出(k-1)
※ :分散を比較するグループの数(群数)k
→ p値が有意水準(例:0.05)未満なら、少なくとも1つの群の分散が異なると判断
(帰無仮説を棄却)
実装コード例
Python
from scipy.stats import bartlett
# グループごとの値を抽出 ※各グループは正規分布に従う想定
group_a = df[df['group'] == 'A']['value']
group_b = df[df['group'] == 'B']['value']
group_c = df[df['group'] == 'C']['value']
# Bartlett検定
stat, p_val = bartlett(group_a, group_b, group_c)
print(f"Bartlett検定統計量={stat:.3f}, p値={p_val:.5f}")
# 評価(有意水準=0.05、両側検定で設定)
if p_val < 0.05:
print("→ 分散に有意な差があります(等分散ではありません)")
else:
print("→ 分散に有意な差はありません(等分散とみなせます)")
注意点・Tips
-
主にANOVAやt検定の前提条件として活用:正規性がある前提での等分散性の確認に使われる
-
正規分布が強く前提されており、外れ値に非常に弱い:
外れ値がある場合はLevene検定やBrown-Forsythe検定が推奨される -
グループ数が2群以上で使用可能:2群だけでなく、3群以上の分散比較にも対応
-
等分散が成り立たない場合:
t検定であればWelchのt検定、ANOVAであればWelchのANOVAなど代替手法を使用 -
スコアに対しても検定可能だが、以下の場合は使えなかったり注意が必要
- スコアが非常に粗い(例:1〜3点しかない)
- 数値的間隔に意味がないスコア(例:好き=3、普通=2、嫌い=1)
- スコアがカテゴリ扱い(例:S/A/B/C/D)
関連手法
- 等分散性が前提の手法
- Studentのt検定
- ANOVA
- 類似手法
- F検定(2群で正規性がある場合)
- Levene検定・Brown-Forsythe検定(正規性を問わず3群以上にも対応)
- 分散が異なる場合の代替手法
- Welchのt検定(正規性はある場合)
- Mann-Whitney検定(正規性もない場合)
- WelchのANOVA
Discussion