分散分析表は手計算する時代じゃないと思っていました。
でも年をとると、手計算で覚えなかったことはどんどん忘れて行く。
だから、書いておこう。
> #データは向後先生のハンバーガーショップ統計学のデータを使わせていただきました。 > library(gdata) > dat <- read.xls("http://kogolab.jp/elearn/hamburger/chap6/anova2.xls")[1:20,2:4] URL 'http://kogolab.jp/elearn/hamburger/chap6/anova2.xls' を試しています Content type 'application/vnd.ms-excel' length 18432 bytes (18 Kb) 開かれた URL ================================================== downloaded 18 Kb > #郡内の偏差平方和(sum of squere)は > SS_gr1 <- rowSums((t(dat) - colMeans(dat))^2) > SS_gr1 <- sum(SS_gr1) > #全体の偏差平方和は > SS_all <- (dat - mean(t(dat)))^2 > SS_all <- sum(SS_all) > #群間の偏差平方和は > SS_gr2 <- nrow(dat)*(colMeans(dat) - mean(t(dat)))^2 > SS_gr2 <- sum(SS_gr2) > #全体の平方和 = 郡内平方和 + 群間平方和なので誤差範囲で一致する > SS_all - (SS_gr1 + SS_gr2) [1] -9.094947e-13 > #分散分析表は > mat <- matrix(NA,ncol=4,nrow=3,dimnames=list(c("群間","郡内","全体"),c("SS","df","MS","F"))) > mat[,"SS"] <- c(SS_gr2,SS_gr1,SS_all) > mat[,"df"] <- c(ncol(dat)-1,ncol(dat)*(nrow(dat)-1),ncol(dat)*nrow(dat)-1) > mat[1:2,"MS"] <- c(mat[1:2,"SS"]/mat[1:2,"df"]) > mat[1,"F"] <- mat[1,"MS"]/mat[2,"MS"] > as.table(mat) SS df MS F 群間 748.63333 2.00000 374.31667 12.22311 郡内 1745.55000 57.00000 30.62368 全体 2494.18333 59.00000