2012-01-19 9 views
3

私は階層的クラスタリングを実行するためにRを使用しています。私はhclustを使用し、以下のステップを実行最初のアプローチとして:事前計算されたdistオブジェクトにpvclust R関数を適用する

  1. Iは、距離行列
  2. をインポート私はdistオブジェクト上hclustを実行distオブジェクト
  3. にそれを変換するas.dist関数を使用
  4. distm <- read.csv("distMatrix.csv") 
    d <- as.dist(distm) 
    hclust(d, "ward") 
    
    :ここ

はRコードです

この時点で、私は関数pvclustと同様のことをしたいと思います。ただし、あらかじめ計算されたdistオブジェクトを渡すことはできないため、私はできません。 Rのdistによって提供される距離の中で利用できない距離を使用していると考えると、どうすればよいですか?

答えて

1

距離行列のみを持っているのか、あらかじめ計算しているのかは分かりません。前者の場合、既に@Vincentで提案されているように、pvclustのRコードを微調整するのは難しくありません(fix()などを使用して、another question on CrossValidatedのヒントをいくつか提供しました)。後者の場合、pvclustの著者は、カスタム距離関数の使用方法についてexampleを提供しています。ただし、「非公式バージョン」をインストールする必要があります。

+0

私は非公式のバージョンを見てきましたが、使用しないことをお勧めします。 。私はpvclust関数の著者に連絡しました。これは彼の答えです:pvclustはブートストラップベースのアルゴリズムを使用しているので、事前計算されたdistを使用して オブジェクトは原則不可能です。私は助けになることができないのですが、すみません。 – rlar

2

データセットが大きすぎない場合は、距離行列が同じ次元n-1の空間にn点を埋め込むことができます。

# Sample distance matrix 
n <- 100 
k <- 1000 
d <- dist(matrix(rnorm(k*n), nc=k), method="manhattan") 

# Recover some coordinates that give the same distance matrix 
x <- cmdscale(d, n-1) 
stopifnot(sum(abs(dist(x) - d)) < 1e-6) 

# You can then indifferently use x or d 
r1 <- hclust(d) 
r2 <- hclust(dist(x)) # identical to r1 
library(pvclust) 
r3 <- pvclust(x) 

データセットが大きい場合は、pvclustが実装されているか確認する必要があります。

+0

振り返ってみると(つまり、自分自身を答えた後に)、私は本当にOPを信じて距離行列を 'pvclust'に渡したいのに対し、' pvclust'はdata.frameやmatrixオブジェクトを期待しています。 – chl

+0

pvclust(x) –

3

私は(私のデータセットが非類似度行列である)あなたが次の操作を行うことができ、ヴィンセントの提案をテストしてみた:

# Import you data 
distm <- read.csv("distMatrix.csv") 
d <- as.dist(distm) 

# Compute the eigenvalues 
x <- cmdscale(d,1,eig=T) 

# Plot the eigenvalues and choose the correct number of dimensions (eigenvalues close to 0) 
plot(x$eig, 
    type="h", lwd=5, las=1, 
    xlab="Number of dimensions", 
    ylab="Eigenvalues") 

# Recover the coordinates that give the same distance matrix with the correct number of dimensions  
x <- cmdscale(d,nb_dimensions) 

# As mentioned by Stéphane, pvclust() clusters columns 
pvclust(t(x)) 
関連する問題