ANOVA4 on the Web、R(のaov)、SPSS、ANOVA君で分散分析

ANOVA4 on the Webは、広島女学院大学の桐木氏が作成した、ウェブ上で4要因(四元配置)までの分散分析を実行できる便利な環境です。同サイトで公開されているANOVA4 on the Web専用の入力フォーマット(ANVファイル)のサンプルファイルをANOVA4で実行したのが以下の結果です。年齢と性別が被験者間要因、課題が被験者間要因で、得点の平均値について有意差検定を行っています。(分散分析表のみ抜粋、本来は単純主効果や多重比較の情報も出力されます)

                  Table of Analysis of Variance 
------------------------------------------------------------------------------
      source              SS          df         MS           F       p
------------------------------------------------------------------------------
 A:年齢                102.2064516     1      102.2064516  17.455  0.0013 *** 
 B:性                    5.6903226     1        5.6903226   0.972  0.3437     
 AB                     61.4322581     1       61.4322581  10.491  0.0071 **  
 error[S(AB)]           70.2666667    12        5.8555556 
 C:課題                 28.0279570     2       14.0139785   8.977  0.0012 *** 
 AC                      5.8989247     2        2.9494624   1.889  0.1730     
 BC                     18.9956989     2        9.4978495   6.084  0.0073 **  
 ABC                    45.6408602     2       22.8204301  14.618  0.0001 ****
 error[CS(AB)]          37.4666667    24        1.5611111 
------------------------------------------------------------------------------
                      + p<.10, * p<.05, ** p<.01, *** p<.005, **** p<.001

同じデータをもってきて、Rで実行してみました。被験者間・被験者内の混合計画のformulaの書き方の練習です。

age <- c(rep(5, 9*3), rep(6, 7*3))
gender <- rep(c(rep("M",5), rep("F",4), rep("M",3), rep("F",4)), each=3)
task <- rep(1:3, 16)
subject <- rep(c(1:16), each=3)
score <- c(2, 5, 9, 6, 7, 10, 5, 9, 13, 7, 9, 14, 5, 7, 11,
6, 3, 6, 6, 6, 7, 8, 5, 5, 10, 8, 6,
1, 2, 1, 2, 1, 5, 5, 4, 3,
5, 5, 5, 3, 6, 5, 4, 6, 9, 6, 7, 7)

dat <- data.frame(age=ordered(age), gender=factor(gender),
  subject=factor(subject), task=ordered(task), score=score)
res <- aov(score ~ age * gender * task + Error(subject/task) + age*gender, data=dat)
summary(res)

計算された分散分析表は以下の通り。ANOVA4の結果と異なっています。

Error: subject
           Df Sum Sq Mean Sq F value  Pr(>F)   
age         1  95.36   95.36  16.285 0.00165 **
gender      1   1.92    1.92   0.328 0.57746   
age:gender  1  61.43   61.43  10.491 0.00710 **
Residuals  12  70.27    5.86                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Error: subject:task
                Df Sum Sq Mean Sq F value   Pr(>F)    
task             2  41.29  20.646  13.225 0.000134 ***
age:task         2   8.07   4.037   2.586 0.096165 .  
gender:task      2  27.53  13.764   8.817 0.001347 ** 
age:gender:task  2  45.64  22.820  14.618 7.05e-05 ***
Residuals       24  37.47   1.561                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

特に課題の主効果にだいぶ違いがあるので、SPSS (ver.18)でも同様に試してみたところ、以下のようになりました。

被験者間効果の検定
|------------|-----------------|------|--------|-------|--------|
|ソース      |タイプ III 平方和|自由度|平均平方|F 値   |有意確率|
|------------|-----------------|------|--------|-------|--------|
|切片        |1482.852         |1     |1482.852|253.238|.000    |
|------------|-----------------|------|--------|-------|--------|
|age         |102.206          |1     |102.206 |17.455 |.001    |
|------------|-----------------|------|--------|-------|--------|
|gender      |5.690            |1     |5.690   |.972   |.344    |
|------------|-----------------|------|--------|-------|--------|
|age * gender|61.432           |1     |61.432  |10.491 |.007    |
|------------|-----------------|------|--------|-------|--------|
|誤差        |70.267           |12    |5.856   |       |        |
|------------|-----------------|------|--------|-------|--------|

被験者内対比の検定
|---------------------|----|-----------------|------|--------|------|--------|
|ソース               |task|タイプ III 平方和|自由度|平均平方|F 値  |有意確率|
|---------------------|----|-----------------|------|--------|------|--------|
|task                 |線型|25.317           |1     |25.317  |11.493|.005    |
|                     |----|-----------------|------|--------|------|--------|
|                     |2 次|2.711            |1     |2.711   |2.949 |.112    |
|---------------------|----|-----------------|------|--------|------|--------|
|task x age           |線型|3.188            |1     |3.188   |1.447 |.252    |
|                     |----|-----------------|------|--------|------|--------|
|                     |2 次|2.711            |1     |2.711   |2.949 |.112    |
|---------------------|----|-----------------|------|--------|------|--------|
|task x gender        |線型|18.801           |1     |18.801  |8.535 |.013    |
|                     |----|-----------------|------|--------|------|--------|
|                     |2 次|.195             |1     |.195    |.212  |.653    |
|---------------------|----|-----------------|------|--------|------|--------|
|task x age  *  gender|線型|44.284           |1     |44.284  |20.104|.001    |
|                     |----|-----------------|------|--------|------|--------|
|                     |2 次|1.356            |1     |1.356   |1.475 |.248    |
|---------------------|----|-----------------|------|--------|------|--------|
|誤差 (task)          |線型|26.433           |12    |2.203   |      |        |
|                     |----|-----------------|------|--------|------|--------|
|                     |2 次|11.033           |12    |.919    |      |        |
|---------------------|----|-----------------|------|--------|------|--------|

これまた微妙に違うんですよね。RのaovよりはANOVA4とSPSSのほうが値が近いです。Rのformulaの書き方が違うのかもしれません。うーむ……。

2015年2月25日追記

SSの計算のしかたが違うのかもしれません。aovはType-I、lmはType-II、SPSSSASはType-IIIの平方和を使用するのだそうで、ANOVA4もType-IIIなのかも。

2015年3月18日追記

ANOVA君はType-IIIの計算ができるとのことで、やってみました。

source("anovakun_451.txt")
dat2 <- data.frame(matrix(dat$score, ncol=length(levels(factor(task))), byrow=TRUE))
age2 <- factor(c(rep(5, 9), rep(6, 7)))
gender2 <- factor(c(rep("male", 5), rep("female", 4), rep("male", 3), rep("female", 4)))
dat2 <- cbind(age2, gender2, dat2)
colnames(dat2) <- c("Age", "Gender", "Task 1", "Task 2", "Task 3")
anovakun(dat2, "ABsC", 2, 2, 3)

すると、ANOVA4 on the Webの出力とぴったり一致。平方和(SS)の計算方法による違いだったぽいです。今回使用したデータは『心理学のためのデータ解析テクニカルブック』の「2要因に対応がなく、1要因に対応がある場合〔データ数が異なるケース〕」から取られています。同書の計算結果ともほぼ一致しています。

平方和のタイプについては「分散分析のノート」にまとまっています。

--------------------------------------------------------------
        Source        SS  df        MS  F-ratio  p-value      
--------------------------------------------------------------
             A  102.2065   1  102.2065  17.4546   0.0013 **   
             B    5.6903   1    5.6903   0.9718   0.3437 ns   
         A x B   61.4323   1   61.4323  10.4913   0.0071 **   
     s x A x B   70.2667  12    5.8556        
--------------------------------------------------------------
             C   28.0280   2   14.0140   8.9769   0.0012 **   
         A x C    5.8989   2    2.9495   1.8893   0.1730 ns   
         B x C   18.9957   2    9.4978   6.0840   0.0073 **   
     A x B x C   45.6409   2   22.8204  14.6181   0.0001 ***  
 s x A x B x C   37.4667  24    1.5611        
--------------------------------------------------------------
         Total  388.9792  47 
                  +p < .10, *p < .05, **p < .01, ***p < .001 

釣り合い型(要因計画の各セル内のデータ数が等しい)であればRでもcarパッケージのAnovaを使えばType-IIIのSSが計算できるけれど、今回の例のような非釣り合い型のデータの場合はANOVA君を使うのが良いみたい。