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

一般的なデンドログラム構造 "dendrogram"

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

5.1 クラスタリングと樹状図 .1 階層的クラスタリング hclust()

5.1.4 一般的なデンドログラム構造 "dendrogram"

クラス

"dendrogram"

用の関数は,木構造を処理する一般的な関数を与える.階層的 クラスタリングや分類/回帰木を対象とする同様の関数の代替物として,木のプロットや 切断に対する共通のエンジンとなることを目指している.コードは依然テスト段階で,将 来変更される可能性がある.

書式:

as.dendrogram(object, ...)

as.dendrogram(object, hang = -1, ...) #

クラス

hclus

に対する

S3

メソッド

#

クラス

dendrogram

に対する

S3

メソッド

plot(x, type = c("rectangle", "triangle"), center = FALSE,

edge.root = is.leaf(x) || !is.null(attr(x,"edgetext")), nodePar = NULL, edgePar = list(),

leaflab = c("perpendicular", "textlike", "none"),

dLeaf = NULL, xlab = "", ylab = "", xaxt = "n", yaxt = "s", horiz = FALSE, frame.plot = FALSE, ...)

cut(x, h, ...) #

クラス

dendrogram

に対する

S3

メソッド

print(x, digits, ...) #

クラス

dendrogram

に対する

S3

メソッド

rev(x) #

クラス

dendrogram

に対する

S3

メソッド

#

クラス

dendrogram

に対する

S3

メソッド

str(object, max.level = NA, digits.d = 3,

give.attr = FALSE, wid = getOption("width"), nest.lev = 0, indent.str = "", stem = "--", ...) is.leaf(object)

引数:

object

クラス

dendrogram

のいずれかに変換できる任意の

R

オブジェクト

x

クラス

dendrogram

のオブジェクト

hang

数値スカラ関数で,親の高さから枝の高さを計算する.

plot.hclust()

を見よ

type

プロットタイプ

center

論理値.

TRUE

ならノードは枝中の葉に関して中央位置にプロットされる.さ

もなければ

(

既定値

)

全ての直接の子ノードの中間にプロットする

edge.root

論理値.もし

TRUE

なら,ルートノードに向かって辺を引く

nodePar

ノードに対して使われるプロットパラメータのリスト

( points

を見よ

)

.既 定値の

NULL

はノード位置にシンボルを描かない.リストは名前付きの成分

pch, cex, col

そして

(

もしくは

) bg

を持つ.各々は内部ノードと葉に対する二つの別 個の属性を指示するために長さが

2

であっても良い

edgePar

エッジの線分と

(

もし

edgetext

があれば

)

そのラベルに対して使われるプ ロット用パラメータのリスト.リストは名前付きの成分

col,(

線分に対する

)

lty

lwd, p.col

(

テキスト周りの多角形用の

) p.lwd

p.lty

そしてテキス

トの色用の

t.col

を含んで良い.

nodePar

に対するのと同様に,各々は葉と内 部のノードを区別するために長さが

2

であって良い

leaflab

葉のラベルを指定する文字列.既定の

"perpendicular"

はテキストを垂直 に書く.

"textlike"

はテキストを矩形内で水平に書く.そして,

"none"

は葉 のラベルを書かない

dLeaf

葉の頂点とそのラベル間のユーザ座標での距離を指定する数.もし既定の

NULL

ならば文字幅もしくは高さの

3/4

が使われる

horiz

論理値で,樹状図を水平に描くかどうかを指示する

frame.plot

論 理 値 で ,プ ロ ッ ト の 周 囲 に 枠 を 描 く か ど う か を 指 示 す る .

plot.default

を見よ

h

木がカットされる高さ位置

...,xlab,ylab,xaxt,yaxt

作画パラメータ,もしくは他のメソッドへの引き数

digits

出力時の精度を指定する整数.

print.default

を見よ

max.level,digits.d,give.attr,wid,nest.lev,indent.str str()

へ の 引 数 .

str.default()

を 見 よ .

give.attr=FALSE

と し て も ,各 ノ ー ド に 対 す る

height

members

属性は依然として示される

stem

各デンドログラムの枝に対して使う幹を指定する,

str()

に対して使われる文 字列

樹状図は直接に入れ子リストとして表現されており,各成分は木の枝に相当する.した がって,木

z

の最初の枝は

z[[1]]

であり,対応する副木の二番目の枝は

z[[1]][[2]]

である,等々.各ノードは,プロットと,性質による分割を効率的に行うため,幾つかの 情報を所持しているが,

members, height

そして葉に対する

leaf

だけが必須である.

members

枝中の葉の総数

height

ノードがプロットされる高さである非負の数値

midpoint

枝 の 左 端 し か ら の ノ ー ド の 数 値 距 離 .こ れ は 少 な く と も

plot(*,center=FALSE)

に対して必要である

label

文字列.ノードのラベル

x.member cut()$upper

に対して,「前の」メンバーの数.より一般的には,水平

(

horiz=FALSE

の時,さもなければ垂直

)

方向の整列に対して使われる

member

成 分に対する代入物

edgetext

文字列.ノードヘ向かう辺に対するラベル

nodePar

点のプロットに対するノード固有の特性を指定する長さ

1

のベクトルの名前

付きリスト.上の

nodePar

引き数を見よ

edgePar

長さ

1

の成分からなる名前付きリスト.ノードへ向かう辺のプロットに対す

る属性を指定し,もしあれば

edgetext

を書く.上の

edgePar

引き数を見よ

leaf

論理値.もし

TRUE

ならノードは木の葉になる

cut.dendrogram()

成分

upper

lower

を持つリストを返す.前者は元の木の簡略 版でやはりクラス

dendrogram

.後者は木を分割して得られた枝を持つリスト で,各枝はクラス

dendrogram

cut.dendrogram()

は成分

upper

lower

を持つリストを返す.最初の成分は元の 木の簡略版であり,やはりクラス

"dendrogram"

である.後者は木を切断して得られた 枝からなるリストで,それぞれデンドログラムである.

"dendrogram"

オブジェクトには

[[, print

そして

str

メソッドがある.最初のもの

(

抜きだし

)

は副枝の選択によりクラスが保存されることを保証する.

クラス

"hclust"

のオブジェクトはメソッド関数

as.dendrogram()

を用いてクラス

"dendrogram"

に変換できる.

rev.dendrogram()

は 単 に デ ン ド ロ グ ラ ム

x

の ノ ー ド を 逆 転 し た も の を 返 す

(reorder.dendrogram()

を参照せよ

)

is.leaf(object)

object

が葉

(

もっとも簡単なデンドログラム

)

かどうかをテス トする.

plotNode()

plotNodeLimit()

は補助関数である.

警告:プロットを含むデンドログラムの操作は再帰的手順を使うため,特に深い木構造に 対しては

options("expressions")

を増やす必要があるかも知れない.このためには,

C

のスタックサイズを

OS

の既定値よりも大きめに設定することが必要とされる可能性 が高い

(

これができるかどうかは

OS

依存で,

Windows

では不可

)

注意:

type="triangle"

を使う際は

center=TRUE

を使う方が普通見栄えが良くなる.

関連:デンドログラムの

labels

メソッドに関しては

order.dendrogram()

# 樹状図に対するメソッド.米国の犯罪検挙率データUSArrests使用

> hc <- hclust(dist(USArrests), "ave") # 階層的クラスタリング

> (dend1 <- as.dendrogram(hc)) # 樹状図に変換しプロット

’dendrogram’ with 2 branches and 50 members total, at height 152.314

> str(dend1) # str()メソッド.dend1の全構造

--[dendrogram w/ 2 branches and 50 members at h = 152]

|--[dendrogram w/ 2 branches and 16 members at h = 77.6]

| |--[dendrogram w/ 2 branches and 2 members at h = 38.5]

| | |--leaf "Florida"

| | ‘--leaf "North Carolina"

(以下省略)

> str(dend1, max = 2) # 最初の2つの副レベルだけ表示

--[dendrogram w/ 2 branches and 50 members at h = 152]

|--[dendrogram w/ 2 branches and 16 members at h = 77.6]

| |--[dendrogram w/ 2 branches and 2 members at h = 38.5] ..

| ‘--[dendrogram w/ 2 branches and 14 members at h = 44.3] ..

‘--[dendrogram w/ 2 branches and 34 members at h = 89.2]

|--[dendrogram w/ 2 branches and 14 members at h = 44.8] ..

‘--[dendrogram w/ 2 branches and 20 members at h = 54.7] ..

# 見掛けを様々に変える(次の図を参照)

> plot(dend1)

# "triangle"タイプで,内部ノードも表示

> plot(dend1, nodePar=list(pch = c(1,NA), cex=0.8, lab.cex = 0.8), type = "t", center=TRUE)

> plot(dend1, edgePar=list(col = 1:2, lty = 2:3), dLeaf=1, edge.root = TRUE)

> plot(dend1, nodePar=list(pch = 2:1,cex=.4*2:1, col = 2:3), horiz=TRUE)

> dend2 <- cut(dend1, h=70) # 高さ70でカットした樹状図(次の図を参照)

> plot(dend2$upper)

> plot(dend2$upper, nodePar=list(pch = c(1,7), col = 2:1)) # 水平方向の葉が変

# dend2$lowerはデンドログラムでなく,リスト

> plot(dend2$lower[[3]], nodePar=list(col=4), horiz = TRUE, type = "tr")

# "inner","leaf"エッジを異なったタイプと色で

> plot(dend2$lower[[2]], nodePar=list(col=1),# non empty list edgePar = list(lty=1:2, col=2:1), edge.root=TRUE)

# 次の図を参照

> nP <- list(col=3:2, cex=c(2.0, 0.75), pch= 21:22, bg= c("light blue", "pink"),

lab.cex = 0.75, lab.col = "tomato")

> par(mfrow= c(2,2), mar = c(5,2,1,4))

> plot(d3, nodePar= nP, edgePar = list(col="gray", lwd=2), horiz = TRUE)

> addE <- function(n) { # 補助関数定義

if(!is.leaf(n)) { # leafでなければ属性"edgePar","edgetext"を追加 attr(n, "edgePar") <- list(p.col="plum")

attr(n, "edgetext") <- paste(attr(n,"members"),"members") }

n }

> d3e <- dendrapply(d3, addE) # d3のノードに再帰的に関数addE()を適用

> plot(d3e, nodePar= nP)

> plot(d3e, nodePar= nP, leaflab = "textlike")

050100150 FloridaNorth Carolina

California MarylandArizonaNew MexicoDelaware Alabama Louisiana

Illinois

New York MichiganNevada Alaska

MississippiSouth CarolinaWashingtonOregon

Wyoming OklahomaVirginiaRhode IslandMassachusettsNew Jersey

Missouri Arkansas

TennesseeGeorgiaColorado

Texas Idaho Nebraska Kentucky Montana

Ohio Utah Indiana Kansas

ConnecticutPennsylvaniaHawaiiWest VirginiaMaine

South Dakota North Dakota

Vermont

Minnesota Wisconsin

IowaNew Hampshire 050100150 FloridaNorth Carolina

California MarylandArizonaNew Mexico

Delaware Alabama Louisiana

Illinois

New York Michigan Nevada Alaska

MississippiSouth CarolinaWashingtonOregon

Wyoming OklahomaVirginiaRhode IslandMassachusettsNew Jersey

Missouri Arkansas

Tennessee

GeorgiaColoradoTexas Idaho

Nebraska Kentucky Montana Ohio Utah

Indiana Kansas

ConnecticutPennsylvaniaHawaiiWest VirginiaMaine

South Dakota North Dakota

Vermont

Minnesota Wisconsin IowaNew Hampshire

050100150 FloridaNorth Carolina

California MarylandArizonaNew Mexico

Delaware Alabama Louisiana

Illinois

New York MichiganNevada Alaska

MississippiSouth CarolinaWashingtonOregon

Wyoming OklahomaVirginiaRhode IslandMassachusettsNew JerseyMissouri ArkansasTennesseeGeorgiaColoradoTexas Idaho

Nebraska Kentucky Montana Ohio Utah

Indiana Kansas

ConnecticutPennsylvaniaHawaiiWest VirginiaMaine

South Dakota North Dakota

VermontMinnesota Wisconsin

IowaNew Hampshire

150 100 50 0

Florida North Carolina California Maryland Arizona New Mexico Delaware Alabama Louisiana Illinois New York Michigan Nevada Alaska Mississippi South Carolina Washington Oregon Wyoming Oklahoma Virginia Rhode Island Massachusetts New Jersey Missouri Arkansas Tennessee Georgia Colorado Texas Idaho Nebraska Kentucky Montana OhioUtah Indiana Kansas Connecticut Pennsylvania Hawaii West Virginia Maine South Dakota North Dakota Vermont Minnesota Wisconsin IowaNew Hampshire

050100150 Branch 1Branch 2 Branch 3 Branch 4 050100150 Branch 1Branch 2 Branch 3 Branch 4

40 30 20 10 0

Washington Oregon Wyoming Oklahoma Virginia Rhode Island Massachusetts New Jersey Missouri Arkansas Tennessee Georgia Colorado Texas

010203040 CaliforniaMaryland ArizonaNew Mexico Delaware Alabama Louisiana Illinois New YorkMichigan Nevada AlaskaMississippi South Carolina

25 20 15 10 5 0

Delaware Alabama Louisiana Illinois New York Michigan Nevada

0510152025

7 members

3 members

Delaware

2 members

Alabama Louisiana 4 members

2 members

Illinois New York 2 members

Michigan Nevada

0510152025

7 members

3 members

Delaware 2 members

Alabama Louisiana 4 members

2 members

IllinoisNew York 2 members

MichiganNevada

樹状図の様々なプロット例

5.1.5 樹状図のクラスタの周りに枠を描く rect.hclust()

関数

rect.hclust()

は,樹状図のクラスタの周りに枠を描く.

書式:

rect.hclust(tree, k = NULL, which = NULL, x = NULL, h = NULL,

border = 2, cluster = NULL)

引数:

tree hclust()

が生成するようなオブジェクト

k, h

スカラ.樹状図を,ちょうど

k

個のクラスタが作られるように分割するか,高さ

h

で分割する

which, x

周りに矩形を描くクラスタを選ぶためのベクトル.

which

はクラスタを番

(

木の左から右へ

)

で選び,

x

は対応する水平座標値を含むクラスタを選ぶ.

既定値は

which=1:k

border

矩形の境界色のためのベクトル

cluster

オプションとして,

cutree(hclust.obj,k=k)

が返すようなクラスタ所属 情報を持つベクトルが既に計算済みなら,効率性のために指定できる

返り値:

(

コンソールに表示されない

)

リストで,各成分は対応するクラスタ中のデー タ点のベクトルを含む

樹状図の枝の周りに矩形の枠を描き,クラスタを強調する.最初に樹状図があるレベル で分割され,それから矩形枠が選ばれた枝の周りに描かれる.

# 米国の犯罪検挙率データUSArrestsを使用(次の図を参照)

> hca <- hclust(dist(USArrests))

> plot(hca)

> rect.hclust(hca, k=3, border="red") # レベル3の枝をハイライト

Florida

North Carolina Delaware Alabama Louisiana

AlaskaMississippiSouth CarolinaMarylandArizonaNew MexicoCaliforniaIllinoisNew YorkMichiganNevadaMissouriArkansasTennesseeGeorgiaColoradoTexas

Rhode Island Wyoming Oregon

OklahomaVirginia Washington

MassachusettsNew Jersey

Ohio Utah

ConnecticutPennsylvaniaNebraska

Kentucky Montana

Idaho

Indiana Kansas

HawaiiMinnesotaWisconsinIowaNew HampshireWest VirginiaMaineSouth DakotaNorth DakotaVermont

050100150200250300

Cluster Dendrogram

hclust (*, "complete") dist(USArrests)

Height 樹状図の枝を矩形で囲む

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