#freeze [[Rの備忘録]] ftable()とは,こんな関数. x <- rep(c("A","B"), 3) x [1] "A" "B" "A" "B" "A" "B" y <- rep(c("a","b"), 3) y [1] "a" "b" "a" "b" "a" "b" z <- rep(c("z","w"), 3) z [1] "z" "w" "z" "w" "z" "w" zz <- rep(c("aa","bb","cc"), 2) zz [1] "aa" "bb" "cc" "aa" "bb" "cc" ftable(xtabs(~ x + y + z+ zz)) zz aa bb cc x y z A a w 0 0 0 z 1 1 1 b w 0 0 0 z 0 0 0 B a w 0 0 0 z 0 0 0 b w 1 1 1 z 0 0 0 str(ftable(xtabs(~ x + y + z+ zz))) ftable [1:8, 1:3] 0 1 0 0 0 0 1 0 0 1 ... - attr(*, "row.vars")=List of 3 ..$ x: chr [1:2] "A" "B" ..$ y: chr [1:2] "a" "b" ..$ z: chr [1:2] "w" "z" - attr(*, "col.vars")=List of 1 ..$ zz: chr [1:3] "aa" "bb" "cc" 勘違い.ftable の結果も,ちゃんと関数 corresp() の引数になります. dat.t1 <-ftable(xtabs(~ E1W2 + Sex + Q1A3 + gobi, data = dat)) str(dat.t1) ## # 行と列に名前をつけて dimnames(dat.t1) <- list(c("EM1", "EM2", ""WF4", "WF5" ), levels(dat$gobi) ) # 反応の無い行を除く dat.t2 <- dat.t1[rowSums(dat.t1) != 0, ] dat.corr <- corresp(dat.t2, nf = min(nrow(dat.t2), ncol(dat.t2) )) biplot(dat.corr,cex = c(1.2, 0.8)) よって以下は勘違い ftable は,一部の関数(例えば''MASS''ライブラリの対応分析,すなわちコレスポンデンス分析用の関数 corresp() の入力にならない.そこで,強引に変換したが,もっとスマートな方法があるのではないか? # フラットな表形式に変換 dat.t1 <-ftable(xtabs(cbind(Q1A1, Q2A1, Q3A1, Q4A1) ~ E1W2 + factor(dat$Age) + Sex, data = dat)) # 構造を見るとクラスは ftable クラスなので # このままではcorrespのインプットには使えない. str(dat.t1$Age) # そこでクラス属性を「行列」に替え class(dat.t1) <- "matrix" # 行や列のカテゴリをリセットする attr(dat.t1, "row.vars") <- NULL attr(dat.t1, "col.vars") <- NULL dat.t1 # 行と列に名前をつけて dimnames(dat.t1) <- list(c("E10M", "E10F", "E20M", "E20F", "W10M", "W10F", "W20M", "W20F"), c("Q1A1", "Q2A1", "Q3A1", "Q4A1")) ## コレスポンデンス分析を実行 library(MASS) dat.corr <- corresp(dat.t1, nf = min(nrow(dat.mat), ncol(dat.mat))) biplot(dat.corr) dev.copy2eps(file = "nihongo.eps")