5.1 クラスタリングと樹状図 .1 階層的クラスタリング hclust()
5.1.8 ヒートマップ heatmap()
ヒートマップは疑似的なカラーイメージ
(
基本的にimage(t(x)))
で,樹状図が左と上 の端に描かれる.典型的には,樹状図が作られた際の制約下で,行と列をある値のセット(
行,または列平均)
に従い,並べ換える.書式:
heatmap(x, Rowv=NULL, Colv=if(symm)"Rowv" else NULL, distfun = dist, hclustfun = hclust, add.expr, symm = FALSE,
revC = identical(Colv, "Rowv"),
scale=c("row", "column", "none"), na.rm = TRUE, margins = c(5, 5), ColSideColors, RowSideColors,
cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 + 1/log10(nc),
labRow = NULL, labCol = NULL, main = NULL, xlab = NULL,
ylab = NULL, verbose = getOption("verbose"), ...)
引数:
x
プロットされる値の数値行列Rowv
行 樹 状 図 を 描 く か ど う か ,ど の よ う に 計 算 し 並 べ 換 え る か を 決 め る .dendrogram
か,行樹状図を並べ変えるのに使われる値のベクトル,もしくは
NA
なら行樹状図のプロット(
と並べ換え)
をしない.既定ではNULL
.以下の 説明を参照せよColv
列樹状図をどのように並べ換えるかを決める.上のRowv
引き数と同じ意味を持 つ.加えてx
が正方行列なら,Colv="Rowv"
は列を行と同様に扱うことを意味 するdistfun
列と行の双方間の距離を計算する関数.既定はdist()
hclustfun Rowv
とColv
が樹状図でないときに,階層的クラスタリングを計算する関数.既定は
hclust()
add.expr image()
の呼び出し後に評価される表現式.プロットに要素を加えるのに使うことができる
symm
論理値で,x
が正方行列の時,対称に扱うかどうかを指示するrevC
論理値で,例えば対称ケースで通例のように対称な軸を使うように,列順序をプ ロット時に逆転するかどうかを指示するscale
文字列で,値を行・列方向のどちらに中心化しスケール化するか,もしくはなにもしないか,を指示する.既定値は,もし
symm=FALSE
なら"row"
,さもな ければ"none"
na.rm
論理値で,NA
値を取り除くかどうかを指示するmargins
長さ2
の数値ベクトルで,それぞれ行と列名を含む余白を含む( par(mar=*)
を見よ)
ColSideColors
オプション.長さncol(x)
の文字ベクトルで,x
の列を注釈するの に使われる水平な棒に対する色名を含むRowSideColors
オプション.長さnrow(x)
の文字ベクトルで,x
の行を注釈するの に使われる垂直な棒に対する色名を含むcexRow,cexCol
正 数 で ,行 も し く は 列 軸 の ラ ベ リ ン グ の た め に 作 図 パ ラ メ ー タcex.axis
として使われる.既定値は,それぞれ行・列数だけを使うlabRow,labCol
行と列ラベルを含む文字ベクトル.既定値はそれぞれrownames(x)
またはcolnames(x)
main,xlab,ylab
主,x
軸そしてy
軸タイトル.既定では無しverbose
論理値で,情報を出力するかどうかを指示する... image()
関数用追加引き数.例えば色を指示するcol
返り値: コンソールに表示されないリストで,以下の成分を持つ:
rowInd order.dendrogram()
が返すような,行添字置換ベクトルcolInd
列添字置換ベクトルRowv
行デンドログラム(Rowv
がNA
でなく,keep.dendro=TRUE
の時だけ) Colv
列デンドログラム(Colv
がNA
でなく,keep.dendro=TRUE
の時だけ)
も し
Rowv
とColv
の ど ち ら か が 樹 状 図 な ら ,そ れ ら は 尊 重 さ れ る(
並 べ 換え ら れ な い
)
.さ も な け れ ば 樹 状 図 が, X
をx
ま た はt(x)
の 一 方 と し たdd <-as.dendrogram(hclustfun(distfun(X)))
のように計算される.もしどちらかが
(weights
の)
ベクトルなら,適当な樹状図が,樹状図による制約に従 う与えられた値に応じて並べ換えられる(
行ケースではreorder(dd, Rowv)
が使われ る)
.既定値のように,もしどちらも欠けていれば,対応する樹状図の並べ換えは行・列平 均に基づく.つまり,行ケースではRowv <- rowMeans(x, na.rm=na.rm)
.もしどち らかがNULL
ならば,対応する側に対しては何も行われない.既定
(scale = "row")
では,行は平均0
で標準偏差1
になるように,スケール化され る.これが有用であるというゲノム解析への応用プロットからのある経験的証拠がある.既定の色は見栄えが良くない.
CRAN
登録のカラーパレットRColorBrewer
パッケー ジのような拡張を検討しよう.注意:
Rowv = NA (
もしくはColv = NA)
でない限り,元の行と列は樹状図にマッチする ように並べ換えられる.例えば,Rowv
を(
もしかするとreorder()
関数で並べ換えた)
行樹状図としたときの,order.dendrogram(Rowv)
.heatmap()
はlayout()
関数を使 い,2 × 2
分割されたレイアウトの右下隅にイメージを描く.したがって,par(mfrow=
*)
やpar(mfcol= *)
を使った多重行・列レイアウトでは使用できない.# 自動車性能データmtcarsを使用(以下の図を参照)
> x <- as.matrix(mtcars)
> rc <- rainbow(nrow(x), start=0, end=.3) # 虹色色調利用
> cc <- rainbow(ncol(x), start=0, end=.3)
> hv <- heatmap(x, col = cm.colors(256), scale="column",
RowSideColors = rc, ColSideColors = cc, margins=c(5,10), xlab = "specification variables", ylab= "Car Models", main = "heatmap(<Mtcars data>, ..., scale = \"column\")")
> str(hv) # 添字ベクトルの二種類の並べ換え
List of 4
$ rowInd: int [1:32] 31 17 16 15 5 25 29 24 7 6 ...
$ colInd: int [1:11] 2 9 8 11 6 5 10 7 1 4 ...
$ Rowv : NULL
$ Colv : NULL
# 列樹状図を描かない(並べ換えも無し)(以下の図を参照)
> heatmap(x, Colv = NA, col = cm.colors(256), scale="column", RowSideColors = rc, margins=c(5,10),
xlab = "specification variables", ylab= "Car Models", main = "heatmap(<Mtcars data>, ..., scale = \"column\")")
# 樹状図無し(以下の図を参照)
> heatmap(x, Rowv = NA, Colv = NA, scale="column", main = "heatmap(*, NA, NA) ~= image(t(x))")
# 従業員勤務態度データattitude使用(以下の図を参照)
> round(Ca <- cor(attitude), 2) # 丸め処理
rating complaints privileges learning raises critical advance
rating 1.00 0.83 0.43 0.62 0.59 0.16 0.16
complaints 0.83 1.00 0.56 0.60 0.67 0.19 0.22
privileges 0.43 0.56 1.00 0.49 0.45 0.15 0.34
learning 0.62 0.60 0.49 1.00 0.64 0.12 0.53
raises 0.59 0.67 0.45 0.64 1.00 0.38 0.57
critical 0.16 0.19 0.15 0.12 0.38 1.00 0.28
advance 0.16 0.22 0.34 0.53 0.57 0.28 1.00
> symnum(Ca) # 単純な文字グラフィックス
rt cm p l rs cr a
rating 1
complaints + 1 privileges . . 1
learning , . . 1 raises . , . , 1
critical . 1
advance . . . 1
attr(,"legend")
[1] 0 0.3 . 0.6 , 0.8 + 0.9 * 0.95 B 1
> heatmap(Ca, symm = TRUE, margins=c(6,6)) # reorder()使用
> heatmap(Ca, Rowv=FALSE, symm = TRUE, margins=c(6,6)) # reorder()不使用
# 距離を定義する関数を自前で与える例(以下の図を参照)
# 米国最高裁判事の法律家による評価データUSJudgeRatings使用
> symnum( cU <- cor(USJudgeRatings) ) CO I DM DI CF DE PR F O W PH R CONT 1
INTG 1 DMNR B 1 DILG + + 1 CFMG + + B 1 DECI + + B B 1
PREP + + B B B 1
FAMI + + B * * B 1
ORAL * * B B * B B 1 WRIT * + B * * B B B 1 PHYS , , + + + + + + + 1 RTEN * * * * * B * B B * 1 attr(,"legend")
[1] 0 0.3 . 0.6 , 0.8 + 0.9 * 0.95 B 1
> hU <- heatmap(cU, Rowv = FALSE, symm = TRUE, col = topo.colors(16), distfun = function(c) as.dist(1 - c), keep.dendro = TRUE)
# 同じ再並べ替えを持つ相関行列
> round(100 * cU[hU[[1]], hU[[2]]])
CONT INTG DMNR PHYS DILG CFMG DECI RTEN ORAL WRIT PREP FAMI
CONT 100 -13 -15 5 1 14 9 -3 -1 -4 1 -3
INTG -13 100 96 74 87 81 80 94 91 91 88 87
DMNR -15 96 100 79 84 81 80 94 91 89 86 84
PHYS 5 74 79 100 81 88 87 91 89 86 85 84
(以下省略)
> str(hU$Colv) # 列デンドログラム
--[dendrogram w/ 2 branches and 12 members at h = 1.15]
|--leaf "CONT"
‘--[dendrogram w/ 2 branches and 11 members at h = 0.258]
|--[dendrogram w/ 2 branches and 2 members at h = 0.0354]
| |--leaf "INTG"
| ‘--leaf "DMNR"
‘--[dendrogram w/ 2 branches and 9 members at h = 0.187]
(以下省略)