はじめに
統計データを分析する際、3つ以上のグループ間で結果に違いがあるかどうかを確認したい場面がよくあります。例えば、「3種類の新薬の効果に差はあるか」「4つの広告デザインでクリック率が変わるか」といったケースです。
このような場合に用いられるのが「一元配置分散分析」です。この記事では、この分散分析の仕組みと使い方のポイントについて整理していきます。
データ分析の際にはしっかりと分布を確認しながら適切な方法を進めていくことが重要です。これらについて、経験豊富な方とマンツーマンで学習していくのもオススメです。
1. なぜ分散分析が必要なのか?
例えば、3つの勉強法(A、B、C)の効果を比較したいとします。
- 勉強法Aの平均点
- 勉強法Bの平均点
- 勉強法Cの平均点
ここでは「勉強法」という1つの要因に注目して比較するため、「一元配置」と呼ばれます。グループが3つ以上ある場合、個別に「AとBは違うか」「BとCは…」と調べていくのではなく、まずは全体をセットにして「どこかに差があるか?」を一度に判定する必要があります。
t検定は2つの群について比較しますが、分散分析は3つの群などを調べる際に用いられます。
2. 分散分析の直感的なイメージ
分散分析は、データのバラツキを「2種類のバラツキ」に分解して比較します。
- 要因のバラツキ: 試した手法などによって生じている平均値のズレ。
- 誤差のバラツキ: データ全体のばらつきなど試した手法とは関係ないデータ自体のバラツキ。
判定のルール
- F値が大きい:ノイズに比べて「要因の差」が大きい→有意な差がある
- F値が小さい:要因の差が誤差(ノイズ)に埋もれている→差があるとは言えない
3. 分散分析の5ステップ
具体的にどのような手順で計算・判断が行われるのかを見てみましょう。
Step 1: 仮説を立てる
- 帰無仮説 (\( H_0 \)):すべてのグループの平均値は等しい(差はない)。
- 対立仮説 (\( H_1\)):少なくとも1つのグループの平均値は他と異なる(どこかに差がある)。
Step 2: 3つの「平方和(バラツキの合計)」を計算
データのズレを数値化します。
- 総平方和 (\( S_T \)): 全データ-全体の平均とのズレの2乗合計。
- 要因平方和 (\( S_A \)): 各グループの平均-全体の平均とのズレの2乗合計。
- 誤差平方和 (\( S_E \)): \(S_T\) – \(S_A\)。
Step 3: 自由度で割って「平均平方」を出す
平方和をそのまま比較するとデータの個数に左右されるため、自由度で割って「平均平方」に変換します。
自由度とは、 自由に値をとることができるデータの数のことです。例えば、3つの数値が決まっている場合、2つの数値が決まれば最後の1つは自動的に決まってしまいます。この場合、自由に動かせるのは2つだけなので「自由度は2」と数えます。
Step 4: F値を算出する
「要因の平均平方」を「誤差の平均平方」で割ることで「F値」を算出できます。
Step 5: P値を判定する
F値を統計分布(F分布)に照らし合わせ、その数値が起こる確率(P値)を求めます。
- P値 < 0.05であれば、5%以下の確率でしか起こらないことが起きたため、偶然ではなく、意味のある差があると判断します。
4. 分散分析表の見方
統計ソフト(ExcelやR、Pythonなど)を使うと、以下のような「分散分析表」が出力されます。この様な結果からP値が十分に低いかを確認します。
| 要因 | 平方和 (SS) | 自由度 (df) | 平均平方 (MS) | F値 | P値 |
|---|---|---|---|---|---|
| 要因 | 120 | 2 | 60 | 12.0 | 0.0003 |
| 誤差 | 100 | 20 | 5 | ||
| 全体 | 220 | 22 |
5. 分散分析の結果の使い方
分析の結果、「差がある(有意差あり)」となった場合、どう動けばいいのかを整理します。
「どこに差があるか」を特定する
分散分析の結果わかるのは、「3つのうち、どこかに差がある」ということだけです。「AとBに差があるのか?」「AとCなのか?」といった具体的な組み合わせはわかりません。
そのため、分散分析で「差がある」とわかった後に、データの特性や分析の目的に合わせて、最適な手法を慎重に検討する必要があります。
6. Pythonでの実行例
ライブラリの scipy を使うと、数行のコードで分散分析を実行できます。
import scipy.stats as stats
# データの準備 (3つの勉強法それぞれのテスト点数)
method_a = [85, 78, 92, 88, 76]
method_b = [72, 68, 75, 70, 65]
method_c = [90, 88, 95, 92, 89]
# 分散分析の実行
f_value, p_value = stats.f_oneway(method_a, method_b, method_c)
print(f"F値: {f_value:.3f}")
print(f"P値: {p_value:.5f}")
# P値が0.05より小さければ「有意な差がある」と判断
if p_value < 0.05:
print("結果: グループ間に有意な差があります。")
else:
print("結果: 有意な差は認められませんでした。")
この様に出力されました。

まとめ
分散分析は、「要因のバラツキ」が、ただのバラツキ(ノイズ)に埋もれていないかを見ることで、何かの要因がしっかりと効果があるかを見ることができます。
3つ以上のグループを比べるときは、この分散分析を用いることでデータの違いを正しく確認してみましょう。
分散分析を学ぶのにオススメの方法
書籍:実験計画法の基本と仕組み
こちらは実験計画法や分散分析が記載されており、幅広くこれらの分野を学ぶ際にオススメです。
スクール:現役データサイエンティストに教えてもらう
分散分析は実務でも用いられることも多いため、しっかりと理解することが重要です。難しいと感じる場合は、相談しながら進められるスクールもオススメです。




コメント