階層的クラスター分析の方法はクラスター間の距離をどのように求めるかで、最近隣法、最遠隣法、群平均法、メディアン法 、重心法、ウォード法などに分かれる。
■ 最近隣法
最近隣法(nearest neighbor method)は、最短距離法、単連結法(single linkagr)法とも呼ばれる。最近隣法は、2つのクラスターのそれぞれの中から1個ずつ個体を選んで個体間の距離を求め、それらの中で、最も近い個体間の距離をこの2つのクラスター間の距離とする方法である。
■ 最遠隣法
最遠隣法(furthest neighbor method)は、最遠距離法、完全連結(complete linkage)法とも呼ばれる。最遠隣法は、最近隣法とは逆に、2つのクラスターの中のそれぞれの中から1個ずつ個体を選んで個体間の距離を求め、それらの中で、最も遠い個体間の距離をこの2つのクラスター間の距離とする方法である。
■ 群平均法
群平均法(group average method)は、最近隣法と最遠隣法を折衷した方法で、2つのクラスターのそれぞれの中から1個ずつ個体を選んで個体間の距離を求め、それらの距離の平均値を2つのクラスター間の距離とする。
■ 重心法
重心法(centroid method)は、クラスターのそれぞれの重心(例えば、平均ベクトル)を求め、その重心間の距離をクラスターの間の距離とする。重心を求める際には、クラスターに含まれる個体数が反映されるように、個体数を重みとして用いる。
■ メディアン法
メディアン(median method)法は、重心法の変形で、2つのクラスターの重心の間の重み付きの距離を求めるとき、重みを等しくして求めた距離の値を、2つのクラスター間の距離とする。
■ ウォード法
ウォード法(Ward's method)は、2つのクラスターを融合した際に、群内の分散と群間の分散の比を最大化する基準でクラスターを形成していく方法である。ウォード法は最小分散法(minimum variance method)とも呼ばれている。
これらのコーフェン行列作成過程で、新しいクラスターを形成する際のクラスター間の距離は次の式で求める。式の中のdij,d(ij)k,dik,djkは図3に示すクラスター間の距離で、αi,αj,β,γはパラメータ(係数)である。パラメータと上述の方法との対応関係を表2に示す。
これら以外にも、可変 (flexible) 法、McQuitty法、重みつき群平均法などがある。
Rのパッケージstatsには階層的クラスター分析の関数hclustがる。その書き式を次に示す。
hclust(d, method = "complete", …)
引数dは、距離構造のデータで、引数methodにはクラスター分析の方法を指定する。デフォルトにはcomplete法が指定されている。関数hclustで扱う方法及びその引数を表3に示す。
表3 方法の名称と引数の対応
| 引数の文字列 |
方法の名称 |
| single |
最近隣法 |
| complete |
最遠隣法 |
| average |
群平均法 |
| centroid |
重心法 |
| median |
メディアン法 |
| ward |
ウォード法 |
| mcquitty |
McQuitty法 |
関数hclustを用いてクラスター分析を行う際に必要となる幾つかの関数を表4に示す。
表4 関連関数と解析結果
| 名称 |
機能 |
| summary |
結果のオブジェクトのリストを返す |
| plot |
樹形図を作成する |
| plclust |
樹形図を作成する |
| cutree |
クラスター(房)の数を指定し、グループ分けする |
| cophenetic |
コーフェン行列を返す |
(2)関数 hclust
■ 関数hclustの結果
まずユークリッド距離を用いた関数hclustの使用例を示す。データは、表1のデータ(seiseki)を用いる。
> sei.d<-dist(seiseki)
> (sei.hc<-hclust(sei.d))
Call:
hclust(d = sei.d)
Cluster method : complete
Distance : euclidean
Number of objects: 7
返された結果から、用いた方法は"complete"(最遠隣法)、距離は" euclidean"(ユークリッド)であることが分かる。また、用いたデータの個体数に関する情報も返される。
関数summaryで、結果のオブジェクトに格納されたリストを確認することができる。
> summary(sei.hc)
| |
Length |
Class |
Mode |
| merge |
12 |
-none- |
numeric |
| height |
6 |
-none- |
numeric |
| order |
7 |
-none- |
numeric |
| labels |
7 |
-none- |
character |
| method |
1 |
-none- |
character |
| call |
2 |
-none- |
call |
| cophenetic |
1 |
-none- |
dist.method |
merge は、クラスター形成の履歴のマトリックスである。
> sei.hc$merge
| |
[,1] |
[,2] |
| [1,] |
-2 |
-6 |
| [2,] |
-3 |
-5 |
| [3,] |
-1 |
2 |
| [4,] |
-7 |
1 |
| [5,] |
-4 |
3 |
| [6,] |
4 |
5 |
このデータは、階層的クラスターを形成する階層の情報である。マイナス符号が付いているのが個体の番号、マイナス符号が付いていないのがクラスターの番号である。行番号がクラスター形成の順番である。
用いた最遠隣法(complete)では、ステップ1(第1行)は、個体2(佐藤)と個体6(吉野)がクラスター1を形成する。ステップ2(第2行)は、個体3(鈴木)と個体6(川端)がクラスター2を形成する。ステップ3(第3行)は、個体1(田中)とクラスター2が新しいクラスター3を形成する。
height はクラスターを形成する際の、樹形図の枝の長さ(高さ)を返す。
> sei.hc$height
[1] 12.40967 21.30728 33.77869 45.58509 60.13319 91.53142
この値は、mergeの結果と対応する。例えば、個体2(佐藤)と個体6(吉野)の距離(枝の長さ)は12.40967である。
order は樹形図の左から右方向の個体の番号を返し、labels は個体のラベル、methodは用いた方法、callは用いた関数hclustの書き式、dist.method は用いた距離の方法の名称を返す。
> sei.hc$order
[1] 7 2 6 4 1 3 5
■ 樹形図
関数plotあるいはplclustを用いてhclustの結果の樹形図を作成することができる。次に関数plotを用いた4つの樹形図を示す。引数hang=-1はラベルの高さを揃える。
> par(mfrow=c(2,2))
> plot(sei.hc,main="最遠隣法")
> plot(sei.hc,hang=-1,main="最遠隣法")
> s.hc2<-hclust(sei.d,method="centroid")
> plot(s.hc2,hang=-1,main="重心法")
> s.hc3<-hclust(sei.d,method="ward")
> plot(s.hc3,hang=-1,main="ウォード法")
続く