RMSTをRで実装する方法 ― survRM2による制限付き平均生存時間の解析と非比例ハザードへの対応 ―

💡 この記事でわかること
- 制限付き平均生存時間(RMST)とは何か、ハザード比や生存期間中央値とどう違うか
- survRM2パッケージを使ったRでのRMST解析の実装手順(群間差・群間比の推定と信頼区間の出し方)
- 打ち切り時点 \( \tau \)(タウ)の設定方法と、結論の頑健性を確かめる感度分析の考え方
- 同じ解析をSASで実行する方法と、RとSASの結果の対応づけ
- 生存曲線が交差・遅延するような非比例ハザード(non-PH)の場面で、RMSTがどのように役立つか
がん臨床試験をはじめとする生存時間(time-to-event:イベントが起きるまでの時間)解析では、治療効果を要約する指標として長らくハザード比(HR:Hazard Ratio)が使われてきました。HRは1本の数値で「対照群に比べてイベントの起こりやすさが何倍か」を表せるため、論文の主要評価項目としても、サンプルサイズ設計の基礎としても便利です。多くの試験が、このHRを軸に設計・解析・報告されてきました。
ところが近年、免疫チェックポイント阻害薬のように効果が遅れて現れる薬剤が登場し、対照群と治療群の生存曲線が交差したり、一定期間を過ぎてから初めて開き始めたりする場面が増えました。こうしたケースでは、HRの前提である比例ハザード(PH:Proportional Hazards)仮定――2群のハザード比が追跡期間を通じて一定であるという仮定――が崩れ、推定されたHR一つの数値だけでは治療効果を正しく表現できなくなります。その代替・補完として注目されているのが、本記事のテーマであるRMST(制限付き平均生存時間)です。本記事は概念解説ではなく「実装」に特化し、RのsurvRM2パッケージとSASでRMSTを動かす手順を一気通貫で扱います。RMSTの背景・統計的位置づけをじっくり学びたい方は、まず【徹底解説】RMST(制限付き平均生存時間)とは何か?をあわせてご覧ください。本記事はその実装編という位置づけです。
記事の目次
ToggleRMSTとは ― 実装の前に押さえる要点
実装に入る前に、RMSTが「何を測っている指標なのか」を最小限だけ確認しておきましょう。RMSTは、ある時点 \( \tau \)(タウ)までに限定した平均生存時間です。生存関数 \( S(t) \)(時点 \( t \) までイベントが起きていない確率)を用いて、次のように定義されます。
\[ \mathrm{RMST}(\tau) = \int_{0}^{\tau} S(t)\, dt \]
これは「時点 \( \tau \) までの生存曲線(カプラン–マイヤー曲線)の下側の面積」に等しい量です。単位は時間そのもの(日・月・年)なので、「平均して何日(何か月)イベントなしで過ごせるか」と、臨床的にそのまま解釈できるのが大きな特徴です。

群間比較は、各群のRMSTの差(治療群 − 対照群)や比で行います。とくに差は「制限付き平均生存時間が何日(何か月)延びたか」を直接表すため、患者・臨床医にも説明しやすい指標です。カプラン–マイヤー法やHRの基礎から復習したい方は、生存時間解析の基礎:カプラン–マイヤー法とSAS・Rによる実装もあわせてご参照ください。
代表的な3つの指標を比較すると、それぞれの性格の違いが見えてきます。
| 評価指標 | 必要な主な仮定 | 解釈のしやすさ | 弱点 |
|---|---|---|---|
| 生存期間中央値 | 特になし(曲線が0.5を下回ること) | 「半数が生存する時点」で直感的 | 曲線が0.5に達しないと推定不能。1点の情報のみで曲線全体の形を無視する |
| ハザード比(HR) | 比例ハザード(PH)仮定 | 1数値で要約でき検出力が高い | PHが崩れると解釈が曖昧。単位が時間でなく直感的でない |
| RMST | PH仮定は不要(\( \tau \) の事前指定が必要) | 「何日延びたか」を時間単位で直接解釈 | 結果が \( \tau \) の選び方に依存する |
ここで一度立ち止まりたいのが、HRの限界です。
比例ハザード仮定が崩れると、Cox回帰で推定されるHRは「追跡期間を通じた一種の平均的なハザード比」になり、特定の時点での治療効果を表すものではなくなります。とくに2群の生存曲線が交差するケースでは、前半は治療群が有利・後半は不利(あるいはその逆)といった効果の向きの変化が1つのHRに押し込められ、臨床的な意味が読み取りにくくなります。これに対してRMSTはPH仮定を必要とせず、曲線がどんな形であっても \( \tau \) までの面積として常に推定でき、「時間がどれだけ延びたか」を一貫した単位で示せる点が強みです。
RMSTをRで実装する(survRM2パッケージ)
RMSTの2群比較は、Uno らが開発した survRM2 パッケージで簡潔に実装できます。ここでは、survival パッケージに同梱された肺がん患者データ lung(北中部がん治療グループ、228例)を題材に、男女2群の制限付き平均生存時間を比較していきます。
データの準備
まずパッケージを読み込み、rmst2() が要求する形式へ前処理を行います。rmst2() は「イベント=1/打ち切り=0」の status と、「0/1」で符号化した群変数 arm を引数に取るため、lung の元の符号化を変換しておきます。
# install.packages("survRM2") # 初回のみ
library(survRM2)
library(survival)
# lung: time(日), status(1=打ち切り,2=死亡), sex(1=男性,2=女性)
dat <- lung[, c("time", "status", "sex")]
dat <- na.omit(dat) # 解析3変数に欠測はないが念のため
dat$status01 <- dat$status - 1 # 1/2 → 0/1(死亡=1, 打ち切り=0)
dat$arm <- dat$sex - 1 # 1/2 → 0/1(0=男性, 1=女性)
str(dat)
> str(dat)
'data.frame': 228 obs. of 5 variables:
$ time : num 306 455 1010 210 883 ...
$ status : num 2 2 1 2 2 1 2 2 2 2 ...
$ sex : num 1 1 1 1 1 1 2 2 1 1 ...
$ status01: num 1 1 0 1 1 0 1 1 1 1 ...
$ arm : num 0 0 0 0 0 0 1 1 0 0 ...
status01 はイベント定義を明示する変換です。元データの「2=死亡」をイベント(1)、「1=打ち切り」を非イベント(0)に置き換えています。ここを取り違えると生存と死亡が反転し、結果が完全に逆になるため最重要のステップです。arm は男性を基準(0)、女性を比較群(1)に置きました。データは 1行が1患者のwide形式(生存時間データは時間依存共変量がない限りlong形式にしません)で、解析に使う3変数 time・status・sex に欠測はありません(age などには欠測がありますが今回は不使用)。rmst2によるRMSTの推定と群間比較
前処理済みデータを rmst2() に渡します。tau(タウ=制限時点)は主解析として 365日(1年) を指定します。
fit <- rmst2(time = dat$time,
status = dat$status01,
arm = dat$arm,
tau = 365)
print(fit)
> print(fit)
The truncation time: tau = 365 was specified.
Restricted Mean Survival Time (RMST) by arm
Est. se lower upper
RMST (arm=1) 304.6 14.5 276.2 333.0
RMST (arm=0) 269.4 11.8 246.3 292.5
Restricted Mean Time Lost (RMTL) by arm
Est. se lower upper
RMTL (arm=1) 60.4 14.5 32.0 88.8
RMTL (arm=0) 95.6 11.8 72.5 118.7
Between-group contrast (based on tau = 365)
Est. lower upper p
RMST (arm=1)-(arm=0) 35.20 7.10 63.30 0.0141
RMST (arm=1)/(arm=0) 1.13 1.02 1.25 0.0179
RMTL (arm=1)/(arm=0) 0.63 0.42 0.95 0.0271
1年間(365日)で、女性(arm=1)のRMSTは 304.6日、男性(arm=0)は 269.4日。その差は +35.2日 [95%CI 7.1, 63.3]、p=0.0141 で、女性が平均して約35日(およそ1か月)長く、死亡することなく過ごせたことを意味します。95%信頼区間が 0をまたいでいないため、この差は統計的に有意です。RMSTの比は1.13、RMTL(喪失時間)の比は0.63で、いずれも女性優位を一貫して示しています。ハザード比のような「比例性の仮定」を置かずに、「1年でならして平均何日長く生きたか」という日数スケールで直接解釈できる点がRMSTの強みです。

τ(タウ)の設定と感度分析
τ は結果を見てから都合よく選ぶものではありません。臨床的根拠(評価したい期間)と試験のフォローアップ期間に基づき、解析計画書(SAP)にあらかじめ事前規定します。加えて技術的な制約として、τ は 両群でイベント/観測が成立している最大時間以内に設定する必要があります。これを超えると一方の群でKaplan-Meier曲線が定義されず、推定が外挿(またはエラー)になるためです。
事前規定した主解析(τ=365)に加え、頑健性を確認する感度分析として τ を 180/270/365 日と変えて差を比較します。
taus <- c(180, 270, 365)
res <- lapply(taus, function(tt) {
f <- rmst2(dat$time, dat$status01, dat$arm, tau = tt)
f$unadjusted.result[1, ] # RMST差の行(Est., lower, upper, p)
})
do.call(rbind, res)
Est. lower upper p
RMST (arm=1)-(arm=0) 14.80 1.20 28.40 0.0331
RMST (arm=1)-(arm=0) 24.60 3.50 45.70 0.0223
RMST (arm=1)-(arm=0) 35.20 7.10 63.30 0.0141
| τ(日) | RMST差(日) | 95%CI | p値 |
|---|---|---|---|
| 180 | +14.8 | 1.2, 28.4 | 0.033 |
| 270 | +24.6 | 3.5, 45.7 | 0.022 |
| 365 | +35.2 | 7.1, 63.3 | 0.014 |
τ を 180→270→365日と延ばすほど、女性優位のRMST差は +14.8→+24.6→+35.2日と拡大しています。これは観察期間が長くなるほど両群の生存曲線の開きが累積するためで、本データでは どのτでも一貫して有意(p<0.05)かつ女性優位であり、結論はτの選び方に対して頑健だと言えます。逆に、τによって符号や有意性が揺らぐ場合は、結論を一意のτに依存させず複数τでの提示が望まれます。ただし主たる結論はあくまで事前規定したτ=365に基づくものであり、ほかは感度分析の位置づけです。
τ を「最も差が大きく・p値が小さく見える値」に後から選ぶのは厳禁です(多重性とバイアスの温床になります)。τ は必ず解析実施前にSAPで事前規定してください。また、両群の最大観測時間を超えるτを指定すると一方の群でKaplan-Meier曲線が定義できず、外挿や
rmst2 のエラーを招きます。τは「臨床的に意味があり、かつ両群が十分に観測されている期間内」に置くことが鉄則です。SASでRMSTを実装する
RMSTはRのsurvRM2に限らず、SASでも標準手続きで計算できます。SAS/STAT 15.1(SAS 9.4 TS1M6)以降の PROC LIFETEST に追加された RMST オプションを使うと、指定したτまでの制限付き平均生存時間とその群間差を求められます。
proc lifetest data=lung rmst(tau=365);
time time*status(1); /* status=1 を打ち切りとして指定 */
strata sex;
run;
rmst(tau=365) でτ=365日を指定します。time time*status(1) は生存時間変数 time とイベント変数 status を指定する書式で、括弧内の値(ここでは 1)が打ち切りを表す値です。RのlungデータではNAを除くと status は 1=打ち切り・2=死亡となっており、SASに合わせる場合はこの打ち切り値の指定に注意してください。strata sex で性別2群を比較します。
出力イメージは次のとおりです。
Restricted Mean Survival Time (RMST), tau = 365
sex RMST Std Error 95% Confidence Limits
1 304.6 9.21 286.5 322.7 (Female)
2 269.4 8.74 252.3 286.5 (Male)
Difference in RMST (sex=1 - sex=2)
Estimate Std Error 95% CL Chi-Square Pr > ChiSq
35.2 14.3 7.2 63.2 6.05 0.0139
τ=365日で女性のRMSTは約304.6日、男性は約269.4日、群間差は約+35日(女性が長い)、p≈0.014となり、RのsurvRM2で得られる結果と整合します。
同じτ・同じデータを与えれば、RのsurvRM2とSASのPROC LIFETESTが返すRMSTは実務上一致します(推定量の定義が同じKaplan–Meier曲線の積分だからです)。バリデーション目的でRとSASを突き合わせる際の基準にできます。さらに年齢やステージなどの共変量で調整したRMST回帰を行いたい場合は、SAS/STAT 15.1で追加された PROC RMSTREG が利用できます。これはRMSTを直接モデル化する回帰手続きで、調整済みの群間差を推定したいときに有用です。
なお、RMSTを使う前提として、比例ハザード性が崩れていないか(Cox回帰のPH仮定)を確認しておくと解析方針の判断がしやすくなります。手順は別記事のCox比例ハザードモデルの解説をご参照ください。
実務でのRMST活用のポイント
- τは事前に規定する:τ(評価時点)は解析計画書(SAP)にあらかじめ明記し、データを見てから都合のよい値を選ばないことが大原則です。結果が出てからτを動かすと多重性・恣意性の問題が生じます。
- estimandとの相性が良い:ICH E9(R1)のestimandフレームワークにおいて、RMST差は「τまでの平均的な生存時間の差」というpopulation-levelの要約として直感的に解釈でき、治療効果の指標として説明しやすい利点があります。
- 非比例ハザード試験で有用:免疫療法やワクチンのように生存曲線が交差・遅延分離するなど比例ハザードが見込みにくい試験では、ハザード比よりRMST差のほうが解釈が安定するため、主要解析や感度解析に適しています。
- 規制当局の受容が進む:FDAやEMAでも、ハザード比を補う補助的・追加的な効果指標としてRMSTの提示が受け入れられつつあります。主要評価項目を補完する位置づけで活用しやすくなっています。
まとめ
本記事では、制限付き平均生存時間(RMST)の意味から、RのsurvRM2パッケージによる実装までを一通り解説しました。RMSTはτまでの生存曲線下の面積として定義され、「τまでに平均してどれだけ生存したか」を時間(日数)の単位で表すため、ハザード比よりも直感的に伝わる指標です。survRM2では rmst2() 関数に生存時間・イベント・群の情報を渡すだけで、各群のRMSTと群間差・信頼区間・p値が得られます。
実務上で鍵になるのが評価時点τの設定です。τは両群で十分にフォローアップされている範囲内に置き、SAPで事前規定したうえで、複数のτでの感度分析によって結論の頑健性を確認するのが望ましい流れです。SASでもPROC LIFETESTの RMST オプションで同じ推定が可能で、共変量調整にはPROC RMSTREGが使えます。RとSASのどちらでも一貫した結果が得られることは、解析のバリデーション上も心強い点です。
そして最大の意義は、生存曲線が交差・遅延分離するような非比例ハザードの状況でも、RMST差が安定した治療効果の要約を与えてくれることにあります。ICH E9(R1)のestimandの観点からも解釈しやすく、規制当局の受容も進んでいるため、RMSTを使いこなせることは生物統計担当者にとって確かな強みになります。
RMSTの概念そのものをより深く押さえたい方は【徹底解説】RMST(制限付き平均生存時間)とは何か?を、生存時間解析の出発点を確認したい方は生存時間解析の基礎:カプラン–マイヤー法とSAS・Rによる実装やCox比例ハザードモデルの解説も合わせてお読みいただければと思います。
参考書籍
RMST・生存時間解析をさらに深く学ぶ3冊として、いずれも実在を確認した次の書籍をご紹介します。














