霞と側杖を食らう

ほしいものです。なにかいただけるとしあわせです。[https://www.amazon.jp/hz/wishlist/ls/2EIEFTV4IKSIJ?ref_=wl_share]

カプランマイヤー曲線からデータを復元する方法の学習記録(前編)

【学習動機】

論文に描かれているKaplan-Meier curve(カプランマイヤー曲線)からtime-to-eventデータを再現したいということがある. たとえば, meta-analysis(メタアナリシス)やcost-effectiveness analysis(費用効果分析), その他の二次的な分析をしたいときなどである. このようなときに, time-to-eventデータを復元する方法として, よく見かけるのが, Guyot et al. (2012) [Enhanced secondary analysis of survival data: reconstructing the data from published Kaplan-Meier survival curves]の方法である. この方法について, 具体的に解説している日本語の文献や記事が見当たらなかったので, ここに書き留めておくことにした.

復元の手順としては, Kaplan-Meier curve(カプランマイヤー曲線)からGraph Digitization Software(グラフ数値化ソフトウェア?)を使ってグラフ上の各軸の値を取得して, その取得した値をGuyot et al. (2012) の提案したアルゴリズムを使って, 個々のtime-to-eventデータを復元していくことなる. この記事では, 前半のdigitize(digitise, 数値化)の方法について書き, 後半のGuyot et al. (2012)の方法については別の記事で書く.

【学習内容】

グラフから数値を読み取るためのdigitizeのソフトウェアは複数あって, どれを使うと良いか悩んでいたら, Matsumotoらのポスターで, “A Comparison of Graph Digitization Software for the Reconstruction of Published Kaplan Meier Curves”というものを発見した.

[https://www.valueinhealthjournal.com/article/S1098-3015(20)33910-3/fulltext]

[https://www.ispor.org/docs/default-source/euro2020/ispor-eu-2020-posterdigitization-pdf.pdf?sfvrsn=8d602d2f_0] (pdf注意)

自分の環境や条件, 目的に合わせて, 選択すれば良さそうである. この記事では, OSがwindowsで, ブラウザ上でも使えるWebPlotDigitizerを使うことにした.

[WebPlotDigitizer - Extract data from plots, images, and maps]

(ちなみに, Guyot et al. (2012)では, DigitizeItが使われている.)

基本的には, Tutorialを眺めれば良いのだけれど, 以下でやり方を書いていく. digitizeの対象とするカプランマイヤー曲線をどれにしようか考えて, 色々論文を検索したのだが, 例にしたら面白そうと思ったものがことごとく有料文献ばかりだったので, 結局, Rの{survival}パッケージに含まれるlungデータセットを使うことにした. カプランマイヤー曲線も自作する.

パッケージの読み込み.

library(tidyverse)
library(survival)
library(survminer)

カプランマイヤー曲線の作成.

fit <- survfit(Surv(time, status) ~ 1, data = lung)

p <- ggsurvplot(fit, 
                data = lung,
                conf.int = FALSE,
                risk.table = TRUE)
p  

図の保存.

ggsave(file = "KM.png", 
       plot = p$plot,
       width = 12,
       height = 4)

保存したWebPlotDigitizerでFileのLoad Imageから保存した画像をロードし, 2D plotを選択する. 次に, X軸とY軸の値の基準となる点を各軸2点ずつ選択する. これらの点から座標が設定されることになる. 選択したら, Completeを押す.

次に左上のTime=0, Probability=1から, カプランマイヤー曲線の曲がり角を選択していく. Add pointやDelete pointなどを駆使しながら, 左側から順番に押していく. 打ち切りの縦線は無視する. カプランマイヤー曲線の画像が荒かったり, 複数曲線があって重なってたりすると大変だったりする. 狙った点をクリックするためにマウスの反応速度を調整したりすると良いかと思う.

ちなみに, Guyot et al. (2012)の方法に必要なのは, 横線の左端の点があればよく, 右端は要らないのだが, 右端も取っておくと, 後で得られたデータをプロットするときにカプランマイヤー曲線を再現できるので, 一緒に取ってしまっている.

必要な点をクリックし終えたら, View Dataからデータを落とす.

 

取得したデータをRで読み込んで確認する. 

df <- read_csv("KM.csv",
               col_names = c("Time", "Prob"),
               show_col_types = FALSE)

プロットして確認.

ggplot(df, aes(x=Time, y=Prob)) +
  geom_line() +
  theme_bw()

画像の粗さとかから復元に限界はあるけれど, ある程度似たような曲線が得られたと思う.

取得したデータの加工やNumber at riskのデータ作成は後半の記事で行う.

【学習予定】

後半のGuyot et al. (2012)の方法についての記事を書く. 書いたらアップする.