「1次治療から2次治療へ、患者はどのように遷移しているのか?」
「どのタイミングで治療の切り替え(スイッチ)が多く発生しているのか?」
医療データや臨床研究の結果を報告する際、こうした「流れ」の把握は極めて重要である。そこで威力を発揮するのがサンキーダイアグラム(Sankey Diagram)だ。
一見複雑そうに見えるが、R言語を使えば数行のコードで作成できる。本記事では、治療薬のライン遷移(1st Line 〜 3rd Line)を例に、初心者でも迷わず実装できる方法を解説する。
サンキーダイアグラムとは
サンキーダイアグラムは、データの「流れ(フロー)」を「線の太さ」で表現した図表である。
- ノード(Node): 治療薬の種類や治療段階を示す「節」
- リンク(Link): 治療の切り替えを示す「線」
- 太さ: 患者数や割合などの「量」
「どこから、どの程度の量が、どこへ流れたのか」を、川の流れのように直感的に捉えられるのが最大の特徴だ。
なぜ医療データの可視化に使うのか
メリット:ペイシェントジャーニーの可視化
従来の表形式では理解しにくい「治療パターンの全体像」を、1枚の図で示すことができる。
- 傾向の把握: 「A薬の後はB薬が選ばれやすい」といった傾向が視覚的に伝わる。
- ボトルネックの発見: どこで治療が止まっているか、あるいは特定の薬に集中しているかが即座に判明する。
注意点と限界
- 微細な数値比較には不向き: 僅かな人数の差は線の太さだけでは判別しにくいため、厳密な比較が必要な場合は棒グラフや表を併用すべきである。
- 情報の絞り込み: 薬剤の種類が多すぎると線が交差して視認性が下がる。主要な薬剤以外は「その他」にまとめるなどの工夫が求められる。
Rで治療ラインの遷移図を作成する
実際にRを用いて作成する。今回は、同じ薬剤であればどの治療段階(Line)においても同じ色になるよう設定する、実務的なコードを紹介する。
ステップ1:準備
まず、描画に必要なパッケージ networkD3 をインストールし、読み込む。
# パッケージのインストールと読み込み
if (!require(networkD3)) install.packages("networkD3")
library(networkD3)
ステップ2:データの作成
「ノード(薬剤名)」と「リンク(どの薬からどの薬へ何人流れたか)」を定義する。Rの networkD3 では、ノード番号が「0」から始まる点に注意が必要だ。
# 1. ノード(各ラインの薬剤名)の定義
# ラインごとに別ノードとして定義しつつ、薬剤名でグループ分けを行う
nodes <- data.frame(name = c(
"治療薬A (1st)", "治療薬B (1st)", # index 0, 1
"治療薬B (2nd)", "治療薬C (2nd)", "治療薬D (2nd)", # index 2, 3, 4
"治療薬A (3rd)", "治療薬B (3rd)", "治療薬C (3rd)", "治療薬D (3rd)", "治療薬E (3rd)" # 5-9
),
group = c("A", "B", "B", "C", "D", "A", "B", "C", "D", "E")) # 色分け用のグループ
# 2. リンク(治療の遷移)の定義
# source(元)とtarget(先)はnodesのインデックス番号を指定
links <- data.frame(
source = c(0,0,0, 1,1, 2,2, 3,3,3, 4,4),
target = c(2,3,4, 3,4, 5,6, 7,8,9, 8,9),
value = c(10, 5, 2, 8, 4, 7, 3, 6, 4, 3, 2, 4) # 患者数などに相当
)
ステップ3:色の固定と描画
薬剤ごとに色を統一するため、JavaScript形式でカラーパレットを指定して描画する。
# カスタムカラーパレットの設定(薬剤ごとに色を固定)
my_color <- 'd3.scaleOrdinal()
.domain(["A", "B", "C", "D", "E"])
.range(["#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00"])'
# 描画の実行
sankeyNetwork(Links = links, Nodes = nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
NodeGroup = "group", # 薬剤グループで色分け
colourScale = my_color, # 自作カラーを適用
fontSize = 14, nodeWidth = 40,
sinksRight = FALSE) # 左から順に整列させる設定

作成を成功させるコツ
- ラベルの命名規則: 薬剤名に
(1st)などの接尾辞を付けることで、図の左右どちらに位置しているノードかが明確になる。 - 色の統一: 同じ薬剤を全ラインで同じ色に固定することで、読者の視線移動をスムーズにし、認知負荷を下げることができる。
- 中断データの扱い: 実際の解析では「治療中断(Discontinued)」というノードを設けることで、より正確な実態を反映できる。
まとめ
サンキーダイアグラムは、ペイシェントジャーニーや治療変遷をストーリーとして伝える強力な武器である。
- 「流れ」と「量」を同時に、かつ直感的に可視化できる。
- Rを用いれば、薬剤ごとの色分けなどのカスタマイズも容易である。
- 複雑な遷移パターンを整理し、一目で全体像を共有できる。
まずは本記事のサンプルコードを手元のデータに置き換えて、図を描くところから始めてほしい。これまで見えてこなかった「患者の流れ」における新たな知見が得られるはずだ。
おすすめ書籍
誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!




コメント