MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

サンキーダイアグラムで治療の遷移を可視化する:Rによる作成ガイド


「1次治療から2次治療へ、患者はどのように遷移しているのか?」

「どのタイミングで治療の切り替え(スイッチ)が多く発生しているのか?」

医療データや臨床研究の結果を報告する際、こうした「流れ」の把握は極めて重要である。そこで威力を発揮するのがサンキーダイアグラム(Sankey Diagram)だ。

一見複雑そうに見えるが、R言語を使えば数行のコードで作成できる。本記事では、治療薬のライン遷移(1st Line 〜 3rd Line)を例に、初心者でも迷わず実装できる方法を解説する。


>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

サンキーダイアグラムとは

サンキーダイアグラムは、データの「流れ(フロー)」を「線の太さ」で表現した図表である。

  • ノード(Node): 治療薬の種類や治療段階を示す「節」
  • リンク(Link): 治療の切り替えを示す「線」
  • 太さ: 患者数や割合などの「量」

「どこから、どの程度の量が、どこへ流れたのか」を、川の流れのように直感的に捉えられるのが最大の特徴だ。


なぜ医療データの可視化に使うのか

メリット:ペイシェントジャーニーの可視化

従来の表形式では理解しにくい「治療パターンの全体像」を、1枚の図で示すことができる。

  • 傾向の把握: 「A薬の後はB薬が選ばれやすい」といった傾向が視覚的に伝わる。
  • ボトルネックの発見: どこで治療が止まっているか、あるいは特定の薬に集中しているかが即座に判明する。

注意点と限界

  • 微細な数値比較には不向き: 僅かな人数の差は線の太さだけでは判別しにくいため、厳密な比較が必要な場合は棒グラフや表を併用すべきである。
  • 情報の絞り込み: 薬剤の種類が多すぎると線が交差して視認性が下がる。主要な薬剤以外は「その他」にまとめるなどの工夫が求められる。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

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)」というノードを設けることで、より正確な実態を反映できる。

まとめ

サンキーダイアグラムは、ペイシェントジャーニーや治療変遷をストーリーとして伝える強力な武器である。

  1. 「流れ」と「量」を同時に、かつ直感的に可視化できる。
  2. Rを用いれば、薬剤ごとの色分けなどのカスタマイズも容易である。
  3. 複雑な遷移パターンを整理し、一目で全体像を共有できる。

まずは本記事のサンプルコードを手元のデータに置き換えて、図を描くところから始めてほしい。これまで見えてこなかった「患者の流れ」における新たな知見が得られるはずだ。

おすすめ書籍

誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次