Ward法は「データが少ないほど精度が高い」と思われがちですが、実は100件未満の小規模データでも誤った標準化をすると分類精度が著しく低下し、研究やレポートの結論そのものが逆転するケースがあります。
クラスター分析とは、データの「似ている度合い(類似度)」に基づいてデータを自動的にグループ分けする統計手法です。医療の現場では、患者の症状・検査値・治療反応などを客観的に分類するために広く使われています。
クラスター分析には大きく「階層型」と「非階層型」の2種類があります。Ward法(ウォード法)はこの中の「階層型(階層的クラスタリング)」に分類されます。階層型の最大の特徴は、あらかじめクラスター数を決めずに分析をスタートできる点です。これは「何グループに分ければよいか分からない」状況の多い探索的研究において、非常に大きなメリットになります。
階層的クラスタリングの流れは以下のとおりです。
Ward法はこの階層的クラスタリングの中で最も広く使われている手法の一つです。他の手法(最短距離法・最長距離法・群平均法など)と異なり、Ward法は「2つのクラスターを統合した場合に、クラスター内の分散(偏差平方和)がどれだけ増加するか」を距離の基準にします。つまり、最も増加量が小さい組み合わせを選んで統合していくわけです。
分散の増加を最小化するということですね。これにより、各クラスターが内部的にコンパクトにまとまった、バランスの取れた分類が得られやすくなります。
医療研究においてWard法が好まれる理由の一つは、外れ値(異常値)への強さです。最短距離法などは外れ値の影響を強く受けますが、Ward法は分散を基準にするため、外れ値が一つあっても結果が大きく崩れにくい特性があります。たとえば、1人だけ極端に高い検査値を持つ患者がいたとしても、それに引っ張られてクラスター全体が歪むリスクが比較的小さいです。
これは使えそうですね。
Ward法の実際の計算手順を、医療データのイメージで確認しましょう。たとえば、患者10名の「血糖値・BMI・年齢」という3変数のデータをWard法でクラスタリングするとします。
まず前提として、Ward法で距離を計算する際は「偏差平方和(ESS:Error Sum of Squares)の増加量」を使います。具体的には下記のステップで進みます。
この過程を視覚化したものがデンドログラム(樹形図)です。デンドログラムは縦軸に「統合したときの距離(分散の増加量)」を、横軸に各データ点(患者ID等)を取ったグラフです。枝が低い位置で統合されているほど「より似た者同士」であることを意味します。
デンドログラムの読み方で最も重要なのは「どこで水平に切るか」です。切る高さによって得られるクラスター数が決まります。たとえば縦軸の距離が「5」の位置で切ると3クラスター、「10」の位置で切ると2クラスター、という具合です。
クラスター数の決め方が原則です。実務では以下の観点を複合的に使います。
特に医療データ解析では、「統計的に最適なクラスター数」と「臨床的に意味のあるグループ数」が一致しないことがあります。たとえば、検査値の統計解析では「4グループが最適」と出ても、それを診療上の分類に使うには意味が分かりにくい場合があります。この場合は3グループや2グループに絞って解釈する判断も必要です。
つまり、最終的な解釈は研究者の視点が必要です。デンドログラムを正しく読む力と、分野の専門知識は、常にセットで持っておく必要があります。
「8-4. 階層型クラスター分析1」(統計学の時間 / bellcurve.jp)
→ デンドログラムの構造と、クラスター数をどのように決定するかについて、図解付きで丁寧に解説されている。
Ward法を医療データに適用する際に最も見落とされがちな落とし穴が、変数の標準化(スケーリング)です。ここを正しく処理できていないと、分析結果が歪んだまま論文や報告書に載ってしまいます。意外ですね。
たとえば、患者データに「収縮期血圧(100〜180mmHg)」「BMI(18〜35)」「空腹時血糖(70〜400mg/dL)」を同時に使うとします。血糖値の数値範囲が他の変数と比べて圧倒的に広いです。このとき標準化をしないままWard法を適用すると、偏差平方和の計算が血糖値の影響だけに支配され、血圧やBMIはほとんど分類に寄与しない結果になります。
これがいわゆる「スケールの影響問題」です。3変数のうち1変数だけ数百倍大きなスケールを持つと、距離計算が実質的にその1変数の比較だけになってしまいます。
標準化の基本が条件です。一般的には「平均0・標準偏差1」に揃えるZスコア標準化(z-score normalization)を使います。Rであれば`scale()`関数、Pythonであれば`StandardScaler`(scikit-learn)を使えば、数行のコードで処理できます。
| 変数名 | 元のスケール | 標準化後 |
|---|---|---|
| 収縮期血圧 | 100〜180 mmHg | 平均0・標準偏差1 |
| BMI | 18〜35 | 平均0・標準偏差1 |
| 空腹時血糖 | 70〜400 mg/dL | 平均0・標準偏差1 |
もう一点、医療データで注意すべきはカテゴリ変数の扱いです。「性別(男/女)」「疾患分類(A/B/C)」のような質的変数は、量的変数(検査値など)と同じ距離計算式では扱えません。この場合は「Gower距離」を用いた変換が必要です。Gower距離は量的変数にはマンハッタン距離、質的変数にはダイス係数を組み合わせて計算する特殊な手法です。Rの`cluster`パッケージに含まれる`daisy()`関数で対応できます。
前処理を正しく行うことが基本です。大阪大学医学部Pythonサークルによる医療費データ(160次元)をWard法で分析した実例でも、標準化の有無による分類結果の差が明確に確認されており、前処理の重要性が実証的に示されています。
「クラスター分析」(大阪大学医学部Python会)
→ 医療系データへのクラスター分析の実装例と、前処理の重要性についての解説が含まれる。
Ward法は非常に汎用性の高い手法ですが、すべての場面で最適とは限りません。医療研究において頻繁に比較されるのが「K-means法(非階層型)」です。この2つは根本的に考え方が異なります。
| 比較項目 | Ward法(階層型) | K-means法(非階層型) |
|---|---|---|
| クラスター数の指定 | 不要(後から決める) | 事前に決める必要あり |
| データ量 | 少量〜中量に向く(目安:数百件以下) | 大量データに向く(数千件以上でも高速) |
| 再現性 | 高い(同じデータなら同じ結果) | 初期値のランダム性により結果が変わる可能性あり |
| 外れ値への強さ | 比較的強い | 弱い(外れ値がクラスター中心を引き寄せる) |
| 可視化 | デンドログラムで直感的に確認可能 | 散布図で確認(多変量では2〜3次元に落とす必要あり) |
| 医療研究での使用例 | 看護研究・患者類型化・アンケート分析 | 大規模レセプトデータ分析・病院間比較 |
注目すべきは「再現性」の違いです。Ward法は計算的に決定論的であり、同じデータを使えば必ず同じ結果が再現されます。一方、K-means法は初期の重心(セントロイド)の配置がランダムであるため、実行するたびに結果が微妙に変わることがあります。医療研究の論文として発表する場合、再現性は重要な信頼性の指標になります。Ward法はこの点で有利です。
ただし、サンプルサイズが500件を超えるような規模になってくると、Ward法は計算量が急激に増加するという特性があります。これはWard法がO(n³)の計算複雑度を持つためです。ざっくりと言えば、データが100件から200件に増えると、計算時間は2倍ではなく8倍になるイメージです。
厳しいところですね。このため、大規模なレセプトデータや電子カルテの全件データを扱う場合は、まずWard法で少量サンプルを使って仮のクラスター数を探り、そのクラスター数をK-means法に渡して全件分類する「2段階アプローチ」が実務では使われています。
日本看護研究学会誌(Volume 47, Number 2)では、Ward法について「クラスター内のデータ平方和を最小にするように考慮した方法で、クラスター分析法の中では比較的まとまりのある結果が得られやすい手法」として、その優位性を明記しています。看護研究においてはまさにスタンダードな手法として位置づけられています。
「Volume 47 Number 2 July 2024」(日本看護研究学会誌)
→ 看護研究においてWard法が採用される理由と、その統計的根拠が論文内で言及されている。
Ward法のクラスター分析は、医療現場でどのように使われているのでしょうか?実際の研究事例を交えながら、結果の解釈方法まで確認しましょう。
【事例1:患者分類への応用】
厚生労働科学研究(研究番号201419037A)では、4,908名の患者データに対してWard法によるクラスター分析を実施し、患者を複数のグループに分類した上で、各グループの特性を検討しています。これは東京ドーム約1個分の座席数(約55,000人)の約9%に相当する規模のデータで行われた、実用的な医療研究の事例です。
【事例2:医療安全文化の分析】
慶應義塾大学の医療機関における医療事故未然防止研究では、医療従事者の安全文化スコアをもとにWard法(平方ユークリッド距離)でクラスター分析を行い、4グループへの分類を実施しています。各グループがどのような安全意識のパターンを持つかを明確化し、介入プログラムの設計に役立てた事例です。
【事例3:多病院間の医療指示パターン比較】
複数病院の医療指示データに対してWard法と群平均法を比較適用した研究では、Ward法の方が医療機関ごとの特徴をより明瞭に切り分けられることが確認されています。
これらの事例に共通する「結果の解釈」のポイントをまとめると以下のようになります。
注意点として、Ward法の結果は「必ずしも解釈可能とは限らない」という現実があります。統計的に最もきれいな分類が出ても、「このグループは一体どんな患者なのか」という意味が掴みにくいケースもあります。これはWard法の欠点ではなく、クラスター分析全体に言えることです。試行錯誤が原則です。変数の選び方を変えたり、クラスター数を変えたりしながら、「臨床的に説明できる結果」を目指すことが重要です。
「医療機関における医療事故未然防止のための安全文化醸成に向けた研究」(慶應義塾大学)
→ Ward法(平方ユークリッド距離)による医療従事者の安全文化スコアのクラスタリング事例が詳述されている。
実際にWard法を使った分析を始めるには、RとPythonのどちらでも対応できます。医療系研究者に比較的なじみ深いRでの基本コードと、近年普及が進んでいるPythonでの実装例を紹介します。
【Rでの実装例】
```r
# 1. データの読み込みと標準化
data <- read.csv("patient_data.csv")
data_scaled <- scale(data, c("血糖値", "BMI", "収縮期血圧"))
# 2. 距離行列の計算(ユークリッド距離)
dist_matrix <- dist(data_scaled, method = "euclidean")
# 3. Ward法でクラスタリング
hclust_result <- hclust(dist_matrix, method = "ward.D2")
# ※ "ward.D2" が厳密なWard法(偏差平方和の増加量を最小化)
# 4. デンドログラムの描画
plot(hclust_result, main = "患者データのWard法クラスタリング")
# 5. クラスター数を決定してラベルを付与(例:3クラスター)
clusters <- cutree(hclust_result, k = 3)
data$cluster <- clusters
```
Rのポイント:`ward.D` と `ward.D2` の違いに注意が必要です。`ward.D`は旧バージョンのRで使われていた実装で、厳密なWard法ではありません。距離の二乗を扱う`ward.D2`が正しいWard法の実装です。論文等で使用する際は必ず`ward.D2`を指定してください。
【Pythonでの実装例】
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
import matplotlib.pyplot as plt
# 1. データ読み込みと標準化
df = pd.read_csv("patient_data.csv")
features = "血糖値", "BMI