ggplot2で 生存時間分析のグラフ作成

伊東宏樹

2025-11-15

生存時間分析

あるイベントが発生するまでの時間を分析

  • 病気の人の死亡

  • 機械の故障

「打ちきり」がある

  • 試験終了時までにイベントが発生しなかった

  • 途中で追跡できなくなった

生存時間曲線

横軸: 時間、縦軸: 生存率、のグラフ

カプラン=マイヤー曲線がよく使われる

  • イベント発生時に生存率が下がる

  • 階段状にプロット

  • 具体例はのちほど

Rで生存時間分析

survivalパッケージが標準的

> library(survival)

aml: 急性骨髄性白血病 (acute myelogenous leukemia) 患者の生存データ

> data(cancer, package = "survival")
> help(aml) # データの詳細を表示
> head(aml)
  time status          x
1    9      1 Maintained
2   13      1 Maintained
3   13      0 Maintained
4   18      1 Maintained
5   23      1 Maintained
6   28      0 Maintained

カプラン=マイヤー曲線

> fit <- survfit(Surv(time = time, event = status) ~ x,
+                data = aml)
> par(mai = c(0.5, 0.5, 0.1, 0.1)) # 余白の調整
> plot(fit, mark.time = TRUE, col = c(2, 5), lwd = 2)

survminerパッケージ

> library(survminer)
> ggsurvplot(fit)

jskmパッケージ

> library(jskm)
> jskm(fit)

ggplot2.utilsパッケージ

> library(ggplot2.utils)
> ggplot(aml, aes(time = time, status = status, color = x)) +
+   geom_km()

表示の調整

> library(ggplot2.utils)
> ggplot(aml, aes(time = time, status = status, color = x)) +
+   geom_km() +
+   geom_km_ticks() +
+   labs(x = "時間(週)", y = "生存率") +
+   scale_color_discrete(name = "維持化学療法",
+                        label = c("あり", "なし")) +
+   theme_classic(base_family = "Noto Sans JP",
+                 base_size = 21) +
+     theme(legend.position = "inside",
+           legend.position.inside = c(0.95, 0.95),
+           legend.justification = c("right", "top"),
+           legend.box.background = element_rect())

表示の調整

まとめ

ggplot2をつかった、カプラン=マイヤー曲線の表示方法

  • survminerパッケージのggsurplot関数

  • jskmパッケージのjskm関数

  • ggplot2.utilsパッケージのgeom_km関数

細かく調整したいときはggplot2.utilsパッケージを使うのがいいかも