Topic 28
階層的クラスター分析:Ward法 × デンドログラム
Hierarchical clustering in R with Ward method and dendrogram
似ている観測どうしを、どの順番でひとまとまりにしていくかを見たいときの基本テーマです。hierarchical clustering は、最終的にデンドログラム(樹形図)として結果が返るので、クラスタ数を探索的に考える入口として使いやすい手法です。
講義資料では、全国の漁業関連指標を使って階層的クラスター分析を行い、Ward法・距離行列・デンドログラム・散布図による確認までを一連で扱っていました。ここではその流れを、練習用に少し小さくしたサンプルデータで再現できるように整理しています。
特に大切なのは、単位の大きい変数だけで距離が決まらないように scale() で標準化すること、Ward法では method = "ward.D2" を使うこと、そして枝の長いところを見ながらクラスタ数を暫定的に決めることです。
このページのゴール
- 階層的クラスター分析の考え方を「似たものを順番にまとめる」と説明できるようになる
- scale() → dist() → hclust() → cutree() の順番を再現できる
- Ward法とユークリッド距離の関係を初学者向けに説明できるようになる
- デンドログラムと散布図を組み合わせて結果を読み取れるようになる
まず押さえるポイント
このページでできること
階層的クラスター分析の最小ルートを、読み込み → 標準化 → 距離行列 → Ward法 → デンドログラム → cutree() → 散布図、という順に追います。
クラスター分析は教師なし学習の代表例で、正解ラベルを持たない観測を「似ているもの同士」でまとめる手法です。講義資料では、サンプル同士の類似性・距離、クラスター間距離、Ward法、デンドログラムの切り方、WSS やシルエット係数などの検討指標まで順に整理されていました。
このページでは、まずいちばん定番の hclust() と method = "ward.D2" を使い、結果をどう読むかに焦点を当てます。クラスター数を 1 回で正しく当てることより、いくつかの候補を持ちながら解釈可能性を比較することが重要です。
分析の前提
階層的クラスター分析の考え方
似ているものを順にまとめる
階層的クラスター分析では、まず各観測がそれぞれ別のクラスターとして始まり、距離の近いものどうしを順番にまとめていきます。最後には全観測が1つの群へ統合され、その過程がデンドログラムとして返ります。
Ward法は「群内平方和の増加が小さい併合」を選ぶ
Ward法は単純な最近距離ではなく、2つのクラスターを併合したときに群内平方和(WSS)の増加量が小さい組み合わせを優先する方法です。まとまりが凝集したクラスターを作りやすいので、教育用の最初の手法として扱いやすいです。
階層的と非階層的の違い
k-means のような非階層的クラスター分析は、あらかじめ k を決めて観測を分割します。一方で階層的クラスター分析は、まず樹形図を見てから暫定的なクラスター数を考えたい場面に向いています。
前提条件の確認
実行前に確認したいこと
標準化
海岸線延長と漁港数のように単位や桁が違う変数をそのまま距離へ入れると、大きい尺度の変数だけが距離を支配します。まず scale() をかけるのが基本です。
外れ値
極端な外れ値は距離行列に強く影響します。散布図や箱ひげ図で分布を見て、明らかな入力ミスがないかを先に確認します。
距離と併合法
Ward法とユークリッド距離の組み合わせが最初の基本です。カテゴリ変数が混ざるときは、Gower距離やMCA/HCPC を検討します。
解釈可能性
クラスター数は統計指標だけでなく、「その群を研究文脈で説明できるか」も重視します。
データ構造
ここで使う練習用データ
講義資料では「漁業センサス」由来の都道府県データを例にしていました。このサイトでは、その流れを追いやすいように、都道府県 × 5変数の練習用サンプルを用意しています。
- coastal_line_km:海岸線延長
- n_port:漁港数
- n_vessel:漁船総隻数
- n_entities:漁業経営体数
- n_engaged:漁業従事者数
いずれも数値変数なので、まず str()・summary() で確認し、距離計算に入る前に標準化します。
R code
Rコードを順番に実行する
library(tidyverse)
library(psych)
d <- read.csv(
"sample-data/sample_hierarchical_clustering_prefectures.csv",
row.names = 1
)
str(d)
summary(d)
describe(d)
# 単位の違いをそろえる
x <- scale(d)
# Ward 法を使うので、まずユークリッド距離を作る
x_dist <- dist(x, method = "euclidean")
# 階層的クラスター分析
hc <- hclust(x_dist, method = "ward.D2")
# デンドログラム
plot(hc, hang = -1, cex = 0.8)
# 仮に k = 3 で切る
k <- 3
rect.hclust(hc, k = k, border = 2:4)
cluster_id <- cutree(hc, k = k)
out <- d %>%
tibble::rownames_to_column("prefecture") %>%
mutate(cluster = factor(cluster_id))
out %>% count(cluster)
library(ggplot2)
ggplot(out, aes(x = n_port, y = n_vessel, color = cluster, label = prefecture)) +
geom_point(size = 3) +
geom_text(nudge_y = 350, size = 3, check_overlap = TRUE) +
labs(
x = "Number of ports",
y = "Number of vessels",
title = "Hierarchical clustering result"
) +
theme_minimal(base_size = 13)
出力の読み方
どこを見ればよいか
デンドログラムの縦軸
縦方向の高さは、どの程度離れたものどうしが併合されたかの目安です。急に高さが伸びる箇所の手前で切ると、自然なクラスタ数の候補になりやすいです。
cutree() の結果
cluster_id は各観測がどのクラスタへ入ったかを示します。まずは count(cluster) で各群のサイズを確認し、極端に小さい群がないかを見ます。
距離行列ヒートマップは補助に使う
都道府県名の並び順によって見え方は変わりますが、距離が近い組み合わせが淡い色で固まっていれば、クラスタ構造の雰囲気をつかみやすくなります。
図の読み方
デンドログラムと散布図をセットで読む
デンドログラムだけでクラスタ数を決めようとすると、どの群がどう違うのかが見えにくいことがあります。そこで、2変数だけ取り出した散布図で色分けし、群の特徴が実際に見えるかを確認すると解釈しやすくなります。
今回の練習データでは、漁港数と漁船数が多い群、全体に中くらいの群、相対的に小さい群、といった読みが立てやすくなります。もちろん本番では2変数だけで全部は語れないので、各クラスターの平均値表も併用するのが安全です。
レポート文例
結果をどう書くか
日本語の例
標準化した5変数(海岸線延長、漁港数、漁船総隻数、漁業経営体数、漁業従事者数)に基づいて階層的クラスター分析を行った。距離にはユークリッド距離を用い、併合法には Ward 法(ward.D2)を適用した。デンドログラムの枝の長さを参考に 3 クラスターで切ったところ、規模の大きい沿岸地域群、中規模群、小規模群という探索的なまとまりが示唆された。
English example
A hierarchical cluster analysis was conducted on five standardized fisheries-related variables using Euclidean distance and Ward's method (ward.D2). Inspection of the dendrogram suggested a three-cluster solution, which tentatively separated larger-scale coastal units, mid-sized units, and relatively small-scale units.
図キャプション例: 図1 Ward 法による階層的クラスター分析のデンドログラムと、クラスター情報を反映した散布図。
よくあるミス
つまずきやすい点
標準化を忘れる
桁の大きい変数だけで距離が決まり、クラスタが歪みます。
クラスター数を自動的に決め打ちする
WSS やシルエットは補助です。最終的には解釈可能性を必ず見ます。
枝の高さを「人数」と誤解する
デンドログラムの縦軸は距離や併合コストの目安であり、単純な人数ではありません。
クラスターを因果的に読む
クラスタリングは探索的手法です。群が見えたとしても原因を直接証明するものではありません。
FAQ
よくある質問
Q. ward.D と ward.D2 は何が違いますか?
A. 最初の入門では ward.D2 を使う方が分かりやすいです。ユークリッド距離から平方距離ベースの Ward 法として扱われます。
Q. 何クラスターにすればよいですか?
A. 枝の長さ、各群のサイズ、群平均の解釈しやすさ、WSS やシルエットなどを合わせて考えます。1つの指標だけで決めない方が安全です。
Q. カテゴリ変数が混ざっています。
A. そのままユークリッド距離へ入れるのは避け、Gower 距離や MCA/HCPC のような方法を検討してください。
代替手法
代替手法・次のステップ
クラスター数を先に決めるか、カテゴリ変数を扱うか、次元縮約を先に行うかで選ぶ手法が変わります。
k-means 法
観測数が多く、あらかじめクラスタ数を決めて分割したいときの定番です。
HCPC
主成分分析や MCA の結果を踏まえてクラスタリングしたいときに便利です。
PCA → クラスタリング
変数が多く相関も強いときは、先に主成分へ要約してからクラスタリングする方が見通しが良くなることがあります。
参考資料
参考資料
まずは base R の関数仕様、その後にクラスタリングの可視化やクラスター数検討の資料を見ると追いやすいです。
運営と利用上の注意
このページの位置づけ
本サイトのトピックページは、Rによるデータ分析の学習支援とレポート作成の補助を目的としたオリジナル解説です。サンプルデータとコードは再現練習用に作成しているため、実データを扱う際には研究計画・前提条件・欠測・外れ値・尺度水準をあらためて確認してください。
編集方針
ページ本文は、標準的な統計手法、Rの公式ドキュメント、一次資料に近い参考文献を優先して整理しています。更新や訂正の方針は編集方針ページで公開しています。