• 検索結果がありません。

ヒートマップ heatmap()

ドキュメント内 ためになった他の人のサイト script of (ページ 161-164)

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]

(以下省略)

ドキュメント内 ためになった他の人のサイト script of (ページ 161-164)