目的二要因の分散分析(SAB タイプ;RBFpq デザイン;被検者内計画)を行う。
使用法 SAB(data) 引数 data 3次元配列のデータ(使用例を参照のこと) ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/SAB.R", encoding="euc-jp") # 二要因の分散分析(SAB タイプ;RBFpq デザイン;被検者内計画)を行う SAB <- function(data) # 3次元配列のデータ { N <- dim(data)[3] # サンプルサイズ Na <- dim(data)[2] # 要因 A の水準数 Nb <- dim(data)[1] # 要因 B の水準数 Xbar <- as.numeric(apply(data, 1:2, mean)) # 水準の組み合わせごとの平均値 SD <- as.numeric(apply(data, 1:2, sd)) *sqrt((N-1)/N) # 水準の組み合わせごとの標準偏差 v1 <- mean(data) # 全体の平均値 v2 <- sum((apply(data, 2, mean)-v1)^2)*Nb*N # 要因 A の水準による変動(A) v3 <- sum((apply(data, 1, mean)-v1)^2)*Na*N # 要因 B の水準による変動(B) v4 <- sum((apply(data, 1:2, mean)-v1)^2)*N # 要因の水準の組み合わせによる変動 v4.2 <- v4-v2-v3 # 要因 A, B の交互作用による変動(AxB) v5 <- sum(SD^2)*N # 偶然誤差 v6 <- sum(data)^2/(N*Na*Nb) # 修正項 v6.2 <- sum(apply(data, 3, sum)^2)/(Na*Nb)-v6 # 個人差による変動(S) v7 <- sum(apply(data, 2:3, sum)^2)/Nb-v6-v6.2-v2 # 要因 A の誤差変動(SxA) v8 <- sum(apply(data, c(1, 3), sum)^2)/Na-v6-v6.2-v3 # 要因 B の誤差変動(SxB) v9 <- v5-v6.2-v7-v8 # 交互作用による変動 SS <- c(v6.2, v2, v7, v3, v8, v4.2, v9) dfs <- N-1 dfa <- Na-1 dfb <- Nb-1 df <- c(dfs, dfa, dfs*dfa, dfb, dfs*dfb, dfa*dfb, dfs*dfa*dfb) MS <- SS/df P <- F <- rep(NA, 7) F[c(2, 4, 6)] <- MS[c(2, 4, 6)]/MS[c(3, 5, 7)] P[c(2, 4, 6)] <- pf(F[c(2, 4, 6)], df[c(2, 4, 6)], df[c(3, 5, 7)], lower.tail=FALSE) result <- data.frame(SS=SS, df=df, MS=MS, F=F, P=P) colnames(result) <- c("SS", "d.f.", "MS", "F value", "P value") rownames(result) <- c("S", "A", "SxA", "B", "SxB", "AxB", "SxAxB") 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) } 使用例 SABタイプ(被検者内計画)のデータが以下のようにまとめられているとする。 要因 A は 3 水準,要因 B は 4 水準をもち,各被験者は要因 A と要因 B のすべての水準の組み合わせ(例では 3 × 4 = 12 通り)についてデータを採取される。 ------------------------------------- ---------------------------- ---------------------------- A1 A2 A3 --------------------------- ---------------------------- ---------------------------- B1 B2 B3 B4 B1 B2 B3 B4 B1 B2 B3 B4 ------------------------------------- ---------------------------- ---------------------------- 被検者1 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 被検者2 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 被検者3 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 被検者4 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 被検者5 x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 被検者6 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70 x71 x72 被検者7 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84 被検者8 x85 x86 x87 x88 x89 x90 x91 x92 x93 x94 x95 x96 ------------------------------------- ---------------------------- ---------------------------- 以上のようなデータを,R の配列として以下のように付値する。 配列名を data とすると data <- array(c(x1, x2, x3, ..., x96), dim=c(4, 3, 8)) dim=c(4, 3, 8) の3つの数値は順に,要因 B の水準数,要因 A の水準数,被験者数。 出力結果例 # 田中敏,山際勇一郎「教育・心理統計と実験計画法」教育出版,P. 122 の例 > data <- array(c(4, 3, 6, 3, 5, 5, 4, 4, 6, 4, 6, 4, 5, 4, 4, 3, 7, 4), dim=c(3, 2, 3)) > SAB(data) SS df MS F value P value S 0.33333333 2 0.16666667 # 個人差 (S) A 0.05555556 1 0.05555556 1.00000 0.42265 # 要因 A SxA 0.11111111 2 0.05555556 # 交互作用 SxA B 4.00000000 2 2.00000000 1.71429 0.28994 # 要因 B SxB 4.66666667 4 1.16666667 # 交互作用 SxB AxB 11.11111111 2 5.55555556 10.00000 0.02778 # 交互作用 AxB SxAxB 2.22222222 4 0.55555556 # 交互作用 SxAxB # print.anova.table 関数がないときには空白欄に NA が表示されることがある