R_ftableの属性 のバックアップの現在との差分(No.20) - アールメカブ

アールメカブ


R_ftableの属性 のバックアップの現在との差分(No.20)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#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")