手作業でヒートマップ

  • 昨日の続き
  • 発現解析の結果をヒートマップ表示することがある
  • Rではheatmap()関数がある
  • heatmap()関数では、その内部で用いる距離定義関数(デフォルトはdist()関数)、階層的クラスタリング関数(デフォルトではhclust())を用いて、データ行列の行についてクラスタリング、列についてクラスタリング、出来た行クラスター、列クラスターを示すために行順序の入れ替え、列順序の入れ替えを実施し、その上で、行列のセルの値に色をつけて表示している
  • heatmap()関数を使っての表示と、個別の処理をdist(),hclust()を使って実施して表示する手順とを併記してみる
  • ヒートマップに適した行列データを作る
# サンプル数
Ns <- 500
# マーカー数
Nm <- 1000
# サンプルのパターン数(群数)
Ns.pt <- 10
# マーカーのパターン数(群数)
Nm.pt <- 10
# サンプル・マーカーの存在位置を多次元空間酔歩の道として作る
trail <- matrix(rnorm(Ns.pt*Nm.pt),Ns.pt,Nm.pt)
trail <- apply(trail,2,cumsum)
# 3次元分だけ見てみよう
library(rgl)
plot3d(trail[,1:3])
matplot(trail,type="l")
# パターン数(群数)ごとにいくつのサンプル、いくつのマーカーを帰属させるかをランダムに決める
library(MCMCpack)
ps <- rdirichlet(1,rep(1,Ns.pt))
pm <- rdirichlet(1,rep(1,Nm.pt))
ss <- sample(1:Ns.pt,Ns,replace=TRUE,prob=ps)
sm <- sample(1:Nm.pt,Nm,replace=TRUE,prob=pm)
# 行数=サンプル数、列数=マーカー数の行列
M <- trail[ss,sm]
# 少し乱す
M <- jitter(M,1000)

# 実験シグナル
image(M)
  • heatmap()関数を使って描く

# ヒートマップを描いてみよう
heatmap(M)

d1 <-dist(M)
h1 <-hclust(d1)
plot(h1)

d2 <- dist(t(M))
h2 <- hclust(d2)
plot(h1)
clustered.M <- M[h1$order,h2$order]
    • 配置換えした行列のセルに色を付けて表示
      • クラスタリングは、枝分けを入れ替えてもクラスターの結果としては変わらないこともあるので、みてくれは完全に一致していないかもしれないが、情報提示的には同一とみなせる

image(clustered.M)