No.22764 hclust()の距離行列とメソッドの指定  【波音】 2019/06/28(Fri) 15:03

Rのhclust()について教えてください。

引数にward.Dとward.D2が指定できるようになっていますが,例えば「d」という距離行列(ユークリッド距離)が存在したと時にいくつかの方法がネット上や書籍で示されています。

・距離行列をそのまま指定する
hclust(d, method="ward.D")

・距離行列の自乗したものを指定する
hclust(d^2, method="ward.D")

・川端ほか「Rにおる多変量解析入門」オーム社(2019)P374記載
hclust((1/2)*d^2, method="ward.D")

結局のところ「解釈ができれば何でもいい」というくらいの問題なのかもしれませんが,アルゴリズム的(?)にはどういう指定が適切なのでしょうか。

川端ほか「Rにおる多変量解析入門」オーム社(2019)P313にward.Dとward.D2の違いが説明されていますが,どういう距離行列とメソッドの組み合わせ指定をすればよいのでしょうか,,,

No.22765 Re: hclust()の距離行列とメソッドの指定  【青木繁伸】 2019/06/29(Sat) 12:05

川端さんが具体的にどのように説明されているのか分かりませんが,私の理解は
http://aoki2.si.gunma-u.ac.jp/lecture/misc/clustan.html
に 示してあります。これは奥野忠一らの多変量解析,多変量解析入門にあったものだと思います。まだパソコンなんてものがなく,コンピュータは FORTRAN,COBOLでプログラムするという時代のものです。もともとは,CLUSTAN というプログラムのアルゴリズムの説明にあるものです。実際,私もこれに基づいてクラスター分析のプログラムを書いて使っていました。
当初の R には今の ward.D が ward として実装されていました。推測するに,「バグ」だったのだと思います。
私 の書いた本でも,「ウォード法と重心法を採用する場合にはユークリッド平方距離を使うべきである。ユークリッド平方距離を選択できるオプションがないの で,後述の hclust の第 1 引数としてユークリッド距離を二乗したものを指定することを忘れないようにしよう。」と書きました。
その後指摘があったかなんかで,本来あるべき ward.D2 が実装されましたが,過去のしがらみを捨てきれなくて(バグだったとも言えなくて)両方を残したのだと邪推しています。

No.22769 Re: hclust()の距離行列とメソッドの指定  【波音】 2019/07/01(Mon) 10:41

ご回答ありがとうございます。

たしかに青木先生の本にも「hclust の第 1 引数としてユークリッド距離を二乗したものを指定」と書かれており,それ以前にもこのように教わっていたので,私の中ではある意味ルール的にd^2としていましたが,,,

やはり(使う人の立場によっては程度問題ではあると思いますが)アルゴリズムを理解しておくことは重要だと感じさせられました。

少し話はそれてしまいますが,誰でも使えるものというのは「考えなくても(理解していなくても)使えるもの」ともいえるので,ただでさえ色々と誤解の多い統計話題は今後さらに注意しないといけないと思いました。

※パッケージ文化に恵まれた我々は特に注意せねばならないのかもしれません。

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