二要因の分散分析(SAB タイプ;RBFpq デザイン;被検者内計画)     Last modified: Jun 28, 2004

目的
二要因の分散分析(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 が表示されることがある


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh