R_lsa のバックアップソース(No.1) - アールメカブ

アールメカブ


R_lsa のバックアップソース(No.1)

[[Rの備忘録]]

豊田秀樹編『データマイニング入門』第9章 p.277のバイプロット
以下でほぼ同じグラフができるでしょう.


 >(TD <- matrix(c(0, 0, 2, 0,
               1, 0, 0, 0,
               0, 1, 0, 0,
               1, 0, 0, 0,
               1, 1, 1, 0,
               1, 1, 1, 0,
               1, 0, 0, 1,
               0, 0, 1, 1,
               0, 0, 0, 1,
               0, 0, 0, 1,
               0, 0, 0, 1), ncol = 4, byrow = TRUE))

 > colnames(TD) <- c("病院","医院","クリニック","少年")
 > rownames(TD) <- c("医師","医療","病気","患者","診察",
                  "治療","収容","施設","矯正","送致","裁判")
 > TD.svd <- svd(TD)
 > TD.svd$u
 > TD2 <- TD.svd$u[, 1:2] %*%  diag(TD.svd$d[1:2]) %*%  
                    t(TD.svd$v[,1:2] )
 > # 本当は min() と max() を使って調整すべき
 > plot(c(-2.8, .6), c(-0.6, 3.2), type = "n")
 > text(TD.svd$u[, 1:2]%*% diag(TD.svd$d[1:2]), rownames(TD))
 > text( t( diag(TD.svd$d[1:2]) %*% t(TD.svd$v[, 1:2])) ,  
          colnames(TD2) )
 > # # # # # lsa パッケージを使うなら
 > TD2 <- lsa(TD)
 > plot(c(-2.8, .6), c(-0.6, 3.2), type = "n")
 > text(TD2$tk %*% diag(TD2$sk), rownames(TD2$tk) )
 > text( t(diag(TD2$sk) %*% t(TD2$dk)) , rownames(TD2$dk) )