R を使ったヒートマップの作り方

UB3/informatics/r/heatmap_r

このページの最終更新日: 2021/10/23

  1. 概要: ヒートマップとは
  2. R を使ったヒートマップの作り方
    • heatmap
    • heatmap.2
    • geom_tile
    • pheatmap
  3. ヒートマップの特定のクラスターを取り出すには

広告

概要: ヒートマップとは

下にあるような、値を色の違いで表した図をヒートマップ heatmap という (図は Public domain)。ヒートマップを作る際には、データを並べ替えるクラスタリング clustering も同時に行われることが多い。下の図では、X および Y の 2 つの軸でクラスタリングが行われている。


Rで作成したヒートマップ
広告

R を使ったヒートマップの作り方

R には、いくつかヒートマップを作る関数がある。

heatmap

R デフォルトの関数。heatmap(A) で、A は行列。read.csv などで読み込んだデータは、リスト形式 list になっている場合がある。行列に変換する関数 as.matrix も覚えておくと便利だろう。

例えば、組み込みデータセット の一つ、mtcars を使って以下のようにヒートマップを作る。

heatmap(as.matrix(mtcars))

Rで作成したmtcarsのヒートマップ

heatmap 関数には、以下のようなオプションがある。個人的には、この R デフォルトの関数が一番使いやすく、機能も充実しているように思う。

Colv, Rowv

Colv = NA で列をクラスタリングしなくなる。行のクラスタリング解除は Rowv = NA である。


heatmap.2

gplots パッケージに含まれる関数。ggplot は新しい R 4.1.1 にはインストールできなさそうだが、gplots は大丈夫だった。

heatmap.2(A, col=greenred(50), trace="none")

greenred(50) は、 緑と赤で 50 段階で色分け。trace="none" は青い トレースの線をトレースの線を 消す。

geom_tile

ggplot2 パッケージに含まれる関数。クラスタリングできないのか? あまり好きじゃない。


pheatmap

pheatmap ライブラリに含まれる。

参考ページ 1, 2.

ヒートマップの特定のクラスターを取り出すには

研究の過程で、ヒートマップを作成した後に特定のクラスターを取り出したいケースがあった。データ数が少なければ手動でできるのだが、非常に多くて行の文字が見えないような状態だったので、R を使って取り出す必要があった。そのときのメモ。

あまりネットに情報がないが、役に立ったのは このページ。heatmap.2 を使うが、クラスター解析には hclust という別の関数を使う。hclust の結果を row_clust という変数に保存して、それを使って heatmap.2 でヒートマップを書き、また row_clust から直接クラスターを取り出している。

mat というのがデータを含む行列で、スクリプトはこんな感じ。heatmap.2 を使っているので、gplots ライブラリが必要。

row_clust = hclust(dist(mat, method = 'euclidean'), method = 'ward.D2')
# まず変数を row_clust として保存。

out = heatmap.2(mat, Rowv = as.dendrogram(row_clust))
# クラスタリングに row_clust を as.dendrogram で使用している。

これとは別に、plot で直接 dendrogram を作成。クラスターの指定は、cutree を使って k でクラスターの数を指定する。

sort(cutree(row_clust, k=2))

または、h でカットオフ値を指定する。こっちの方が、abline でカットオフの場所を視覚化できるので好みである。

sort(cutree(row_clust, h=70)) abline(h = 70, col = "red2", lty = 2, lwd = 2)

table を使って、各クラスターに含まれる要素の数を見ることができる。

table(sort(cutree(row_clust, h=70)))


広告

References

  1. Link: Last access 2021/

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment