目的二要因の分散分析(ASB タイプ;SPFp・q デザイン;混合計画)を行う。
使用法 ASB(data) 引数 data 3次元配列のデータ(使用例を参照のこと) ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/ASB.R", encoding="euc-jp") # 二要因の分散分析(ASB タイプ;SPFp・q デザイン;混合計画) ASB <- function(data) # 3次元配列のデータ { # 次元は,被験者,要因B,要因A の順 n <- dim(data)[1] # 水準の組み合わせでの被験者数 nm1 <- n-1 Nb <- dim(data)[2] # 要因 B の水準の数 Na <- dim(data)[3] # 要因 A の水準の数 grand.mean <- mean(data) # 全体の平均 e.a <- sum((apply(data, 3, mean)-grand.mean)^2)*Nb*n # 要因A diff.obj <- sum((apply(data, c(1, 3), mean)-grand.mean)^2)*Nb-e.a # 個人差(S) e.b <- sum((apply(data, 2, mean)-grand.mean)^2)*Na*n # 要因B cross <- sum((apply(data, c(3, 2), mean)-grand.mean)^2)*n-e.a-e.b # 交互作用 A x S err <- sum(apply(data, c(3, 2), var)*nm1)-diff.obj # 交互作用 S x B SS <- c(e.a, diff.obj, e.b, cross, err) # 平方和 dfa <- Na-1 dfb <- Nb-1 df <- c(dfa, Na*nm1, dfb, dfa*dfb, Na*nm1*dfb) # 自由度 MS <- SS/df # 平均平方 f <- p <- rep(NA, 5) f[c(1, 3, 4)] <- MS[c(1, 3, 4)]/MS[c(2, 5, 5)] # F 値 p[c(1, 3, 4)] <- pf(f[c(1, 3, 4)], df[c(1, 3, 4)], df[c(2, 5, 5)], # P 値 lower.tail=FALSE) result <- data.frame(SS, df, MS, f, p) colnames(result) <- c("SS", "d.f.", "MS", "F value", "P value") rownames(result) <- c("Factor A", "S", "Factor B", "AxS", "SxB") class(result) <- c("anova.table", "data.frame") return(result) } インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/print.anova.table.R", encoding="euc-jp") # ANOVA 表のプリント・メソッド(SAB, ASB 関数が返すオブジェクトを表示する) print.anova.table <- function(x) { printf <- function(x, fmt) if (is.na(x)) "" else sprintf(fmt, x) x[,4] <- sapply(x[,4], printf, "%.5f") x[,5] <- sapply(x[,5], printf, "%.5f") print.data.frame(x) } 使用例 ASBタイプ(混合計画)のデータが以下のようにまとめられているとする。 要因 A は 3 水準,要因 B は 4 水準をもち,要因A の水準ごとに別の被検者が用意され,各被験者は要因 B についてはすべての水準についてデータを採取される。 要因 A の水準 1 について 要因 B 水準1 水準2 水準3 水準4 被検者1 x1 x6 x11 x16 被検者2 x2 x7 x12 x17 被検者3 x3 x8 x13 x18 被検者4 x4 x9 x14 x19 被検者5 x5 x10 x15 x20 要因 A の水準 2 について 要因 B 水準1 水準2 水準3 水準4 被検者6 x21 x26 x31 x36 被検者7 x22 x27 x32 x37 被検者8 x23 x28 x33 x38 被検者9 x24 x29 x34 x39 被検者10 x25 x30 x35 x40 要因 A の水準 3 について 要因 B 水準1 水準2 水準3 水準4 被検者11 x41 x46 x51 x56 被検者12 x42 x47 x52 x57 被検者13 x43 x48 x53 x58 被検者14 x44 x49 x54 x59 被検者15 x45 x50 x55 x60 以上のようなデータを,R の配列として以下のように付値する。 配列名を data とすると data <- array(c(x1, x2, x3, ..., x60), dim=c(5, 4, 3)) dim=c(5, 4, 3) の3つの数値は順に,要因 A の各水準ごとの被験者数(全被験者数/要因 A の水準数),要因 B の水準数,要因 A の水準数。 出力結果例 # 田中敏,山際勇一郎「教育・心理統計と実験計画法」教育出版,P. 128 の例 > data <- array(c(4, 4, 5, 3, 4, 4, 6, 6, 4, 3, 4, 3, 5, 6, 7, 5, 4, 4), dim=c(3, 3, 2)) > ASB(data) SS d.f. MS F value P value Factor A 0.05555556 1 0.05555556 0.50000 0.51852 # 要因 A S 0.44444444 4 0.11111111 # 個人差 (S) Factor B 4.00000000 2 2.00000000 2.32258 0.16020 # 要因 B AxS 11.11111111 2 5.55555556 6.45161 0.02145 # 交互作用 AxS SxB 6.88888889 8 0.86111111 # 交互作用 SxB # print.anova.table 関数がないときには空白欄に NA が表示されることがある