目的 乱塊法を行う 使用法 randblk(dat) print.randblk(obj, digits=5) 引数 dat 処理と繰り返しの行列データ obj randblk 関数が返すオブジェクト digits 表示桁数 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/randblk.R", encoding="euc-jp") # 乱塊法 randblk <- function(dat) # データ行列 { dat <- as.matrix(dat) dat <- subset(dat, complete.cases(dat)) # 欠損値を持つケースを除く nr <- nrow(dat) # ケース数 nc <- ncol(dat) # 変数の個数(処理・条件の個数) gmean <- mean(dat) # 全平均値 tmean <- colMeans(dat) # 処理・条件ごとの平均値 rmean <- rowMeans(dat) # 繰り返しの平均値 SSt <- sum((dat-gmean)^2) SSc <- nr*sum((tmean-gmean)^2) SSr <- nc*sum((rmean-gmean)^2) SSe <- SSt-SSr-SSc SS <- c(SSc, SSr, SSe, SSt) dfc <- nc-1 dfr <- nr-1 dfe <- dfc*dfr dft <- nc*nr-1 df <- c(dfc, dfr, dfe, dft) MS <- SS/df Fs <- MS/MS[3] Ps <- pf(Fs, df, dfe, lower.tail=FALSE) Fs[3:4] <- Ps[3:4] <- NA result <- cbind(SS, df, MS, Fs, Ps) rownames(result) <- c("Treatment", "Replication", "Residual", "Total") colnames(result) <- c("SS", "d.f.", "MS", "F value", "P value") return(structure(list(result=result), class="randblk")) } # print メソッド 分散分析表を表示 print.randblk <- function( obj, # randblk 関数が返すオブジェクト digits=5) # 表示桁数 { print(obj$result, na.print="", digits=digits) } 使用例 > dat <- matrix(c( # 処理が 4 種,繰り返しが 3 のデータ + 9, 17, 12, 16, + 1, 21, 16, 11, + 7, 19, 6, 9 + ), byrow=TRUE, ncol=4) > (a <- randblk(dat)) SS d.f. MS F value P value Treatment 268.667 3 89.556 5.49233 0.037192 Replication 21.500 2 10.750 0.65928 0.551030 Residual 97.833 6 16.306 Total 388.000 11 35.273 解説ページ