3

データセットで見つかったクラスターのズームについて質問があります。指定された数のクラスターが返されるのと同じ数の新しいマトリックスを作成したいと考えています。具体的には、データに戻って関心のある部分母集団を取り出す方法がわかりません。私はできることを知っています:

mycl <- cutree(hr, 2);

しかし、その後は?

これが私がこれまでに持っているものです[完全なコード]:

行列 'm' があるとします。相関行列の行 'hr' と列 'hc' の距離によってクラスタ化します。

m = matrix(0, 10, 5, dimnames = list(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), c(1, 2, 3, 4, 5)))
m[1,] = c(0,0,0,0,1)
m[2,] = c(0,0,0,1,1)
m[3,] = c(0,0,1,1,1)
m[4,] = c(0,0,1,1,0)
m[5,] = c(1,0,0,0,0)
m[6,] = c(1,1,1,0,0)
m[7,] = c(0,1,1,0,0)
m[8,] = c(0,1,1,0,0)
m[9,] = c(0,1,1,1,0)
m[10,] = c(1,1,1,0,1)
# Generates row and column dendrograms.
hr <- hclust(as.dist(1-cor(t(m), method="pearson")), method="ward"); 
hc <- hclust(as.dist(1-cor(m, method="spearman")), method="ward")

これで、データのヒートマップを作成できます。

library(gplots)
mycl <- cutree(hr, 2); 
mycolhc <- rainbow(length(unique(mycl)), start=0.1, end=0.9); 
mycolhc <- mycolhc[as.vector(mycl)]
myheatcol <- redgreen(75)

# Creates heatmap for entire data set
heatmap.2(
           m, 
           Rowv=as.dendrogram(hr), 
           Colv=as.dendrogram(hc), 
           col=myheatcol, 
           scale="row", 
           density.info="none", 
           trace="none", 
           RowSideColors=mycolhc, 
           cexCol=0.6, 
           labRow=NA
           )

クラスタリングを使用したカスタム トイ マトリックスのヒートマップ

4

1 に答える 1

2

次の 2 つのことが思い浮かびます。

解決策 1:

# Convert to a dendrogram object
hor.dendro <- as.dendrogram(hr)
# Get values for the first branch
m.1 <- m[unlist(hor.dendro[[1]]),]

解決策 2:

# Cut the tree in 2
tree.cut <- cutree(hr, 2)
# Get the ids for cluster #1
clust.1 <- which(tree.cut==1)
# Get the values from m
m.1 <- m[clust.1,]

より一般化された方法では、*apply関数の 1 つを使用することができます。

例えば:

clusters <- lapply(unique(tree.cut), function(grp)
       {
       m[which(tree.cut==grp),]
       })

cutreeこれで戻る( 2グループで呼び出し)

[[1]]
  1 2 3 4 5
A 0 0 0 0 1
B 0 0 0 1 1
C 0 0 1 1 1
D 0 0 1 1 0
I 0 1 1 1 0

[[2]]
  1 2 3 4 5
E 1 0 0 0 0
F 1 1 1 0 0
G 0 1 1 0 0
H 0 1 1 0 0
J 1 1 1 0 1

[[ ]]次のような演算子を使用して結果にアクセスできますclusters[[2]]。2 番目のクラスターを取得します。

于 2013-11-02T07:29:43.230 に答える