2要因とも対応がない場合(CRFpqデザイン)T [データ数が等しいケース]
ソースコード datはデータ行列,pは要因Aの水準数,qは要因Bの水準数
anova.CRFpq1 <- function(dat,p,q){
n <- length(dat[,1])
ABjk <- apply(dat, 2, sum)
mt <- matrix(ABjk, ncol=q, byrow = TRUE)
Aj <- apply(mt, 1, sum)
Bk <- apply(mt, 2, sum)
ABS <- sum(dat ^ 2)
X <- sum(mt) ^ 2 / (n * p * q)
A <- sum(Aj ^ 2 / (n * q))
B <- sum(Bk ^ 2 / (n * p))
AB <- sum(ABjk ^ 2 / n)
SSa <- A - X
SSb <- B - X
SSab <- AB - A - B + X
SSwc <- ABS - AB
SSt <- ABS - X
dfA <- p - 1
dfB <- q - 1
dfAB <- (p - 1) * (q - 1)
dfWC <- p * q * (n - 1)
dfT <- n * p * q - 1
MSwc <- SSwc / dfWC
MSa <- SSa / dfA
MSb <- SSb / dfB
MSab <- SSab / dfAB
Fa <- MSa / MSwc
Fb <- MSb / MSwc
Fab <- MSab / MSwc
pA <- 1 - pf(Fa, dfA, dfWC)
pB <- 1 - pf(Fb, dfB, dfWC)
pAB <- 1 - pf(Fab, dfAB, dfWC)
result.table <- matrix(c(
SSa, dfA, MSa, Fa, pA,
SSb, dfB, MSb, Fb, pB,
SSab, dfAB, MSab, Fab, pAB,
SSwc, dfWC, MSwc, NA, NA,
SSt, dfT, NA, NA, NA),ncol = 5, byrow = TRUE)
dimnames(result.table) <- list(c(
"行効果:A","列効果:B","交互作用:A*B","誤差:WC","総:T"),
c("SS","df","MS","F-value","p-value"))
result.table
}
〜使用例〜
> dat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 3 4 6 5 3 2 3 2
[2,] 3 3 6 7 5 6 2 3
[3,] 1 4 6 8 2 3 3 3
[4,] 3 5 4 7 4 6 6 4
[5,] 5 7 8 9 6 4 5 6
> anova.CRFpq1(dat,2,4) #要因Aの水準数が2,要因Bの水準数が4である
SS df MS F-value p-value
行効果:A 16.9 1 16.900000 7.041667 0.01229668
列効果:B 19.7 3 6.566667 2.736111 0.05972018
交互作用:A*B 30.5 3 10.166667 4.236111 0.01249606
誤差:WC 76.8 32 2.400000 NA NA
総:T 143.9 39 NA NA NA