一元配置分散分析

Rにて一元配置分散分析 (one-way ANOVA) を行う。一元配置分散分析とは、例えば "数学のテストの得点" といったような1要因に対して、"ある学校のある学年のクラスA、BおよびCの平均点に差があるかどうか" というような3群以上の標本の平均値の差の有無を検定する手法である。Rでは、コマンド "oneway.test"、または、コマンド "aov" および "anova" の組み合わせで一元配置分散分析を実行することができる。"aov" と "anova" による分散分析では1要因に限らず、2要因の二元配置分散分析等も可能である。

ある要因 (数学のテストの点数) に対して、ある4群 (クラスA, B, C, D) にて以下の観測値 (各生徒の得点) が得られたときの分散分析を行う。帰無仮説 (H0) は全ての群間において平均値に差がないことである。

データA56, 48, 72, 60, 55
データB60, 62, 76, 84
データC78, 53, 62, 44, 90, 57
データD77, 72, 83, 81, 91, 83

以下のコマンドにて、上のデータAからDをまとめて変数"score"に格納する。

1|$score=c(56, 48, 72, 60, 55, 60, 62, 76, 84, 78, 53, 62, 44, 90, 57, 77, 72, 83, 81, 91, 83)

次に、以下のコマンドで上で読み込んだデータにラベルをつけるための変数を作成する。クラスAからDの標本数はそれぞれ、"5, 4, 6, 6" なので "rep(...)" にてその標本数に対応するAからDの文字列ベクトルを発生させ、"factor(...)" にてそのベクトルを因子に変換したものを変数 "group" に格納する。

1|$group=factor(rep(c("A", "B", "C", "D"), c(5, 4, 6, 6)))

以上で作成した "score" は従属変数であり、"group" は独立変数である。分散分析はこれらの変数を用い、 "aov" および "anova" にて "anova(aov(従属変数 ~ 独立変数))" という形式で実行する。従属変数と独立変数を繋ぐ記号はチルダ (~) である。もし、独立変数が2つある場合、すなわち二元配置分散分析の場合は "anova(aov(従属変数 ~ 独立変数1 + 独立変数2 + 独立変数1:独立変数2))" という形式で実行する。一元配置分散分析は、実際には以下のように打つ。

1|$anova(aov(score ~ group))
Analysis of Variance Table

Response: score
          Df Sum Sq Mean Sq F value  Pr(>F)  
group      3 1629.2  543.06  3.9141 0.02708 *
Residuals 17 2358.6  138.74                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

結果の "group" の行の"Df"は級間 (群間) の自由度を意味しており、"級 (群) の個数 - 1" で与えられる値である。この場合、データA~Bの4から1を引いた値 (3) となる。一方、"Residuals" の行の "Df" は級内 (郡内) の自由度を意味しており、"全標本の個数 - 級の個数" で与えられる。この場合標本の数が21個なので、そこから級の個数4を引いた値 (17) となる。"Sum Sq" の列の数値はそれぞれ級間および級内の平方和を示す。また、"Mean Sq" の列の数値は級間および級内の平均平方であり、それぞれの平方和をそれぞれの自由度で割ることで算出される値である。"F value" はF値を意味しており、級間の平均平方を級内の平均平方で割った値である。最後の "Pr(>F)" は得られたF値をF分布に適用したときに得られるp値である。有意水準を5%に設定していた場合であると、"p < 0.05" であり帰無仮説は棄却され、データAからDの平均値は全て等しいとはいえないという結論が導かれる。以上が一元配置分散分析である。

また、コマンド "aov" に対するデータの読み込ませ方には別の方法がある。データフレームを読み込む方法である。上と同様のデータをテキストファイル等に以下のように成型したとする。

group	score
A	56
A	48
A	72
A	60
A	55
B	60
B	62
B	76
B	84
C	78
C	53
C	62
C	44
C	90
C	57
D	77
D	72
D	83
D	81
D	91
D	83

このデータをコピーし、以下のようにデータフレームとして変数 "dat" に格納する。

1|$dat=read.table("clipboard",header=T)

以上のデータフレーム "dat" を用い、分散分析は以下のように行う。"data" には読み込むデータフレームを指定する。

1|$anova(aov(score ~ group, data=dat))
Analysis of Variance Table

Response: score
          Df Sum Sq Mean Sq F value  Pr(>F)  
group      3 1629.2  543.06  3.9141 0.02708 *
Residuals 17 2358.6  138.74                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

結果は上と完全に一致する。

一元配置分散分析は他のコマンド "oneway.test" でも実行できるが、その場合もデータの読み込み方は上の2つの場合と同様である。以下のようにする。オプション "var.equal=T" は各データに等分散性を仮定する際に指定するオプションである。普通は指定する。

1|$oneway.test(score ~ group, data=dat, var.equal=T)

        One-way analysis of means

data:  score and group 
F = 3.9141, num df = 3, denom df = 17, p-value = 0.02708

結果は上と同様である。

このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る