はじめよう実験計画

実験を早く終わらせるための技術

分散分析の考え方

はじめに

分散分析とは実験計画法の中核をなす分析手法であり、様々な教科書・Webサイトで説明がなされています。

そのようなありふれた「分散分析」について本ブログで書くのは、「教科書の理論重視の説明だけでは実際に手を動かせない」という問題があり、一方で「簡単なイメージや計算手法の説明だけでは心に残らない」という問題があると考えたからです。

本ブログで、分散分析の勘所を説明できれば、嬉しく思います。

 

分散分析で何がしたいか(イメージ)

まずは分散分析のイメージの説明をします。要因Aに関して水準1,2をとり、実験結果Yを得ました。一つ目のパターンが図1(a)であり、2つ目のパターンが(b)です。

f:id:Sturgeon:20210510205526p:plain

図1

(a)と(b)でどちらのパターンがAの効果が有効か、というのが問題です。答えは(a)です。なぜなら、(a)は効果の大きさ(=図中の直線の傾き)がデータのばらつきに対して大きいからです。逆に、(b)はばらつきが大きく効果は明らかではありません。

ここで、強調したいのは、(a)と(b)で効果の大きさ(=図中の直線の傾き)は両者で全く同じであるということです。違うのは、ばらつきだけです。

分散分析では、ばらつきに対して効果がどのくらい大きいかによって、効果の有効・無効を「定量的に」評価することが出来ます。

 

分散分析の心(理論)

丁寧な式展開は教科書を参考にして頂くとして、分散分析の心をできるだけ簡潔にまとめました(表1)。表1にある1)~5)の内容を抑えることで、分散分析と友達になれます。要因が何個になっても一緒です。式ではなく、意味を覚えることで、計算手法を忘れても心を忘れることはありません

f:id:Sturgeon:20210511204636p:plain

表1. 分散分析の心

表1の内容を、文章でも説明します。(表1だけで理解できればこれ以降読む必要はありません)

1) 全体平方和は要因由来と誤差由来の成分に分解

平方和とはデータの変動を表しています。なので、大きなデータと小さなデータの差が大きいほど、平方和は大きくなります。全体平方和は「要因による変動」と「誤差による変動」に、表1の1)の式のように分解することが出来ます。

 

2) 平均平方=平方和/自由度

1)で計算する平方和を自由度で割ると、平均平方と呼ばれます。平均平方の特徴は次の3)です。

 

3) Aの効果がゼロならば、平均平方の期待値はσ2

Aの効果がゼロであれば、誤差の平均平方も要因Aの平均平方も母分散σ2となるという性質があります。

 

4) Aの効果がゼロならば平均平方の比はF分布に従う

応答yが正規分布するという仮定の下で、平方和SSはカイ二乗分布に従います(コクランの定理)。そして、カイ二乗分布に従うSSをその自由度で割った値(=平均平方)の比はF分布に従います(これはF分布の定義です)。

 

5) F0>F分布のα(%)点ならば、Aは有意

αは有意水準であり、通常5%か1%です。例えば、要因Aの自由度が3(水準数4), 誤差の自由度が16のとき、表1の4)式でF0=6.7と計算されれば、図2よりF0>Fα=0.05のあるため、Aの効果は有意である言えます。

f:id:Sturgeon:20210510215506p:plain

図2 自由度(3, 16)のF分布

 

Rによる分散分析の具体的な方法

 分散分析は要因数が2くらいまでなら、Excelでもできますが、要因数が増えるにつれて複雑になるため、ソフトを使って計算するのが良いでしょう。以下ではRを使って実際の分散分析を行いました。

実験のデータとして、ある要因Aを4水準取り、各水準あたり5回の実験をして応答yを得たとします。実験結果を表2に示します。

f:id:Sturgeon:20210511205244p:plain

表2. 実験結果

以下コードで、表2のデータを分散分析します。

> d#表2のデータ
    A  y1  y2  y3  y4  y5
1 160 575 542 530 539 570
2 180 565 593 590 579 610
3 200 600 651 610 637 629
4 220 725 700 715 685 710


a <- factor(rep(d$A,5))
y <- c(d$y1, d$y2, d$y3, d$y4, d$y5)
df <- data.frame(A=a, Y=y)#分散分析のためのデータフレーム

#dfの中身を見る
> df
     A   Y
1  160 575
2  180 565
3  200 600
4  220 725
5  160 542
6  180 593
7  200 651
8  220 700
9  160 530
10 180 590
11 200 610
12 220 715
13 160 539
14 180 579
15 200 637
16 220 685
17 160 570
18 180 610
19 200 629
20 220 710

----------------------------------------------------------------
#ここから分散分析
result <- lm(Y~A, df)

#分散分析の実行結果
> anova(result)
Analysis of Variance Table

Response: Y
          Df Sum Sq Mean Sq F value    Pr(>F)    
A          3  66871 22290.2  66.797 2.883e-09 ***
Residuals 16   5339   333.7                      
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

 

上記コードの最後の実行結果anova(result)が分散分析の結果です。

Df:自由度、Sum Sq:平方和、Mean Sq:平均平方、F value:F0値、Pr(>F):P値です。上の例ではF0=66.797でFα=0.05=3.2よりかなり大きいため、Aの効果は有意である、という結論になります。Signifの通り、P値が0.001以下なので、***がついています。

 

さいごに

以上、分散分析の「イメージ」、「理論」、「Rによる具体的なやり方」を説明しました。その場限りの暗記ではなく、どんな気持ちで分散分析をするのかが、心に刻まれることを祈って結びといたします。