対応分析 ca() の出力をデフォルトで出力しようとすると,カテゴリ数が多い集計表だと字が重なって何がなんだかわからなくなります。
# Rデフォの swiss データを使った描画 res.ca <- ca::ca(swiss) plot(res.ca)
これを解決するためにmaptools()が便利です。 ただし,ca 出力はそのままは入らないので,多少工夫が必要です。 そこで,そのまま放り込めばそれっぽい描画になる関数を作りました。
関数
なお,以下の関数は,{maptools} のインストールが前提です。
install.packages("maptools")
ca2maptools <- function(ca.res, CEXR = 1 ,CEXC = 3 , CEX = .7){ #座標情報抽出 xr <- summary(ca.res)$row[,c(" k=1"," k=2")] rownames(xr) <- ca.res$rownames xc <- summary(ca.res)$columns[,c(" k=1"," k=2")] rownames(xc) <- ca.res$colnames xrc <- 0.001*rbind(xr,xc) # 図示 # library(maptools) XLIM = c( min(xrc[,1]) - abs(0.1*min(xrc[,1])) , max(xrc[,1]) + abs(0.1*max(xrc[,1])) ) YLIM = c( min(xrc[,2]) - abs(0.1*min(xrc[,2])) , max(xrc[,2]) + abs(0.1*max(xrc[,2])) ) LOAD <- format(summary(ca.res)$scree[1:2,"values2"],digit=3) XLAB <- paste("Dimension 1 (", LOAD[1], "%)",sep="") YLAB <- paste("Dimension 2 (", LOAD[2], "%)",sep="") plot(0,0,type="n",xlim = XLIM, ylim = YLIM, xlab=XLAB ,ylab=YLAB) points(xrc ,cex=c( rep(CEXR, nrow(xr) ) , rep(CEXC, nrow(xc)) ) ,pch=c( rep(17,nrow(xr)) , rep(16, nrow(xc)) ) ,col=c( rep( "orange3",nrow(xr)) , rep( "lightcyan2" , nrow(xc) ) ) ) maptools::pointLabel(xrc,rownames(xrc),cex=CEX) }
冒頭と同様のデータを使った描画例
res.ca <- ca::ca(swiss) ca2maptools(res.ca)