0

Matlab では、dendrogram関数の一部としてプロットする樹状図のノード数を指定できますdendrogram(tree,P)。P リーフ ノード以下の樹状図プロットを生成します。

Rで同じことをしようとした私の試みは、heatmap2惨めに失敗しました。stackoverflow と biostars への投稿では、使用cutreeが提案されていますが、オプションheatmap2に関する投稿の提案に固執していRowvます。ここで、"TAD" は 8 列 x 831 行のデータ マトリックスです。

# cluster it
hr <- hclust(dist(TAD, method="manhattan"), method="average")

# draw the heat map
heatmap.2(TAD, main="Hierarchical Cluster",
          Rowv=as.dendrogram(cutree(hr, k=5)),
          Colv=NA, dendrogram="row", col=my_palette, density.info="none", trace="none")

次のメッセージを返します。

Error in UseMethod("as.dendrogram") : 
  no applicable method for 'as.dendrogram' applied to an object of class "c('integer', 'numeric')"

cutree制限されたデンドログラムをプロットするために探索する正しい道を使用していますか? これをmatlabに似た簡単な方法はありますか?

4

2 に答える 2

0

いくつかのデータを明確にして提供するために...行を削除したくありません。831 の分岐をプロット/解釈する代わりに、3 つの分岐を解釈したいので、行デンドログラムを 3 つの分岐 (高さ 150) に制限し、831 行すべての対応するヒートマップを 3 つの上位分岐にクラスター化します。オリジナルのデンドログラム。

#Here is a random n=10 subset of my data; which for 10 observed fish has the %of time each spent within     
#a depth bin (Bin1-Bin8)

zz <- "ID Bin1 Bin2 Bin3 Bin4 Bin5 Bin6 Bin7 Bin8
1    0    0    0    0    0  0.0   0.0 100.0
2    0    0    0    0    0  0.0   0.0 100.0
3    0    0    0    0    0  0.0   0.0 100.0
4    0    0    0    0    0 70.8  29.2   0.0
5    0    0    0  100    0  0.0   0.0   0.0
6    0    0    0    0    0  0.0  93.3   6.7
7    0    0    0    0    0 27.5  72.5   0.0
8    0    0    0    0    0 53.5  46.5   0.0
9    0    0    0    0    0  0.0 100.0   0.0
10    0    0    0    0    0  0.0  72.1  27.9 "

TAD <- read.table(text=zz, header = TRUE)
IDnames <- TAD[,1]
x<-data.matrix(TAD[,2:ncol(TAD)])
rownames(x) <- IDnames

とりあえずヒートマップは気にせず、数値行列xに対して距離行列とhclusteringを行う

TAD.dist <- dist(x, method="manhattan", diag=FALSE, upper=FALSE)
TAD.cluster <- hclust(TAD.dist, method="average", members=NULL)

この結果のデンドログラムをプロットすると、10 個の分岐すべてが明らかになります。

plot(TAD.cluster)

ただし、カットオフの高さを 150 にすると、ブランチは 3 つだけに制限されます

hcd = as.dendrogram(TAD.cluster)
rowDend<- cut(hcd, h = 150)$upper
plot(rowDend)

plot(rowDend) でプロットされたデンドログラムは、次のヒートマップの行デンドログラムで見たいものです

heatmap.2 (x,
distfun = function(x) dist(x, method='manhattan', diag=FALSE, upper=FALSE),
hclustfun = function(x) hclust(x,method = 'average'),
dendrogram = "row",
#Rowv=rowDend, #this is where I thought I could restrain the row dendrogram
Colv="NA",
trace="none",
)

しかし、必要な数の解釈可能なブランチについて、ヒートマップの行デンドログラムを抑制する方法が見つかりません。831 分岐すべてをプロットするのは非常に面倒です。

于 2014-07-24T21:51:07.417 に答える
0

問題は、「リーフノードの数を選択する」と書いたときの意味です。

heatmap.2 の Rowv パラメーターには、デンドログラムまたは TRUE/FALSE 値が必要です。ヘルプ ファイルから:

Rowv = 行デンドログラムを並べ替えるかどうか、および並べ替える方法を決定します。デフォルトでは TRUE です。これは、デンドログラムが計算され、行の平均に基づいて並べ替えられることを意味します。NULL または FALSE の場合、デンドログラムは計算されず、並べ替えも行われません。樹形図の場合は、「そのまま」、つまり並べ替えなしで使用されます。整数のベクトルの場合、デンドログラムが計算され、ベクトルの順序に基づいて並べ替えられます。

したがって、 を使用cutree(hr, k=5)すると、整数のベクトルが得られます (5 つのクラスターを生成するカットで、各アイテムが属するクラスターを示します)。これを使用as.dendrogramしても樹状図は生成されないためRowv=as.dendrogram(cutree(hr, k=5))、エラーがスローされます。

ツリーのブランチの一部を強調したい場合は、 dendextend パッケージを調べて、どのソリューションが最適かを確認してください。これはあなたが求めているかもしれない例です:

library(gplots)
data(mtcars) 
x  <- as.matrix(mtcars)

# now let's spice up the dendrograms a bit:
Rowv  <- x %>% dist %>% hclust %>% as.dendrogram %>%
   set("branches_k_color", k = 3) %>% set("branches_lwd", 4) %>%
   rotate_DendSer(ser_weight = dist(x))
Colv  <- x %>% t %>% dist %>% hclust %>% as.dendrogram %>%
   set("branches_k_color", k = 2) %>% set("branches_lwd", 4) %>%
   rotate_DendSer(ser_weight = dist(t(x)))

heatmap.2(x, Rowv = Rowv, Colv = Colv)

次の出力を使用します。

ここに画像の説明を入力

最近公開されたdendextendのチュートリアルも参照してください。関数を操作したい場合がありbranches_attr_by_labelsます (チュートリアルでは、「ラベルに基づいてブランチを調整する」セクションにあります)。樹形図を操作してこのようなプロットを作成する機能を備えています:

ここに画像の説明を入力

ノードを削除して、プロットするノードをいくつか残したい場合は、おそらくデータのサブセットのヒートマップを作成する必要があります。pruneまた、dendextendで関数を調べることもできますが(より小さなデンドログラムを調べるという一般的な目的で)、ヒートマップに使用する場合は、データの関連するサブセットだけを操作することをお勧めします。

于 2014-08-19T19:18:45.587 に答える