例えば、A〜Eの5種類の肥料をそれぞれ別の畑で使ったときのジャガイモの収穫量を表す以下のようなデータがあったとき、肥料による収穫量の明確な違いがあるかどうかを調べようと思います。一元配置の分散分析(対応なし)を行います。(ジャガイモ収穫量の表は、P. Howell "Elementary Statistics"から抜粋)
A | B | C | D | E |
---|---|---|---|---|
310 | 353 | 366 | 299 | 367 |
284 | 293 | 335 | 264 | 314 |
307 | 306 | 339 | 311 | 377 |
267 | 308 | 312 | 266 | 342 |
> A <- c(310, 284, 307, 267) > B <- c(353, 293, 306, 308) > C <- c(366, 335, 339, 312) > D <- c(299, 264, 311, 266) > E <- c(367, 314, 377, 342) > fertilizer <- factor(c(rep("A",4), rep("B",4), rep("C",4), rep("D",4), rep("E",4))) > summary(aov(c(A,B,C,D,E)~fertilizer)) Df Sum Sq Mean Sq F value Pr(>F) fertilizer 4 12712.0 3178.0 5.406 0.006716 ** Residuals 15 8818.0 587.9 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
肥料の違いによる収穫量にはp<0.01で有意差が出ましたが、このままでは「少なくともどれか1つの肥料が違う」ということしか言えません。そこでTukey's HSDで多重比較をして「どれが違うのか」を調べます。
> TukeyHSD(aov(c(A,B,C,D,E)~fertilizer)) Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = c(A, B, C, D, E) ~ fertilizer) $fertilizer diff lwr upr p adj B-A 23 -29.940872 75.9408721 0.6711716 C-A 46 -6.940872 98.9408721 0.1042010 D-A -7 -59.940872 45.9408721 0.9935253 E-A 58 5.059128 110.9408721 0.0286488 C-B 23 -29.940872 75.9408721 0.6711716 D-B -30 -82.940872 22.9408721 0.4355154 E-B 35 -17.940872 87.9408721 0.2941532 D-C -53 -105.940872 -0.0591279 0.0496798 E-C 12 -40.940872 64.9408721 0.9533486 E-D 65 12.059128 117.9408721 0.0130496
p<0.05レベルで有意差が出たのはE>A、D
ここでもし使われた畑が12の別々の場所ではなく4区画だったとしたら、一元配置の分散分析(対応有り)になります。
A | B | C | D | E | |
---|---|---|---|---|---|
1 | 310 | 353 | 366 | 299 | 367 |
2 | 284 | 293 | 335 | 264 | 314 |
3 | 307 | 306 | 339 | 311 | 377 |
4 | 267 | 308 | 312 | 266 | 342 |
> farm<-factor(rep(c(1:4),5)) > summary(aov(c(A,B,C,D,E)~fertilizer+farm)) Df Sum Sq Mean Sq F value Pr(>F) fertilizer 4 12712.0 3178.0 15.970 9.466e-05 *** farm 3 6430.0 2143.3 10.771 0.001013 ** Residuals 12 2388.0 199.0 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
となり、肥料と区画両方に有意差が現れます。もし区画による違いを誤差として扱いたければsummary(aov(c(A,B,C,D,E)~fertilizer+Error(farm)))とします。
SPSSならメニューでポン!なのですが、似たような分析を何度も行う必要があるときにはGUIはめんどくさくなってきます(SPSSでも高機能なスクリプト言語が使えるので、それを勉強するのも手ですが)。Rだと基本的にキーボード入力なので試行錯誤に向いているような気がしますし、柔軟な分析が無料で行えるのは素晴らしいです。なにより、必要とあればソースコードが読めるというのが最高です。