日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

要因分散分析の再確認

分散分析表は手計算する時代じゃないと思っていました。
でも年をとると、手計算で覚えなかったことはどんどん忘れて行く。
だから、書いておこう。

> #データは向後先生のハンバーガーショップ統計学のデータを使わせていただきました。
> 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