No.04450 デンドログラム  【空星】 2007/10/01(Mon) 14:29

Rによってデンドログラムを描いて,距離が大きく変化するところでカットしてクラスターにわけるということを行いたいのですが,

set.seed(123)
d<-dist(z3)
ans<-hclust(d,method="ward")
plot(ans,hang=-1)
rect.hclust(ans,k=2,border='red')
x.grp<-cutree(ans,k=2)
x.grp

このプログラムだと指定したクラスターになっていますし,距離が大きく変化するところでカットするというアルゴリズムではないですよね...。デンドログラムを描いたその先のプログラムについてアドバイスしてほしいのですが,よろしくお願いします!

No.04451 Re: デンドログラム  【青木繁伸】 2007/10/01(Mon) 15:54

rect.hclust(ans,k=2,border='red') などで,k を2,3,4,... と変化させて図を書いてみれば,長方形の高さがどうやって決められているか何となく分かるのでは?

また,rect.hclust のプログラムを眺めてみる。

更に,height は ans$height に記録されており,距離は ans$height[i]-ans$height[i-1], i=n-1, n-2, ..., 3, 2

例では,
> diff((ans$height))
[91] 1.309205e+00 7.437433e-03 3.926044e-02 1.273927e-01 1.238421e+00 2.374598e+00
[97] 1.518698e+00 6.789067e+00
で,6.789067e+00 で切るか,次の 2.374598e+00 で切るか
2.374598e+00 で切るとすると,それに 対応するheight は ans$height[97] と ans$height[96]
> ans$height[97]-ans$height[96]
[1] 2.374598
なのだから,ans$height[97] と ans$height[96] の中間で切ればよい
つまり
rect.hclust(ans, h=mean(ans$height[97], ans$height[96]), border="red")
とすればよい。
距離の大きい方から5個ほど候補を表示すればよい。
あとは,このような過程をプログラムすればよいわけである。

No.04452 Re: デンドログラム  【青木繁伸】 2007/10/01(Mon) 16:08

もうちょっと複雑なようだ
ちゃんと,ノードの作られる順番を考慮しないといけないかな

● 「統計学関連なんでもあり」の過去ログ--- 040 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る