2013-11-01 16 views
5

hirearchical clustering(具体的にはhclust)を使用して、100個以下のサイズを持つ10個のグループにデータセットをクラスタリングし、40個を超えるグループを持たない総人口の%。私が現在知っている唯一の方法は、cut()を繰り返し使用し、カットの分散に満足するまで、連続的に低いレベルを選択することです。しかし、これは私に戻って、100グループにまとめるために整理したグループを再クラスタリングしなければならず、非常に時間がかかることがあります。最小クラスタサイズのn個のツリーに樹木図をカットするR

私はdynamicTreeCutパッケージを試しましたが、これらの(比較的単純な)制限を入力する方法を理解することはできません。私はグループ化の数を指定する方法としてdeepSplitを使用していますが、ドキュメントに従って、これは最大数を4に制限します。以下の演習では、クラスターを3つの5つのグループ(私は自分自身で最大のサイズ制限に対処することができますが、これにも対処しようとするなら、それは役に立つでしょう!)。

私の例は、Orangeデータセットを使用しています。

library(dynamicTreeCut) 
library(reshape2) 

##creating 14 individuals from Orange's original 5 
Orange1<-Orange 
Orange1$Tree<-as.numeric(as.character(Orange1$Tree)) 
Orange2<-Orange1 
Orange3<-Orange1 
Orange2$Tree=Orange2$Tree+6 
Orange3$Tree=Orange3$Tree+11 
combOr<-rbind(Orange1, Orange2[1:28,], Orange3) 


####casting the data to make a correlation matrix, and then running 
#### a hierarchical cluster 
castOrange<-dcast(combOr, age~Tree, mean, fill=0) 
castOrange[,16]<-c(1,34,5,35,34,35,21) 
castOrange[,17]<-c(1,34,5,35,34,35,21) 
orangeCorr<-cor(castOrange[, -1]) 
orangeClust<-hclust(dist(orangeCorr)) 

###running the dynamic tree cut 
dynamicCut<-cutreeDynamic(orangeClust, minClusterSize=3, method="tree", deepSplit=4) 

dynamicCut 
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 

ご覧のとおり、2つのクラスタのみを指定します。私の練習では、代わりに木の数をkにしたいので、明示的な高さの用語を使って木を切ることを躊躇したい。最も適切な相違測度(例えば、"euclidean""maximum""manhattan""canberra""binary"、又は"minkowski")とつなぎ法(例えば、"ward""single""complete""average""mcquitty""median"アウト

+0

これは古い投稿ですが、0は「クラスタ化されていない」ことを意味し、「#0クラスタ」は意味しません。この例では、クラスタは1つだけです。 –

答えて

7

1-図、または"centroid")、データの性質とクラスタリングの目的に基づいています。詳細については、?distおよび?hclustを参照してください。

2-切断工程を開始する前に樹状図をプロットします。詳細は、?hclustを参照してください。

3-使用ハイブリッド適応ツリーカットdynamicTreeCutパッケージにおける方法、及び曲形状パラメータ(maxCoreScatter及びminGap/maxAbsCoreScatterminAbsGap)。 Langfelder et al。 2009(http://labs.genetics.ucla.edu/horvath/CoexpressionNetwork/BranchCutting/Supplement.pdf)。あなた例えば


1-変更適切な及び/又は"complete"方法"euclidean"

orangeClust <- hclust(dist(orangeCorr, method="euclidean"), method="complete") 

2-プロット系統樹、

plot(orangeClust) 

3-使用ハイブリッドツリーカット方法および形状パラメータの調整

形状パラメータをチューニングするためのガイドとして
dynamicCut <- cutreeDynamic(orangeClust, minClusterSize=3, method="hybrid", distM=as.matrix(dist(orangeCorr, method="euclidean")), deepSplit=4, maxCoreScatter=NULL, minGap=NULL, maxAbsCoreScatter=NULL, minAbsGap=NULL) 
dynamicCut 
..cutHeight not given, setting it to 1.8 ===> 99% of the (truncated) height range in dendro. 
..done. 
2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 

、デフォルト値は、あなたが見ることができるように、maxCoreScatterminGap両方が01の間で、及び(減少maxCoreScatterを増やす必要があります

deepSplit=0: maxCoreScatter = 0.64 & minGap = (1 - maxCoreScatter) * 3/4 
deepSplit=1: maxCoreScatter = 0.73 & minGap = (1 - maxCoreScatter) * 3/4 
deepSplit=2: maxCoreScatter = 0.82 & minGap = (1 - maxCoreScatter) * 3/4 
deepSplit=3: maxCoreScatter = 0.91 & minGap = (1 - maxCoreScatter) * 3/4 
deepSplit=4: maxCoreScatter = 0.95 & minGap = (1 - maxCoreScatter) * 3/4 

ですminGap)クラスタの数が増えます(サイズが小さくなります)。これらのパラメータの意味は、Langfelder et al。 2009年

例えば、より小さなクラスタ最後に

maxCoreScatter <- 0.99 
minGap <- (1 - maxCoreScatter) * 3/4 
dynamicCut <- cutreeDynamic(orangeClust, minClusterSize=3, method="hybrid", distM=as.matrix(dist(orangeCorr, method="euclidean")), deepSplit=4, maxCoreScatter=maxCoreScatter, minGap=minGap, maxAbsCoreScatter=NULL, minAbsGap=NULL) 
dynamicCut 
..cutHeight not given, setting it to 1.8 ===> 99% of the (truncated) height range in dendro. 
..done. 
2 3 2 2 2 3 3 2 2 3 3 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 0 0 

を得るために、あなたのクラスタリングの制約(サイズ、高さ、数、...等)が合理的と解釈すべきであり、生成されましたクラスタはデータに同意すべきである。これは、クラスタリングの検証と解釈の重要なステップに導きます。


Good Luck!