ANOVA 分散分析
Analysis of Variance
概要
分散分析とは、統計量がF分布に従うことを前提としたパラメトリック検定*1の一種です。3つ以上の群(水準)に対して、効果による分散(群間変動)と誤差による分散(群内変動)との比(F値)を F検定を用いて確認することで、各水準の母平均に誤差以上の効果があるか否かを判断する・・というものです。
前提
分散分析を行うには、対象となるデータの分布が1) 正規分布に従っていること(正規性)、2) 分散の等質性があること、3) 観測値の独立性(無作為標本)があることが前提となります。
帰無仮説
分散分析の帰無仮説と対立仮説を、3群の分散分析の場合を例に確認します。
- 帰無仮説 H0:A群の母平均 = B群の母平均 = C群の母平均
- 対立仮説 H1:A群、B群、C群の母平均の中のいずれかに異なる値がある
用語解説
以下、A・B・C の3社の製品の耐久性を比較する・・という例で、分散分析の用語について概説します。
要因
データの値を変化させる原因を「要因」といいます。この場合「会社」です。要因の数は複数設定されることもあります。例えば、A・B・Cの3社の製品を、それぞれ、温暖な地域で使用した場合と、寒冷な地域で使用した場合とで比較する場合、要因は2つ。ひとつは「製造会社」もうひとつは「気候」です。この場合、3x2 で6種類の評価実験が必要になります。
水準(群)
要因を構成する条件を「水準(群)」といいます。上の例で「会社」要因で言えば、A・B・Cの3つの「水準(群)」が存在します。
一元配置と二元配置(1要因と2要因)
分散分析には大きく一元配置と二元配置(多元配置)の2種類があります。
- 一元配置分散分析:1要因だけに着目して影響を調べる
注)Pythonでは SciPy の scipy.stats.f_oneway( ) を利用
- 二元配置分散分析:2要因の影響の有無を調べる
注)Pythonでは statsmodels の statsmodels.api.stats.anova_lm( ) を利用- 2要因の分散分析では、まず2つの要因の交互作用を検証します。
- 交互作用が認められなかった場合は主効果の検定を行います。
- 交互作用が認められた場合は単純主効果の検定を行います。たとえば「会社」要因と気候要因の交互作用が有意である場合、気候要因の特定水準における会社要因の主効果、また会社要因の特定水準における気候要因の主効果について分析を行います。
被験者間計画と被験者内計画
- 被験者間計画
ひとりの被験者をひとつの水準にのみ割り当てるケース。例えば、A社の製品を10人、B社製品10人、C社製品10人、全体で30人が評価する実験計画。
- 被験者内計画
同じ被験者をすべての水準に割り当てるケース。例えば 30人全員が A・B・C すべての製品を評価する場合。当然、こちらの方が検定力が上がります。
要因と被験者の計悪を組み合わせて、「1要因被験者間計画」、「2要因被験者内計画」といった実験計画が行われます。
主効果 main effect
特定の要因単独で有意に差が認められるときは,主効果(または単純主効果)があるといいます。例えば「気候条件に関わらずA社の製品の評価が高い」や「製造会社に関わらず、温暖な地域の方が評価が高い」など
交互作用 interaction
要因を組み合わせた場合の複合的な効果がある場合は、交互作用がある・・といいます。例えば「温暖な地域ではA社の製品の評価が高く、寒冷地ではC社の製品の評価が高い」など・・
多重比較
多重比較(Multiple Comparison Procedure)とは水準間の平均値の差を比較する検定手法で、これを用いると、3水準以上の比較において、どの水準間に差があるかを調べることができます。
一般に、分散分析で有意と判断された場合に、その下位検定(事後検定)として多重比較が行われますが、分散分析では有意なのに、多重比較では群間の有意差が見いだせない場合や、あるいはその逆の場合あり、分散分析と多重比較は独立に行うものと考えた方が良いとされています(分散分析は行わず、多重比較だけを行う・・という解析手順でも問題ないとされています)。
多重比較には様々な種類があって、分散分析を事前に行うことを前提とした Scheffe法や、分散分析とは独立に群間の有意差検定が可能な Bonferroni法、Tukey-Kramer法などがあります。
分散分析表
分散分析の結果は、一般に「分散分析表」の形で提示します。以下の節では、一元配置の事例を紹介します。
一元配置分散分析
はじめに、分散分析表のイメージを紹介して、その後、その表ができるプロセスを具体的なデータを通して紹介します。
表の形式
要因 | 平方和 S | 自由度 df | 平均平方 V | F値 |
群間 | 32 | 2 | 16.00 | 13.11 |
群内 | 11 | 9 | 1.22 | |
全体 | 43 | 11 |
サンプルデータ
この表は、以下のデータにもとづいて作成されたものです。
メーカー | A社 | B社 | C社 |
3 | 7 | 5 | |
4 | 8 | 4 | |
4 | 9 | 6 | |
3 | 6 | 7 | |
群平均 | 3.5 | 7.5 | 5.5 |
全平均 | 5.5 |
被験者12名を4名づつ3つのグループ(群)に分けて、それぞれに A・B・C の3つのメーカーの製品の音質を評価してもらった結果です(一人につき一商品を、直感的に10段階で評価してもらうという単純なものです)。
表内のデータの埋め方
表の左上から順に、どのような計算で値が決まるのかを概説します。
- 1) 群間の平方和:(群平均 - 全平均)2 の12件分の合計 = 32
- 2) 群内の平方和:(各値 - 群平均)2 の12件分の合計 = 11
- 3) 全体の平方和:(各値 - 全平均)2 の12件分の合計 = 43
以下の関係があることをおさえると、理解しやすいかもしれません。
( 各値 - 全平均 )=( 各値 - 群平均 )+( 群平均 - 全平均 )
上記の3つの値は、この関係式の3つの項について、その平方(2乗)を、すべてのデータの数(12件)合計したものになっています(以下参考)。
( 3 - 5.5 )=( 3 - 3.5 )+( 3.5 - 5.5 ) ・・・1件目のデータ ( 4 - 5.5 )=( 4 - 3.5 )+( 3.5 - 5.5 ) ・・・2件目のデータ : ( 8 - 5.5 )=( 8 - 7.5 )+( 7.5 - 5.5 ) ・・・6件目のデータ : ( 7 - 5.5 )=( 7 - 5.5 )+( 5.5 - 5.5 ) ・・・12件目のデータ ↑ ↑ ↑ 平方和(43) = 平方和(11) + 平方和(32)
- 4) 群間の自由度:群の数 - 1
3 -1 = 2
- 5) 群内の自由度:各群の(データ数 - 1 )の合計
( 4 - 1 )+ ( 4 - 1 )+ ( 4 - 1 )= 9
- 6) 全体の自由度:全データ数 - 1
12 - 1 = 11
- 7) 群間の平均平方:群間の平方和 ÷ 群間の自由度
32 ÷ 2 = 16.00
- 8) 群内の平均平方:群内の平方和 ÷ 群内の自由度
11 ÷ 9 = 1.22
- 9) F値:群間の平均平方 ÷ 群内の平均平方
16.00 ÷ 1.22 = 13.11
という流れで表が埋まっていきます。
実際には、Python 等の統計ライブラリの利用で、一括出力されますが、なんとなく数字の意味がわかっていると、結果の考察で迷うことがありません。
F分布から有意性を判定
F値は、群内変動よりも群間変動のほうが大きい場合にその値が大きくなります。F値大きな値をとる場合は、偶然による誤差よりも、群の要因による誤差のほうが大きい、すなわち群間に違いがある・・と判定できることになります。
F値は、F分布と呼ばれる確率分布に従うのですが、自由度によって分布の形状が変わります。p=0.05 の F値を列挙した F分布表では、分子の自由度(群間の自由度)が df1、分母の自由度(群内の自由度)が df2 として、縦横2軸のテーブルになっているので、その2つの値を追って、交差する部分を見つけます。
- 参考:Google:F分布表
有意水準 α = 0.05 として、df1 = 2 と df2 = 9 が交差する部分の値を見ると 4.26、よってこの例では、棄却域は F ≧ 4.26 となります。Fの実現値は、13.11 なので、帰無仮説は棄却され「3つの群の平均値には、いずれかに有意な差がある」と言うことができます。
実際には Python 等の統計ライブラリの利用で、F値、P値が一括出力されるので、F分布表を目で追う必要はありません。出力された P値が、有意水準よりも小さな値であれば、有意と判定できます。
論文などではこの結果を、以下のように書きます。
\( F ( 2,9 ) = 13.11 ( p < .05 ) \)
\( F_{2,9} = 13.11 ( p < .05 ) \)