蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

Jaccardの共通係数からRでクラスター分析

グループ間の類似度を表す係数に「Jaccardの共通係数」というのがある。

Jaccardの共通係数 = 相同のキャラクター数 / 総キャラクター数

これを元に樹形図を作成したいのだけど、以下でいいのだろうか。

元データは、対角線(同じグループ同士の比較)が1になっている、いわゆるsimilarity matrix。
これをタブ区切りテキストとして保存しておく。

> x<-read.table("sim.txt", header=T, row.names=1)
> x
  [,1] [,2] [,3] [,4]
[1,]  1.0  0.9  0.5  0.2
[2,]  0.9  1.0  0.7  0.3
[3,]  0.5  0.7  1.0  0.4
[4,]  0.2  0.3  0.4  1.0

これをdissimilarity matrixに変換したいので、全ての要素が1になっている行列から引き算する。

> i <- matrix(1,4,4)
> i
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    1    1    1
[3,]    1    1    1    1
[4,]    1    1    1    1
> d<-i-x
> d
     [,1] [,2] [,3] [,4]
[1,]  0.0  0.1  0.5  0.8
[2,]  0.1  0.0  0.3  0.7
[3,]  0.5  0.3  0.0  0.6
[4,]  0.8  0.7  0.6  0.0

これで対角線が0のmatrixに変換できた。
あとは、これでhclust関数を使って群平均法でクラスタリング。plotで表示する。

> hc<-hclust(as.dist(d),method="average")
> plot(hc)