私はクラスタの問題を抱えており、Rのproxy
パッケージはdistとsimilの両方の機能を提供しています。クラスタリングのためにRの距離(非類似性)または類似点を使用する必要がありますか?
は私の目的のために私は距離行列を必要とするので、私は最初にdistのを使用し、ここでのコードです:
distanceMatrix <- dist(dfm[,-1], method='Pearson')
clusters <- hclust(distanceMatrix)
clusters$labels <- dfm[,1]#colnames(dfm)[-1]
plot(clusters, labels=clusters$labels)
しかし、私は画像をplotedた後、私は、クラスタの結果は、私はそれをexpecte方法がないことがわかりました私はそれがどのように見えるべきかを知っているからです。
だから代わりsimil試みたが、コードは次のようである:
distanceMatrix <- simil(dfm[,-1], method='Pearson')
clusters <- hclust(pr_simil2dist(distanceMatrix))
clusters$labels <- dfm[,1]#colnames(dfm)[-1]
plot(clusters, labels=clusters$labels)
このコードは、私がsimilを使用して類似性行列を計算し、その後、私はそれをプロットし、pr_simil2distを使用して行列を距離に変換し、結果を得ます期待!
私はdistとsimilの関係について混乱しています。ドキュメントに記載されている関係によれば、2つのコードスニペットで同じ結果が得られるはずはありませんか?
どこが間違っていますか?
編集:
あなたが悪いインデントのために申し訳ありませんが、次の値のDFMで自分のコードを試すことができます。
Blog china kids music yahoo want wrong
Gawker 0 1 0 0 7 0
Read/WriteWeb 2 0 1 3 1 1
WWdN: In Exile 0 2 4 0 0 0
ProBlogger Blog Tips 0 0 0 0 2 0
Seth's Blog 0 0 1 0 3 1
The Huffington Post | Raw Feed 0 6 0 0 14 5
編集:
実際にサンプルデータがtail
を使用して非常に大きなデータフレームから取られた、と私はDISTとsimil + pr_simil2distを使用して完全に異なる行列を取得しています。完全なデータは、私は他の愚かなミスを犯した場合にはhere.
を見つけたことができ、ここで私の関数の完全なコードは次のとおりです。
私がデータを読み込むために使用するコード:
dfm<- read.table(filename, header=T, sep='\t', quote='')
コードクラスタリングのために:
hcluster <- function(dfm, distance='Pearson'){
dfm <- tail(dfm)[,c(1:7)] # I use this to give the sample data.
distanceMatrix <- simil(dfm[,-1], method=pearson)
clusters <- hclust(pr_simil2dist(distanceMatrix))
clusters$labels <- dfm[,1]#colnames(dfm)[-1]
plot(clusters, labels=clusters$labels)
}
distのを使用してマトリックス:
94 95 96 97 98
95 -0.2531580
96 -0.2556859 -0.4629100
97 0.9897783 -0.1581139 -0.2927700
98 0.8742800 -0.2760788 -0.1022397 0.9079594
99 0.9114339 -0.5020405 -0.2810414 0.8713293 0.8096980
simil + pr_simil2distを使用して
マトリックス:
94 95 96 97 98
95 1.25315802
96 1.25568595 1.46291005
97 0.01022173 1.15811388 1.29277002
98 0.12572004 1.27607882 1.10223973 0.09204062
99 0.08856608 1.50204055 1.28104139 0.12867065 0.19030202
次の2つの行列の対応する要素は、私は適切ではないと思われ、1まで追加することを確認することができます。だから私が間違っていることがなければなりません。
編集:私は、データフレームを読み込むためにread.tableを関数内で名前を指定した後
、distの道とsimil + pr_simil2dist方法は、同じ正しい結果を与えます。 技術的に問題が解決しましたしかし、なぜデータフレームを扱う私の元の方法がdistとsimilと関係があるのかわかりません。
いずれにも手掛かりがありますか?
あなたのコード正確ではありません再現性がある。私たちのマシンで実行できる簡単な例を与えるために気をつけますか? –