ステップワイズ多次元尺度構成法もどき
【背景】
多変数の相関関係を効率的に可視化するため(古典的)多次元尺度構成法(MDS)をするときがある。因子分析などをする前に見てみたりするとよい場合も多い。
多変数の相関関係といったらこちらの記事も。
それぞれの変数の付置を見たとき,たとえば,ひとつだけ,すごく遠くに付置されている項目,これがなければどうなるだろうみたいな,ときって多い。(別にあんまかわんないけど,これ捨てたいみたいな)
いちいち項目をひとつ抜くとか,そういうのがメンドイときもある。
もっと効率的にやりたい。もっと図を見ながらインタラクティブにデータを見れたらよい。
【Rで書いちゃえ】
やっていることはすごく簡単なのよね。データを入れ抜きたい項目だけ指定できればいい。
なので関数書きました。
swmds<-function(dat,step="F",rmi){
if(step=="F"){
plot(cmdscale(dist(cor(dat))),type="n",xlab="", ylab="",main="All data")
text(cmdscale(dist(cor(dat))),rownames(cor(dat)),col="blue")
}else{
plot(cmdscale(dist(cor(dat[-c(rmi)]))),type="n",xlab="", ylab="",main=paste("Removing",paste(rmi,collapse=", ")))
text(cmdscale(dist(cor(dat[-c(rmi)]))),rownames(cor(dat[-c(rmi)])),col="blue")
}
}
これは,swmdsという名前の関数で最大で三つの項を取ります。
基本的には
swmds(データ, step="T", c(抜きたい項目))
データはデータフレーム形式です。
エクセルからコピーをして,
dat<-read.table("clipboard",header=T)
とでもやれば,datという箱にデータを入れられますね。
stepは,Tだと,項目を抜くことを意味します。
デフォルトは項目を抜かないので,
例えば,
swmds(dat)
とやると,全項目をもちいたMDSを描きます。
こんな感じ。
ここから,項目を指定して抜いていきたいなら,
swmds(dat, step=T, c(3,8,9,18,20,24,26,28))
step=Tとしてください(おまじない)。
c()の中に抜きたい項目の列数を入れます。
ここで3,8,9,18,20,24,26,28みたいに。
そうするとこうなります。
これだけです。
因子分析などの予備調査でやった項目の精選に使える?かも?はて?
データの上書き
できたら,抜いた項目を保存できたらいいよね。
まったく関数を作るまでもないけど,ちょっとメンドイっていう初心者ユーザのために。
rmv(dat, c(1,2,3,4))
というようにしたら,datというデータフレームから,1ー4行目の要素を抜いている。
これを
dat2<-rmv(dat,c(1,2,3,4))
というようにしたら上書きできるね。