研究者: カプランマイヤー曲線を描いたら、途中で2本の線が交差(Cross)してしまいました……。このままCox回帰を行ってハザード比(HR)を出しても大丈夫でしょうか?
統計ER: 曲線が交差している(=ハザード比が時間で変動している)場合、単一のハザード比を出すのは危険です!最新の臨床研究では、比例ハザード性に依存しないRMST(制限付き平均生存時間)を使うのが最もスマートですよ。
臨床研究や観察研究において、生存時間解析(カプランマイヤー曲線やCox比例ハザードモデル)を実施する際、以下のような現象に遭遇して頭を抱えた経験はないだろうか。
- 「カプランマイヤー(KM)曲線を描いてみたら、途中で2本のラインが大きく交差(Cross)してしまった」
- 「Schoenfeld残差プロットを描くと、水平ではなく右肩上がり/右肩下がりに斜めに傾いている」
Cox比例ハザードモデルは大前提として「比例ハザード性の仮定(Proportional Hazards Assumption:PH仮定)」、すなわち時間の経過によって2群間のリスク比(ハザード比)が変化しないという強い仮定を置いている。
生存曲線が交差している(=ハザード比が時間によって変化している)にもかかわらず、無理やりCox回帰を適用して「単一のハザード比(例: HR = 0.85)」を算出してしまうと、初期の治療効果や後期の逆転現象が平均化され、臨床的な真実を不当に隠蔽・過小評価してしまう危険性がある。
重要:比例ハザード性の確認方法
比例ハザード性の確認において「仮説検定のP値」に頼りすぎるのは好ましくない。サンプルサイズが小さいと不適格でも有意になりにくく、逆に大サンプルではわずかなズレでも有意になってしまうためである。比例ハザード性は、Schoenfeld残差プロットなどの「グラフによる視覚的な確認」で判定するのが統計学的な鉄則である。
本記事では、Schoenfeld残差プロット等で比例ハザード性が怪しいと判定された際の「4大対処法と使い分けルール」を整理し、特に現代の臨床研究で最推奨されているRMST(制限付き平均生存時間:Restricted Mean Survival Time)の概念とRでの実践コードを分かりやすく解説する。
比例ハザード性が怪しいときの「4大対処法」と使い分けチャート
比例ハザード性が保たれていない場合、漠然と解析を進めるのではなく、「どの変数の仮定が破綻しているか」に応じて適切なアプローチを選択する必要がある。
1. 主な対処法の意思決定フロー
- 関心のある主要な「曝露変数(治療群など)」の仮定が破綻している場合 ➔ RMST(制限付き平均生存時間)【第一選択】 または 期間分割モデル
- 調整用の「背景共変量(年齢・病期・施設など)」の仮定が破綻している場合 ➔ 層別化Cox回帰(Stratified Cox Model)
2. 調整用共変量が破綻しているなら「層別化Cox回帰」
主要な曝露変数(治療群)の比例ハザード性は維持されているが、調整用共変量(例: 病期 Stage や施設差)の比例ハザード性が崩れている場合は、層別化Cox回帰(strata()) を用いるのが最もスマートである。
層別化Cox回帰の詳しい仕組みやRでの記述法、strata() を入れた際にその変数のハザード比が出力されなくなる仕様については、以前に解説したこちらの記事を参照してほしい。
➔ 層別化Cox回帰の完全ガイド!strata()でハザード比が消える理由から論文の記述作法まで
比例ハザード性に依存しない最先端の手法「RMST(制限付き平均生存時間)」とは?
曝露変数(治療群)自体の生存曲線が交差している場合、単一のハザード比を報告することは統計学的に妥当ではない。この局面で最も推奨されるのが RMST(Restricted Mean Survival Time:制限付き平均生存時間) である。
1. RMSTの基本的な考え方(生存曲線の下面積)
通常の生存期間中央値(Median Survival Time)は、生存率が50%に達しないと算出できないというデメリットがある。また、ハザード比は比例ハザード性の仮定が必須となる。
これに対し、RMSTは「あらかじめ設定した制限時間 $\tau$(タウ:例: 24ヶ月や36ヶ月)までの、カプランマイヤー曲線の下面積(積分の面積)」として定義される。
数学的には「観察開始から時間 $\tau$ までの平均生存期間」を意味しており、比例ハザード性の仮定には一切依存しない(ノンパラメトリック / セミパラメトリック手法)。
2. ハザード比(HR)に対するRMSTの臨床的メリット
- 比例ハザード性の仮定が不要: 曲線が途中で交差していても、初期に効果が遅れて出現(Delayed Onset)しても問題なく解析できる。
- 直感的に臨床効果を理解しやすい: 「A群はB群と比較して、24ヶ月の時点までに平均して2.3ヶ月長く生存できた(RMST Difference = 2.3 months)」というように、時間単位で効果の差を直感的に捉えられる。
近年、がん領域における免疫チェックポイント阻害薬(ICI)の治験などで、効果の発現遅延による生存曲線の交差が頻発したことから、FDAや主要医学誌(NEJMやJCO等)でも主要・副次評価項目としてRMSTの報告が強く推奨されている。
【実践】RでRMST解析を実行する(survRM2 パッケージ)
RでRMST解析を行うには、専用パッケージである survRM2 を使用するのが最も簡単で確実である。
1. 制限時間 $\tau$(タウ)の決め方と論文報告の注意点
RMSTを算出する上で最も重要なのが、制限時間 $\tau$(tau)の設定である。
査読者の視点:制限時間$\tau$(tau)の設定根拠
$\tau$の値は、P-hacking(後出しでのP値調整)を疑われないよう、原則として「解析を行う前にプロトコルで規定しておく」ことが求められる。実務上の標準的な設定基準は以下の通りである。
- 両群の最小の最大追跡期間: 各群の最終観察時点(打切りを含む最大追跡時間)のうち、小さい方の値を超えない範囲で設定する。
- 臨床的妥当性: 24ヶ月、36ヶ月、60ヶ月など、疾患の予後として臨床的に意味のある時点に丸めて設定する。
2. survRMST::rmst2() による解析コードと出力の読み方
あらかじめパッケージを読み込み、サンプルデータで解析を実行してみよう。
library(tidyverse)
library(survival)
library(survminer)
library(survRM2) # RMST解析用パッケージ
# サンプルデータの作成(生存曲線が途中で交差するデータ)
set.seed(789)
n <- 200
df_cross <- tibble(
id = 1:n,
treat = factor(sample(c("Control", "Treatment"), n, replace = TRUE)),
# 初期はControlが優勢だが、後半でTreatmentが逆転する設定
time = rexp(n, rate = if_else(treat == "Control", 0.04, 0.06)),
status = sample(c(0, 1), n, replace = TRUE, prob = c(0.2, 0.8))
)
# 1. Schoenfeld残差プロットで仮定の確認(視覚的確認)
fit_cox <- coxph(Surv(time, status) ~ treat, data = df_cross)
cz <- cox.zph(fit_cox)
ggcoxzph(cz) # プロットのラインが水平でなく斜めに傾いていることを視覚的に確認
# 2. RMST解析の実行(制限時間 tau を 30 カ月に設定)
rmst_res <- rmst2(
time = df_cross$time,
status = df_cross$status,
arm = if_else(df_cross$treat == "Treatment", 1, 0), # 1/0 の二値に指定
tau = 30 # 制限時間 tau
)
# 結果の確認
print(rmst_res)
出力結果の読み解き(rmst2 の主要出力)
print(rmst_res) を実行すると、主に以下の2つのテーブルが出力される。
- RMST per group(各群のRMST推定量):各群における $\tau = 30$ までの平均生存時間(
RMST)と平均生存不能時間(RMTL: Restricted Mean Time Lost)が算出される。 - Between-group contrast(群間比較):
RMST (arm=1) - RMST (arm=0)(RMSTの差): 介入群と対照群の平均生存時間の差とその95%信頼区間・P値。論文で最も主要な成果として報告する指標である。RMST (arm=1) / RMST (arm=0)(RMSTの比): 群間の比率。
その他の対処法:期間分割モデル(時間依存性係数)とランドマーク解析
曝露変数のPH仮定が破綻している際、RMST以外の代替アプローチとして以下の2つも選択肢となる。
1. 期間分割モデル(0〜6ヶ月、6ヶ月以降など)
観察期間を複数の時間区間(例: 「0〜6ヶ月」と「6ヶ月以降」)に分割し、区間ごとに異なる2つのハザード比(HR1, HR2)を推定・報告する手法である。
「治療開始直後のハザード比は HR = 1.25 であったが、6ヶ月以降は HR = 0.55 まで低下して有意な治療効果が認められた」といった時間経過に伴う効果の変化を定量化したい場合に有効である。
2. ランドマーク解析(Landmark Analysis)
特定の時点(例: 治療開始後3ヶ月時点など=ランドマーク時点)を設定し、「その時点まで生存していた患者」のみに対象を絞り込んで、それ以降の生存時間を再解析する手法である。
治療初期のイニシャルドロップアウト(初期死亡)の影響を除外して、長期生存例における治療効果を正しく評価したい場合に有用である。
査読者(Reviewer)を納得させる論文・学会発表での記述作法
RMST解析を論文へ導入する際の標準的な英文記述テンプレートを以下に示す。
解析方法(Methods)の英文テンプレート
“Because the proportional hazards assumption was violated based on graphical inspection of Schoenfeld residuals, restricted mean survival time (RMST) analysis was performed as the primary comparison between treatment groups. The restriction time tau was pre-specified at 24 months based on the minimum of the maximum follow-up times across groups.”
結果欄(Results / Table 脚注)の英文テンプレート
“At 24 months, the RMST was 18.5 months in the treatment group and 15.2 months in the control group. The difference in RMST was 3.3 months (95% CI, 1.1 to 5.5 months; p = 0.003), favoring the treatment group.”
【まとめ】コピペで動く!比例ハザード性破綻時のRMST解析一括テンプレート
本記事で解説した「Schoenfeld残差プロットによるグラフ確認 ➔ survRM2 による解析 ➔ 結果プロットの描画」を一括で実行できるテンプレートコードを以下にまとめた。自身の手元のデータセット名・変数名に置き換えて活用してほしい。
# === 比例ハザード性破綻時の RMST 解析一括テンプレート ===
library(tidyverse)
library(survival)
library(survminer)
library(survRM2)
# Step 1: Schoenfeld残差プロットで仮定の崩れを視覚的に確認
fit_cox <- coxph(Surv(time, status) ~ treat, data = df)
cz <- cox.zph(fit_cox)
ggcoxzph(cz) # グラフのラインが傾いているか視覚的に確認
# Step 2: RMST解析の実行(※ tau の値はプロットや臨床的背景に基づき事前設定)
# arm は 1(介入群)/ 0(対照群)に変換
arm_binary <- if_else(df$treat == "Treatment", 1, 0)
rmst_fit <- rmst2(
time = df$time,
status = df$status,
arm = arm_binary,
tau = 24 # 制限時間 tau(例: 24ヶ月)
)
# Step 3: RMSTの解析結果表示(RMSTの差・比の確認)
print(rmst_fit)
# Step 4: RMSTプロットの描画(下面積の可視化)
plot(rmst_fit, xlab = "Time (Months)", ylab = "Survival Probability")
生存曲線の交差や残差プロットの傾きを見て「比例ハザード性が崩れているから解析ができない」と諦める必要はない。
曝露変数(治療群)の仮定が崩れた際はRMSTを導入し、直感的で説得力のある解析結果を論文へ組み込んでいこう。





コメント
コメント一覧 (2件)
[…] ➔ Cox回帰で比例ハザード性が怪しい時の対処法!RMST(制限付き平均生存時間… […]
[…] なお、Cox比例ハザードモデルの前提条件である比例ハザード性の確認(Schoenfeld残差プロット)については、[過去記事:Cox回帰での比例ハザード性破綻とRMST] を参照されたい。 […]