{ggdendro}のテスト

ggdendro を試しに走らせてます。なおこの内容はggdendroのvignetteの内容をベースに作成しています。

Introduction

ggdendro パッケージはggplotを使ってデンドログラムや樹形図を描かせるパッケージです。基本関数ggdendrogram()では、出力オブジェクトはggplotクラスで返してきます。

まずはパッケージを読み込みます。

library(ggplot2)
library(ggdendro)

Using the ggdendrogram() wrapper

基本形として、以下のシンプルなものを実行してみましょう:

hc <- hclust(dist(USArrests), "ave")
ggdendrogram(hc, rotate = FALSE, size = 2)

rotateオプションは縦・横を切り替えます。

hc <- hclust(dist(USArrests), "ave")
ggdendrogram(hc, rotate = TRUE, size = 2)

シンプルに描くならこれでもOKです。

dendro_data()関数を使ったデンドログラム・プロットデータの活用

このパッケージにはdendro_data()という関数が組み込まれており、dendrogramクラスのオブジェクトからセグメントデータやラベルデータのリストを作成してくれます。これを用いることでggplot関数で簡単にデンドログラムなどを描けます。

まずはdendro_data()で生成したsegmentデータを使って描きます:

# 分析実施
hc <- hclust(dist(USArrests), "ave")
# 分析結果をdendrogramクラスとします
dhc <- as.dendrogram(hc)

# 分析結果を使えるようにする
# type="rectangle で直角タイプです
ddata <- dendro_data(dhc, type = "rectangle")

# ggplot()でグラフ化。segment()でセグメント情報(棒のデータ)を取得
p <- ggplot(segment(ddata)) + 
  geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) + 
  coord_flip() + 
  scale_y_reverse(expand = c(0.2, 0))
p

segmentデータしか使ってないので棒だけです。なお、ggplotでそのまま描くと灰色とか見難くなります。そこで以下の内容を追加するとスッキリします:

# coord_flip()で横向きに、theme_dendro()で真っ白にします
p + 
  coord_flip() + 
  theme_dendro()

なお、直角タイプではなく三角タイプのデンドログラムにもできます:

ddata <- dendro_data(dhc, type = "triangle")
ggplot(segment(ddata)) + 
  geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) + 
  coord_flip() + 
  scale_y_reverse(expand = c(0.2, 0)) +
  theme_dendro()

回帰木ダイアグラム(Regression tree diagrams)

treeパッケージ内のtree()関数のプロットデータにも対応しています。

require(tree)
## Loading required package: tree
data(cpus, package = "MASS")
# 分析の実行とデンドロデータ作成
cpus.ltr <- tree(log10(perf) ~ syct + mmin + mmax + cach + chmin + chmax, data = cpus)
tree_data <- dendro_data(cpus.ltr)

# ggplotへ。
ggplot(segment(tree_data)) +
  # 棒の設定。sizeで太さを、alphaで透明度
  geom_segment(aes(x = x, y = y, xend = xend, yend = yend, size = n), 
               colour = "blue", alpha = 0.5) +
  scale_size("n") +
  # 分岐のテキスト(ラベル)設定。データはlabel()で持ってこれます。sizeで文字サイズ。
  geom_text(data = label(tree_data), 
            aes(x = x, y = y, label = label), vjust = -0.5, size = 3) +
  # 葉っぱのテキスト設定。
  geom_text(data = leaf_label(tree_data), 
            aes(x = x, y = y, label = label), vjust = 0.5, size = 2) +
  # 軸や背景除去
  theme_dendro()

分類木ダイアグラム(Classification tree diagrams)

rpartパッケージのrpart()関数のプロットデータにも対応しています。

library(rpart)
# 分析実行
fit <- rpart(Kyphosis ~ Age + Number + Start, 
             method = "class", data = kyphosis)
# デンドロデータへ
fitr <- dendro_data(fit)

# ggplotへ
ggplot() +
  # 棒の設定。デンドロデータから直接segmentsを指定
  geom_segment(data = fitr$segments, 
               aes(x = x, y = y, xend = xend, yend = yend)) + 
  geom_text(data = fitr$labels, 
            aes(x = x, y = y, label = label), size = 3, vjust = 0) +
  geom_text(data = fitr$leaf_labels, 
            aes(x = x, y = y, label = label), size = 3, vjust = 1) +
  theme_dendro()

以上です。