疾患が進展し、その後に死亡する。このような経過を、「進展」と「死亡」の2つに分けて解析することがあります。たとえば、進展までの時間についてCox回帰を1本、死亡までの時間についても別のCox回帰を1本行う方法です。
しかし、このように別々に解析すると、患者がたどった経過に関する情報の一部が失われます。進展したあとに死亡リスクがどのように変化するのか、進展を経て死亡した患者と、進展を経ずに死亡した患者では何が違うのか。臨床的にはこうした点を知りたいことが多いのですが、2本の独立した解析だけでは十分に捉えられません。
マルチステートモデルでは、患者が現在どの状態にいて、そこからどの状態へ移るのかを、1つの枠組みの中で扱います。たとえば、「無増悪」から「進展」、「無増悪」から「死亡」、「進展」から「死亡」という複数の遷移を同時にモデル化できます。これにより、疾患の進行から死亡に至るまでの経過を、状態間の遷移として記述できます。
競合リスクは、このマルチステートモデルの特殊な場合として捉えることができます。複数のイベントが起こり得る状況を、単に「どのイベントが先に起きたか」だけでなく、患者がどの状態を経ていくのかという視点から整理できるのが、マルチステートモデルの特徴です。
状態と遷移で書き直す

マルチステートモデルでは、患者がどの状態にいるかだけでなく、状態から状態への遷移に注目します。各矢印に強度(遷移ハザード)を割り当て、たとえば状態$h$から状態$k$への遷移強度を
$$q_{hk}(t) = \lim_{\Delta t \to 0} \frac{P(\textrm{時点}\,t+\Delta t\,\textrm{に状態}\,k \mid \textrm{時点}\,t\,\textrm{に状態}\,h)}{\Delta t} \tag{1}$$
と定義します。式(1)はハザード関数の定義を、「現在、状態$h$にいる患者のなかで」という条件付きにしたものです。つまり、矢印1本ごとに別々のハザードを持たせます。
マルコフ性を仮定する場合、ある状態から次の状態へ移る起こりやすさは現在の状態によって決まり、そこに至るまでの経路には依存しないと考えます。たとえば「現在が骨髄腫」という情報があれば、それ以前にどのような経過をたどったかは遷移ハザードに影響しない、という仮定です。
Rでは、survivalパッケージを使ってこのようなデータ構造を作ることができます。tmerge関数で状態の変化を行単位に展開し、Survに開始時点と終了時点、状態を渡します。
library(survival)
d <- tmerge(mgus2[, c("id","age","sex")], mgus2, id = id,
death = event(futime, death), pcm = event(ptime, pstat))
d$state <- factor(ifelse(d$pcm == 1, "pcm",
ifelse(d$death == 1, "death", "censor")),
c("censor", "pcm", "death"))
survcheck(Surv(tstart, tstop, state) ~ 1, data = d, id = id)
ms <- survfit(Surv(tstart, tstop, state) ~ 1, data = d, id = id)
survcheckは、作成したデータの整合性を確認するための関数です。遷移表を確認できるので、意図していない遷移、たとえば死亡後に進展するような状態の矛盾が入り込んでいないかを、推定の前に確認できます。この確認を省くと、データ構造の誤りに気づかないまま、その後の推定を進めてしまう可能性があります。
「今どこにいるか」は「到達したか」と違う
マルチステートモデルが返すのは、各時点で患者が各状態にいる確率です。これを状態占有確率と呼びます。累積発生関数とは別物で、ここを取り違えると数字が合いません。

差が生まれるのは、進展した患者が短期間で亡くなるからです。進展した115例のうち94例が死亡しています。状態占有確率は、そこに留まっている人だけを数えるので、通過してすぐ抜けていく状態では低く出ます。
どちらを報告するかは問いによります。「10年間で何割が骨髄腫を発症するか」なら累積発生関数、「ある時点で骨髄腫の治療を受けている患者が何人いるか」なら状態占有確率です。後者は病床数や薬剤費の見積もりに使う数字で、前者とは1桁違うこともあります。
遷移ごとに違う効果
矢印ごとにCox回帰を当てると、共変量の効果が遷移によって違うことが見えます。
e <- subset(d, tstart == 0) # MGUSからの遷移
p2 <- subset(d, tstart > 0) # 骨髄腫からの遷移
coxph(Surv(tstop, state == "pcm") ~ age10 + sex, data = e)
coxph(Surv(tstop, state == "death") ~ age10 + sex, data = e)
coxph(Surv(tstart, tstop, state == "death") ~ age10 + sex, data = p2)

この3つを並べると、年齢が何をしているのかが読めます。高齢であることは骨髄腫の発症をわずかに促す程度ですが、それより前に他の原因で亡くなる確率を大きく上げます。発症したあとの予後にも効きます。競合リスクの枠組みでは前2つしか出せず、3つ目は別の解析になります。
進展後の死亡を推定するとき、時間の原点をどこに置くかで意味が変わります。上のコードは登録からの時間を保ったまま推定しているので、「登録から何か月経った時点か」を基準にしており、進展からの経過時間を基準にしたい場合、原点を進展時点に置き直す必要があります。前者はマルコフモデル、後者は半マルコフモデルと呼ばれ、答えている問いが異なります。
どんな研究で使うか
マルチステートモデルは中間事象があり、その前後で予後が変わる研究に向いています。がんの再発と死亡、移植後の急性拒絶と生着不全、心不全の再入院と死亡など、中間事象を経験した患者がその後どうなるかを別立てで示せるのが強みです。
また、無増悪生存期間のような複合エンドポイントを分解する目的にも使えます。増悪と死亡をまとめて1つの事象として扱うと、どちらが効いているのかが見えなくなりますが、マルチステートで組み直せば、治療が増悪を遅らせているのか、増悪後の生存を延ばしているのかを分けて示せます。
逆に、中間事象がない、あるいは中間事象の前後で予後が変わらないなら、この枠組みを持ち出す必要はありません。状態と遷移が増えるほど各遷移のイベント数は減り、推定は不安定になります。mgus2でも進展後の死亡は94件しかなく、共変量を3つ以上入れると信頼区間が広がることに繋がります。
状態を増やすとイベントが足りなくなる
状態を細かく分けるほど記述は精密になり、たとえば骨髄腫への進展を「くすぶり型を経由する場合」と「直接進展する場合」に分ければ、経過の違いを描けます。
一方で、状態が3つ存在する場合の遷移は最大6本、4つなら12本となり、全体のイベント数は変わらないので、1本あたりの件数は状態を増やすほど減ることになります。
mgus2では進展後の死亡が94件でした。ここに共変量を3つ入れると、1変数あたり30件程度になり、5つ入れれば20件を切り、推定が不安定になります。これは、正則化Coxモデルで扱った変数あたりイベント数の目安が、遷移ごとに当てはまります。
そのため、状態設計は臨床的な意味とイベント数の両方から決めることになります。矢印1本あたりのイベントが2桁を切るなら、状態を統合するか、その遷移については共変量を絞ります。
遷移確率を予測に使う
マルチステートモデルの出力として、遷移確率行列があります。これは、時点$s$に状態$h$にいた患者が、時点$t$に状態$k$にいる確率です。
$P_{hk}(s,t) = P(\textrm{時点}\,t\,\textrm{に状態}\,k \mid \textrm{時点}\,s\,\textrm{に状態}\,h) \tag{3}$
式(3)が使えると条件付きの予測ができ、「診断から5年経ってまだ進展していない患者が、次の5年で進展する確率」といった形です。診断時点の予測より、外来で患者に話す内容に近くなります。
マルコフ性を仮定していれば、この計算はAalen-Johansen推定量の一般形で得られます。半マルコフなら、状態に入ってからの経過時間を追う必要があり、計算が重くなります。
報告の仕方
状態遷移図を必ず載せる必要があります。図1のような図に各遷移の件数を書き込めば、読者はモデルの構造とデータ量を一目で把握でき、文章だけで状態と遷移を説明するよりも読者へ正確に伝えることができます。
また、遷移表を添えることも推奨します。これにより、想定外の遷移が0件であることが示せます。
さらに、マルコフ性を仮定したかどうかも記述する必要があり、進展後の死亡ハザードが、進展からの経過時間に依存すると考えるなら半マルコフになるため、この選択は結果を動かすので、根拠を1文添えます。
そして、予測値を出す場合は、たとえば「75歳男性が5年後に骨髄腫で生存している確率」といったように、共変量の値を指定したうえで状態占有確率を計算します。Rではsurvfit関数に当てはめたモデルとnewdataを渡せば得られますが、遷移が3本あれば3本全てのモデルが予測に効くので、どこか1本の当てはまりが悪いと予測全体が歪んでしまうことに注意が必要です。
状態の定義を先に決める
データを見てから状態を決めると、イベントの多い経路だけが残ります。「進展後に死亡した94例」を見てから進展を状態に加えるのと、疾患の自然経過から先に状態を設計するのとでは、意味が異なります。
そのため、臨床的に定義できる状態から始めることを推奨します。診断、寛解、再発、二次治療、死亡など、並びは疾患の理解から出てくるもので、データの都合とは独立として検討する必要があり、そのうえで、イベント数が足りない遷移を統合していくことが適切な流れといえます。
状態の定義には、日付の取得可能性も効きます。「寛解」を状態にするなら寛解日が要りますし、その判定基準も揃っている必要があります。
次に確かめること
競合リスクだけで足りる研究なら競合リスクとFine-Grayモデルで済みます。一方で、中間事象を時間依存の共変量として1本のモデルに入れる方法もあり、こちらは時変共変量で扱いました。マルチステートとの違いは、後者が中間事象後の基準ハザードを別に持てる点です。
各遷移のモデルは通常のCox回帰なので、比例ハザード性の確認はSchoenfeld残差で行います。遷移ごとに確認が必要です。
状態をどう定義するか、マルコフと半マルコフのどちらを選ぶか、複合エンドポイントを分解すべきか。このあたりは疾患の経過と研究目的を見ないと決まりません。Dr.データサイエンスでは、こうした解析設計のご相談を承っています。
参考文献
Putter H, Fiocco M, Geskus RB. Tutorial in biostatistics: competing risks and multi-state models. Statistics in Medicine. 2007;26(11):2389-2430.
Andersen PK, Keiding N. Multi-state models for event history analysis. Statistical Methods in Medical Research. 2002;11(2):91-115.
Meira-Machado L, de Una-Alvarez J, Cadarso-Suarez C, Andersen PK. Multi-state models for the analysis of time-to-event data. Statistical Methods in Medical Research. 2009;18(2):195-222.
de Wreede LC, Fiocco M, Putter H. mstate: an R package for the analysis of competing risks and multi-state models. Journal of Statistical Software. 2011;38(7):1-30.
Therneau TM, Crowson CS, Atkinson EJ. Multi-state models and competing risks. survival package vignette. 2024.


