R で階層型クラスター分析を行った際、Dendrogram の一部のツリーのみ拡大する方法です。

まず、全体を描画します。

hca <- hclust(dist(USArrests))
plot(hca)
rect.hclust(hca, k = 3, border = "red")
rect.hclust(hca, h = 50, which = 7, border = "blue")

dendrogram_20160720

上図青枠(7番目)のツリーを取り出すには下記のようにします。

plot(cut(as.dendrogram(hca), h=50)$lower[[7]], main="Lower tree")

dendrogram_lower_20160720

上位のツリーを取り出す場合は下記の通りです。

plot(cut(as.dendrogram(hca), h=50)$upper, main="Upper tree")

dendrogram_upper_20160720

注目する個体がどこのクラスターに含まれているか、
例えば、高さ50で切ったとき、Kansasが7番目のクラスターに含まれるのを確認するには下記のようにします。

target.label <- "Kansas"
h.val <- 50
ct <- cut(as.dendrogram(hca), h.val)$lower
print(paste(h.val, "で切った場合のクラスター数:", length(ct)))
[1] "50 で切った場合のクラスター数: 9"
flag <- FALSE # ループ抜けフラグ
leaf.len <- 1 # 下位のクラスター数

for(i in 1:length(ct)) {

  if(is.leaf(ct[[i]])) { # 分枝は個体1つ
    if(target.label == labels(ct[[i]])) {
      flag <- TRUE
      leaf.len <- 1
      break
    }

  } else {
    ct.leafs <- cut(ct[[i]], h=0)$lower # 下位のツリーを取得
    leaf.len <- length(ct.leafs)

    for(j in 1:leaf.len) {
      if(!is.na(match(target.label, labels(ct.leafs[[j]])))) {
        flag <- TRUE
        break
      }
    }
  }

  if(flag) break
}
print(paste(target.label, "のインデックス:",i,"-",j))
[1] "Kansas のインデックス: 7 - 10

Kansasは、7クラスタ目の10番目にあることが分かります。
再び下位のツリーを描画してみます。

plot(ct[[i]], main = paste("Hight:", hi, ", Branch:", i, ", Number of leafs:", leaf.len))

dendrogram_lower2_20160720

cut()関数で、cutree()関数同様、枝の数(k)を指定できると良かったのですが、
高さ(h)しか指定できないようです。