と呼ばれるRパッケージを使用して階層的クラスタリングを行っています。これは、ブートストラップを組み込んで、取得したクラスターの有意水準を計算することpvclust
で構築されています。hclust
3次元と10個の観測値を持つ次のデータセットについて考えてみます。
mat <- as.matrix(data.frame("A"=c(9000,2,238),"B"=c(10000,6,224),"C"=c(1001,3,259),
"D"=c(9580,94,51),"E"=c(9328,5,248),"F"=c(10000,100,50),
"G"=c(1020,2,240),"H"=c(1012,3,260),"I"=c(1012,3,260),
"J"=c(984,98,49)))
単独で使用する場合hclust
、クラスタリングはユークリッド測度と相関測度の両方で正常に実行されます。
# euclidean-based distance
dist1 <- dist(t(mat),method="euclidean")
mat.cl1 <- hclust(dist1,method="average")
# correlation-based distance
dist2 <- as.dist(1 - cor(mat))
mat.cl2 <- hclust(dist2, method="average")
ただし、で設定されたそれぞれを使用する場合はpvclust
、次のようになります。
library(pvclust)
# euclidean-based distance
mat.pcl1 <- pvclust(mat, method.hclust="average", method.dist="euclidean", nboot=1000)
# correlation-based distance
mat.pcl2 <- pvclust(mat, method.hclust="average", method.dist="correlation", nboot=1000)
...次のエラーが発生します。
- ユークリッド:
Error in hclust(distance, method = method.hclust) : must have n >= 2 objects to cluster
- 相関関係:
Error in cor(x, method = "pearson", use = use.cor) : supply both 'x' and 'y' or a matrix-like 'x'
。
なお、距離はによって計算されるpvclust
ため、事前に距離を計算する必要はありません。hclust
また、方法(平均、中央値など)は問題に影響を与えないことに注意してください。
データセットの次元を4に増やすと、正常にpvclust
実行されるようになりました。pvclust
3次元以下でこれらのエラーが発生するのに、発生しないのはhclust
なぜですか?さらに、4次元を超えるデータセットを使用すると、エラーが消えるのはなぜですか?