はじめよう実験計画

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

分散分析をわかりやすく解説

はじめに

分散分析についての解説はどこにでもあるのですけど、この記事くらいの理解で十分ですよ~という気持ちでまとめてみました。分散分析はともだち!怖くないよ!

 

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

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

f:id:Sturgeon:20210510205526p:plain

図1

さて、図1の(a)と(b)でどちらがAの効果が有効でしょうか... 答えは(a)と考えるのが自然ですよね。なぜそう思うのでしょうか?

それは(a)の方がデータのばらつきに対して効果が大きいからです。

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

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

 

分散分析の心(理論)

丁寧な式展開は教科書に譲るとして、分散分析の理論はこんな感じです。

■分散分析の心■
  1. 平方和は要因由来と誤差由来の成分に分解できる。
  2. 平方和÷自由度=平均平方を要因と誤差成分のそれぞれに対して計算する。
  3. 要因の効果がゼロという仮定H0の下では、要因の平均平方の期待値は誤差の平均平方に等しい。
  4. 仮定H0の下では平均平方の比=F値はF分布に従う。
  5. F値がFαより大きければ、有意水準αで仮定H0は棄却され、要因効果は有意。

 

この内容について、以下の表1に少し式の説明を加えました。要因が何個になっても一緒です。式ではなく、意味を覚えることで、計算手法を忘れても心を忘れることはありません。

f:id:Sturgeon:20210511204636p:plain

表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以下なので、***がついています。

 

参考書籍

分散分析は基本の基ですから、どの書籍でも問題ありません。ただ、今まで色々な書籍を手に取ってみましたが、分散分析や実験計画法の初歩の先をわかりやすく説明している書籍ってあまりない気がしています。もしよかったら、以下の記事も見てみてくださいね!

www.doe-get-started.com