Heatmap の書き方

縦軸、横軸の1行目に名前や項目が入っている数値データについて、ヒートマップを作成する方法です。
ヒートマップでは、縦横両方向に対してクラスターの表示が同時にでき、各要素の高低を色で示すことができます。

データ形式は、例えば、テストの成績などでも可能です。

name Japanese English Science Mathematics SocialStudies
Taro 55 70 30 90 63
Jiro 20 33 55 99 88
Saburo 68 83 59 68 75

みたいなデータです。仮に、"data_file.csv" というファイルに納め、保存してあるとします。
library(amap) と library(gplots) を必要としますので、事前にインストールして下さい。

**************************************
# データの読み込み
datafile<-read.csv("data_file.csv",header=T, row.names="id")


# 標準化; 各変量を平均が 0 ,分散が 1 になるように変換
ndata <- scale(datafile)


library(amap)
# 距離関数で類似度のアルゴリズムとしてCosine係数を使用する
# (method="pearson")は(1 - cosine)と同義である
d1<-Dist(ndata, method="pearson")
d2<-Dist(t(ndata), method="pearson")


# クラスタリングでAverage Linkageを使用する
c1<-hclust(d1, method="average")
c2<-hclust(d2, method="average")


# 赤と緑の Heatmap の出力
library(gplots)
heatmap.2(as.matrix(ndata),
Colv=as.dendrogram(c2),Rowv=as.dendrogram(c1),
scale="none", col=redgreen(75),
main="Heatmap", margin=c(8,10))

# 順番を入れ替えたくないとき (樹形図なし)

heatmap.2(as.matrix(ndata),
dendrogram = "none",
Colv=F,
Rowv=FALSE,
scale="none",
key = F,
density.info="none",
col=bluered(256),
main="Heatmap #2", margin=c(8,10),
trace = "none"
)

# 横に樹形図を表示したい時。 dendrogram = "row" と Rowv=as.dendrogram(c1) の指定が必要です。

library(gplots)
Colour <- colorRampPalette( c("blue","white","red") )
heatmap.2(as.matrix(データノナマエ),
dendrogram = "row",
Colv=F,
Rowv=as.dendrogram(c1),
scale="none",
key = F,
density.info="none",
col=Colour,
main="Heatmap #3", margin=c(8,10),
trace = "none"
)
**************************************

データの読み込み時に、行にも列にも「名前」が付いているファイルに対応しています。
行と列の大きさが異なる時には、Colv=as.dendrogram(c2),Rowv=as.dendrogram(c1) の指定が必要らしいです。

R で、好みの色のグラデーションでヒートマップが描きたい。に色について書きました。
よかったらご欄下さい。

Rで、サンプルデータ作製からヒートマップ表示とクラスタリング表示 (Afiinity propagation含む) まで で、乱数によるサンプルデータを作って、並べ換えなしでヒートマップを書くところから、クラスタリングを行ってヒートマップを書くところまで記載しました。
参考にしたサイト
http://d.hatena.ne.jp/kirifue/20090617/1245288104
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/59.html

B! LINE