繰り返し観測のない二元配置分散分析を実行する関数anova.RBを定義する
anova.RB <- function(dat){ r = nrow(dat) c = ncol(dat) col.sum = apply(dat, 2, sum) row.sum = apply(dat, 1, sum) X = sum(dat)^2 / (r*c) AS = sum(dat^2) R = sum(row.sum^2 / c) C = sum(col.sum^2 / r) SSr = R - X SSc = C - X SSres = AS - C - R + X SSt = AS - X res1 <- c(SSr, SSc, SSres, SSt) DFr = r - 1 DFc = c - 1 DFres = (r - 1) * (c - 1) DFt = r*c - 1 res2 <- c(DFr, DFc, DFres, DFt) MSr = SSr / DFr MSc = SSc / DFc MSres = SSres / DFres MSt = NA res3 <- c(MSr, MSc, MSres, MSt) Fr = MSr / MSres Fc = MSc / MSres Fres = NA Ft = NA res4 <- c(Fr, Fc, Fres, Ft) Pr <- 1 - pf(Fr, DFr, DFres) Pc <- 1 - pf(Fc, DFc, DFres) Pres <- NA Pt <- NA res5 <- c(Pr, Pc, Pres, Pt) aovt <- cbind(res1, res2, res3, res4, res5) rownames(aovt) <- c("行間", "列間", "誤差", "総") colnames(aovt) <- c("SS", "DF", "MS", "F", "P") aovt }
使用方法
> dat [,1] [,2] [,3] [,4] [1,] 9 6 10 9 [2,] 7 5 13 11 [3,] 8 6 8 13 [4,] 8 3 13 14 [5,] 12 6 12 16 [6,] 11 7 14 12 [7,] 8 10 14 15 [8,] 13 9 16 14 > anova.RB(dat) SS DF MS F P 行間 77.0 7 11.000000 3.253521 1.681791e-02 列間 217.5 3 72.500000 21.443662 1.347309e-06 誤差 71.0 21 3.380952 NA NA 総 365.5 31 NA NA NA
参考文献
森・吉田『心理学のためのデータ解析テクニカルブック』北大路書房 p91-93