2

ルートで複数の hclust オブジェクト (またはデンドログラム) をマージする簡単な方法はありますか?

私の問題を説明するために、例を可能な限り完全なものにしました。

USArrests を地域ごとにクラスター化し、すべての hclust オブジェクトをまとめてヒートマップにプロットしたいとします。

USArrests
Northeast <- c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island", 
"Vermont", "New Jersey", "New York", "Pennsylvania")
Midwest <-  c("Illinois", "Indiana", "Michigan", "Ohio",  "Wisconsin", 
    "Iowa", "Kansas", "Minnesota", "Missouri", "Nebraska", "North Dakota", 
    "South Dakota")
South <- c("Delaware", "Florida", "Georgia", "Maryland", "North Carolina", 
           "South Carolina", "Virginia", "West Virginia", 
           "Alabama", "Kentucky", "Mississippi", "Tennessee", "Arkansas", 
           "Louisiana", "Oklahoma", "Texas")
West <- c("Arizona", "Colorado", "Idaho", "Montana", "Nevada", "New Mexico", 
          "Utah", "Wyoming", "Alaska", "California", "Hawaii", "Oregon", "Washington")

h1 <- hclust(dist(USArrests[Northeast,]))
h2 <- hclust(dist(USArrests[Midwest,]))
h3 <- hclust(dist(USArrests[South,]))
h4 <- hclust(dist(USArrests[West,]))

これで、4 つの hclust オブジェクト (h1 から h4) ができました。私は通常、次のようにマージします。

hc <- as.hclust(merge(merge(merge(
    as.dendrogram(h1), as.dendrogram(h2)), as.dendrogram(h3)), 
    as.dendrogram(h4)))

次に、それらをプロットするには、hclust オブジェクトに従って行列を並べ替えてから、プロットする必要があります (プロットを明確にするためにいくつかの注釈を追加しました)。

usarr <- USArrests[c(Northeast, Midwest, South, West),]

region_annotation <- data.frame(Region = c(rep("Northeast", length(Northeast)), 
                                rep("Midwest", length(Midwest)),
                                rep("South", length(South)),
                                rep("West", length(West))),
                                row.names = c(Northeast, Midwest, South, West))

pheatmap(usarr, cluster_rows = hc, 
         annotation_row = region_annotation)

美しさのためにいくつかの追加のグラフィカルパラメーターを含むヒートマップの結果

要約すると、すべての個別の hclust をマージするよりも簡単な方法はありますか?

4

2 に答える 2

2

マージされたhclustオブジェクトを作成するには、 を使用<<-して作成されたカスタム環境内で安全に使用できますnew.env

を使用せずに、マージされたオブジェクトを一度に 2 つ作成する方法は他にもあるかもしれません<<-。うまくいけば、誰かがそれに光を当てることができます.

使ってみましたdo.call('merge', list( dendrograms of h1, h2, h3, h4 )hclustしかし、4 つのブランチではなく上部に 2 つのブランチが必要なため、機能しませんでした。

コード:

library('pheatmap')
myenv <- new.env()
myenv$hc <- as.dendrogram( hclust( dist(USArrests[Northeast,])))
invisible( lapply( list( Midwest, South, West), function(x){
  myenv$hc <<- merge( myenv$hc, as.dendrogram( hclust( dist( USArrests[ x, ]) )) )
  NULL
} ) )
myenv$hc <- as.hclust(myenv$hc)

グラフ:

pheatmap(usarr, cluster_rows = myenv$hc, 
         annotation_row = region_annotation)

ここに画像の説明を入力

于 2018-03-28T19:56:24.510 に答える