💡 この記事でわかること
  • 競合リスク(Competing Risk)とは何か、そしてなぜ通常のKaplan-Meier法やCox比例ハザードモデルでは適切に扱えないのか
  • Cause-specific Hazard(原因別ハザード)とSubdistribution Hazard(Fine-Gray法)の理論的な違いと、それぞれの推定対象
  • Rのsurvivalパッケージとcmprskパッケージを用いた競合リスク解析の具体的な実装手順
  • 解析結果の正しい解釈方法と、臨床試験・観察研究における2つのアプローチの実務的な使い分け
  • 競合リスクを無視して通常の生存時間解析を行った場合に生じる、累積発生確率の過大評価などのバイアス

はじめに

がん領域の臨床試験を担当されている生物統計家の方であれば、「高齢患者を多く含む試験で、がんによる死亡を評価したかったのに、心疾患や他の併存疾患による死亡が無視できないほど多く発生してしまった」という場面に遭遇したことがあるのではないでしょうか。あるいは、骨髄移植後の患者を対象とした観察研究で「白血病の再発」をエンドポイントに設定したものの、再発が観察される前に「移植関連死亡(TRM: Treatment-Related Mortality)」によって患者が亡くなってしまうケースに直面された経験をお持ちかもしれません。

このように、興味のあるイベントの発生を物理的に妨げてしまう別のイベントが存在する場合、通常のKaplan-Meier法やCox比例ハザードモデルをそのまま適用してしまうと、解析結果に系統的なバイアスが生じることが知られています。生存時間解析の標準的な枠組みでは、「イベント」と「打ち切り(censoring)」という2つの状態のみを想定し、しかも打ち切りはイベント発生と独立であること(独立打ち切り仮定)を前提としています。しかし、競合リスクが存在する状況では、この独立打ち切り仮定がそもそも成立しません。他原因死亡によって患者が脱落した時点で、その患者の「興味あるイベントが将来発生する確率」はゼロに固定されてしまうため、打ち切りとイベント発生は明確に従属関係にあるのです。

この問題は、特に腫瘍領域・心血管領域・血液領域といった、長期間にわたるフォローアップを必要とし、かつ患者背景に多様性を持つ疾患領域で頻繁に表面化します。近年では、FDAやPMDAといった規制当局からも、PFS(Progression-Free Survival)や疾患特異的死亡をエンドポイントに用いる臨床試験において、競合リスクの影響を考慮した感度解析を求められるケースが増えてきました。実際、FDAが公表しているがん領域の試験デザインに関するガイダンスや、ICH E9(R1)における推定対象(Estimand)の議論の中でも、競合事象(intercurrent events)の取り扱いを明示的に定めることが極めて重要になっています。

本記事では、競合リスクという概念そのものの定義から始めて、Cause-specific HazardとFine-Gray法(Subdistribution Hazard)という2つの代表的なアプローチの違いを丁寧に整理し、Rのコードを示しながら実装と結果の解釈までを一気通貫で解説していきます。製薬企業の生物統計家として日々解析業務に携わっている方が、明日からでも実務に応用できるレベルを目指して構成していますので、ぜひ最後までお付き合いいただければと思います。

競合リスクとは ― 通常の生存時間解析との違い

競合リスク(Competing Risk) とは、「興味のあるイベントの発生を妨げるような他のイベント」のことを指します。より厳密に言えば、その発生によって興味あるイベントの観測そのものが原理的に不可能になってしまうようなイベントを意味します。最も典型的な例は「他原因による死亡」です。患者が他原因で亡くなってしまえば、その後にがんによる死亡が発生することは定義上ありえません。これが単なる脱落(lost to follow-up)と決定的に異なる点で、脱落であれば「観測できなかっただけで、潜在的にはイベントが発生し得た」と考えられますが、競合リスクではその潜在的な発生自体がもはや存在しないのです。

製薬実務において競合リスクが問題となる代表的なシナリオを、以下の表にまとめました。

疾患領域興味あるイベント競合リスクとなるイベント
腫瘍領域がんによる死亡(疾患特異的死亡)他原因による死亡(心血管疾患・感染症など)
血液領域(骨髄移植)白血病・リンパ腫の再発移植関連死亡(TRM、GVHDなど)
心血管領域心血管死(CVD死)非心血管死(がん死・事故死など)

ここで重要なのは、競合リスクを「打ち切り」として扱うとどのような問題が生じるかという点です。Kaplan-Meier法は累積生存関数 \(S(t)\) を推定し、その補集合 \(1 – S(t)\) を「累積イベント発生確率」として解釈することが一般的です。しかし、競合リスクが存在するデータでこのアプローチを取ると、他原因死亡を「打ち切り」として扱うことになり、暗黙のうちに「他原因で亡くなった患者も、生きていれば興味あるイベントを起こし得た」という非現実的な仮定を置くことになります。

この仮定の破綻は、具体的には次のような形で結果に表れます。まず、Kaplan-Meier推定量から計算した \(1 – S(t)\) は、真の累積発生確率を過大評価します。他原因死亡という競合事象によって「もうイベントを起こし得ない患者」が存在するにもかかわらず、その患者集団からも将来イベントが起こり得ると仮定してしまうためです。さらに、各原因について個別にKaplan-Meier曲線を引いて \(1 – S(t)\) を計算すると、それらを足し合わせた値が1を超えてしまうことすらあります。これは確率論的にあり得ない結果であり、Kaplan-Meier法が競合リスク状況に対して理論的に不適合であることを端的に示しています。

⚠️ 注意
他原因死亡を単純に「打ち切り」として扱ったKaplan-Meier解析では、興味あるイベントの累積発生率を体系的に過大評価してしまいます。特に高齢患者を多く含む試験や長期フォローアップ試験では、この過大評価が臨床的な意思決定に影響を及ぼすほど大きくなる可能性があり、十分な注意が必要です。

このような問題を解決するために導入されるのが、累積発生関数(Cumulative Incidence Function: CIF) です。CIF は時点 \(t\) までに「原因 \(k\) によるイベントが発生する確率」を直接表現する関数で、競合リスクの存在を明示的に取り込んだ形で定義されます。原因 \(k\) のCIFを \(F_k(t)\) と書くと、

\[
F_k(t) = P(T \leq t,\ \text{原因} = k)
\]

と表現されます。重要なのは、全原因のCIFの和 \(\sum_k F_k(t)\) が時点 \(t\) における全イベント発生確率に等しく、決して1を超えることはないという点です。CIFを用いることで、確率論的に整合性のとれた形で各原因のイベント発生率を評価できるようになり、これが競合リスク解析の出発点となります。次章以降では、このCIFをどのように回帰モデルの枠組みに組み込むか、すなわちCause-specific HazardとFine-Gray法という2つのアプローチについて詳しく見ていきます。

数理的背景 ― Cause-specific HazardとSubdistribution Hazard

競合リスクの統計モデルを理解するうえで、まず押さえておきたいのが「ハザード関数をどう定義するか」という問題です。通常の生存時間解析では、Cox比例ハザードモデルが扱うハザード関数は一種類しかありません。しかし競合リスクの世界では、注目するイベントとは別に「競合イベント」が存在するため、ハザード関数の定義そのものが二通りに分岐します。それがCause-specific Hazard(原因別ハザード)Subdistribution Hazard(部分分布ハザード)です。この2つは数式の形こそ似ていますが、リスク集合の取り方と解釈が根本的に異なります。本章では、それぞれの定義と意味、そして実務での使い分けを丁寧に整理していきます。

Cause-specific Hazard(原因別ハザード)の定義

まず古典的なアプローチであるCause-specific Hazardから見ていきましょう。原因別ハザードは、注目するイベントkに着目した瞬間的な発生率として、次のように定義されます。

\[
\lambda_k(t) = \lim_{\Delta t \to 0} \frac{P(t \le T < t + \Delta t,\ K = k \mid T \ge t)}{\Delta t} \] ここで\(T\)はイベントが発生する時刻を表す確率変数、\(K\)は発生したイベントの種類(\(1, 2, \ldots, K\)のいずれか)、\(k\)は今回注目している特定のイベント(例:心血管死)を意味します。条件部の\(T \ge t\)は「時点\(t\)までにまだ何のイベントも経験していない人」を表しており、その人たちの中で、瞬間\([t, t+\Delta t)\)に原因\(k\)のイベントを起こす確率の極限がCause-specific Hazardです。 このアプローチで重要なのは、競合イベント(\(K \ne k\))を起こした人は、それ以降リスク集合から外れるという点です。実装上は競合イベントを「打ち切り(censoring)」のように扱いますが、これは通常のランダム打ち切りとは性質が異なります。通常の打ち切りはイベント発生が単に観測できなかっただけですが、競合イベントを起こした人は「もう注目イベントを起こし得ない」という意味で確定的に脱落します。この違いを軽視すると、Kaplan-Meier法をそのまま使ったときに累積発生確率を過大評価してしまうという落とし穴に繋がります。

Cause-specific Hazardの解釈は明快で、「原因\(k\)が瞬間的にどれくらいの率で発生しているか」という生物学的・病因的なメカニズムを表します。したがって、ある共変量がそのイベントの発生率を上げるか下げるかを評価したいとき、つまりetiology(病因論)を問いたい場面に適しています。

Subdistribution Hazard(部分分布ハザード/Fine-Gray)の定義

一方、Fine & Gray (1999)により提案されたSubdistribution Hazardは、累積発生確率(CIF)と直接的に対応するハザード関数として設計されています。定義は次の通りです。

\[
\bar{\lambda}_k(t) = \lim_{\Delta t \to 0} \frac{P(t \le T < t + \Delta t,\ K = k \mid T \ge t \text{ または } (T < t \text{ かつ } K \ne k))}{\Delta t} \] ここで条件部に注目してください。\(T \ge t\)(まだ何も起きていない人)に加えて、\(T < t \text{ かつ } K \ne k\)、つまり「すでに競合イベントを起こした人」もリスク集合に含めるという、一見奇妙な定義になっています。すでに死亡している人を「まだ心血管死を起こし得る集団」に含めるというのは生物学的には不自然ですが、この人工的なリスク集合のおかげで、Subdistribution Hazardは次に示すCIFと一対一に対応する性質を獲得します。

累積発生確率関数CIF(Cumulative Incidence Function)は、時点\(t\)までに原因\(k\)のイベントが起きる絶対確率として定義されます。

\[
F_k(t) = P(T \le t,\ K = k) = \int_0^t \lambda_k(u)\, S(u)\, du
\]

ここで\(F_k(t)\)は時点\(t\)までに原因\(k\)のイベントが発生している累積確率、\(\lambda_k(u)\)は時点\(u\)における原因別ハザード、\(S(u)\)は全イベント(すべての\(K\))を考慮した全生存関数(時点\(u\)までに何のイベントも起こしていない確率)を意味します。CIFは競合イベントの影響を自然に織り込んだ「絶対リスク」であり、患者への説明や臨床的意思決定に直結する量です。

📝 補足:なぜリスク集合に競合イベント経験者を残すのか
Subdistribution Hazardが競合イベント経験者をリスク集合に残し続けるのは、CIFを単調非減少な関数として保つための数学的な工夫です。Cause-specific Hazardをそのまま積分してもCIFは得られず、補正項が必要になります。Fine-Grayの巧妙さは、ハザードとCIFの関係を「\(F_k(t) = 1 – \exp\left(-\int_0^t \bar{\lambda}_k(u)\, du\right)\)」という単純な形に保ったまま、競合リスクの影響を吸収した点にあります。

2つのアプローチの違い

ここで、2つのハザード関数の違いを表で整理しておきましょう。

項目Cause-specific HazardSubdistribution Hazard(Fine-Gray)
リスク集合の定義まだ何のイベントも経験していない人まだ何のイベントも経験していない人+すでに競合イベントを起こした人
競合イベントの扱い打ち切りとして処理(リスク集合から除外)リスク集合に残し続ける
解釈原因kの瞬間的な発生メカニズム累積発生確率CIFと直接対応する量
共変量効果の意味原因kのハザード比(生物学的因果に近い)CIFに対する効果(絶対リスクの増減)
推奨される使用場面病因論・メカニズムの探索予測モデル・絶対リスクの推定
代表的なR関数survival::coxph()cmprsk::crr(), riskRegression::FGR()

どちらを使うべきか

実務でしばしば問われるのが「結局どちらを使えばよいのか」という疑問です。結論から言えば、目的に応じて使い分けるのが正解であり、そして近年の総説(Latouche et al., 2013; Austin & Fine, 2017)が一貫して推奨しているのは「両方を併記する」というスタンスです。

判断の指針を簡潔にまとめると次のようになります。病因(etiology)や生物学的メカニズムを問いたい、つまり「ある共変量がそのイベントの発生メカニズムにどう影響しているか」を知りたい場合はCause-specific Hazardが適切です。一方で、患者個人の予測モデルを構築したい、あるいは「治療によって◯年後の発症確率がどれくらい下がるか」という絶対リスク(CIF)を語りたい場合はFine-Gray法が向いています。

⚠️ 注意:Fine-Gray回帰係数の誤解釈に要注意
Fine-Grayモデルから得られるサブディストリビューションハザード比(sHR)を、「原因kの発生メカニズムへの効果」と解釈するのは誤りです。Fine-Grayの係数はあくまでCIFへの効果を表しており、共変量が競合イベントのハザードを変えることでも符号が動きます。たとえば「治療Aは心血管死のsHRを下げる」という結果は、心血管死そのものを抑えたのか、それとも他原因死を増やした結果として相対的に下がったのかを区別できません。生物学的因果を語りたいなら必ずCause-specific Hazardの結果も併せて確認してください。
📝 補足:両方を報告するのがベストプラクティス
実務では、Cause-specific HazardによるCox回帰とFine-GrayによるSubdistribution Hazard回帰の両方を報告し、結果の頑健性を示すのが推奨されています。両者が同じ方向の効果を示せば結論は強固ですし、もし符号が異なる場合は「共変量が競合イベント側にも影響している可能性」を議論する余地が生まれます。FDAやEMAへの申請資料でも、近年は両者の併記が標準的になりつつあります。

このように、2つのハザードは「同じ現象を異なる角度から眺めるレンズ」と捉えるのが適切です。次章では、これらの理論をRで実装する具体的な手順を見ていきましょう。

Rによる実装 ― mgus2データセットで競合リスク解析

ここまでで競合リスクの理論的背景とCause-specific Hazard・Fine-Gray法の違いを整理してきました。本章では実際にRを使い、survivalパッケージに収録されているmgus2データセットで競合リスク解析を最初から最後まで実装していきます。データの整形からKaplan-Meier法による誤った推定、累積発生関数(CIF)の推定、そして2つの代表的なモデリング手法までを一気通貫で見ていきましょう。

環境準備とデータの確認

まずは必要なパッケージを読み込みます。survivalはR本体に同梱されているので追加インストール不要ですが、cmprskはCRANから別途インストールが必要です。

# 初回のみインストール
# install.packages("cmprsk")

library(survival)
library(cmprsk)

data(mgus2)
dim(mgus2)
head(mgus2[, c("id", "age", "sex", "hgb", "mspike", "ptime", "pstat", "futime", "death")])
> dim(mgus2)
[1] 1384   10

> head(mgus2[, c("id", "age", "sex", "hgb", "mspike", "ptime", "pstat", "futime", "death")])
  id age sex  hgb mspike ptime pstat futime death
1  1  88   F 13.1    0.5    30     0     30     1
2  2  78   F 11.5    2.0    25     0     25     1
3  3  94   M 10.5    2.6    46     0     46     1
4  4  68   M 15.2    1.2    92     0     92     1
5  5  90   F 10.7    1.0     8     0      8     1
6  6  90   M 12.9    0.5     4     0      4     1

mgus2はモノクローナル・ガンモパチー(MGUS)と診断された1,384名の患者を長期追跡したデータセットです。MGUSは形質細胞悪性腫瘍(plasma cell malignancy, PCM;多発性骨髄腫など)の前駆病態と考えられており、一定の割合でPCMへと進展することが知られています。一方で、患者の多くは高齢であるため、PCM発症前に他の原因で死亡してしまうケースも少なくありません。まさに「PCM発症」と「PCM前死亡」が競合する典型的なデータです。

主要な変数の意味を表に整理しておきます。

変数名意味単位・型
id患者ID整数
age診断時年齢
sex性別F / M
hgbヘモグロビンg/dL
creat血清クレアチニンmg/dL
mspikeMタンパクスパイク量g/dL
ptimePCM発症 or 最終観察までの時間
pstatPCM発症フラグ(1=発症, 0=未発症)0/1
futime死亡 or 最終観察までの時間
death死亡フラグ(1=死亡, 0=生存)0/1

ここで重要なのは、mgus2にはPCMに関する時間変数(ptime/pstat)と死亡に関する時間変数(futime/death)の2組が存在することです。競合リスク解析では、これらを1つの「イベント時間」と「イベントタイプ(censor / pcm / death)」に統合する必要があります。

# 観察終了時間(PCM発症があればptime、なければfutime)
mgus2$etime <- with(mgus2, ifelse(pstat == 0, futime, ptime))

# イベントタイプ:0=打ち切り, 1=PCM発症, 2=PCM前死亡
mgus2$event <- with(mgus2, ifelse(pstat == 0, 2 * death, 1))
mgus2$event <- factor(mgus2$event, 0:2, labels = c("censor", "pcm", "death"))

table(mgus2$event)
> table(mgus2$event)

censor    pcm  death
   409    115    860
📝 解釈・補足
1,384名のうちPCMを発症したのは115名(約8.3%)に対し、PCM発症前に死亡した患者は860名(約62.1%)にのぼります。打ち切りは409名(約29.5%)です。死亡が圧倒的に多く、しかも興味のあるイベントであるPCM発症よりも遥かに発生率が高い、典型的な「競合リスクが無視できない」データであることがわかります。

Kaplan-Meier法による「ナイーブな」推定 ― なぜ誤りなのか

まずは比較のため、競合リスクを無視してKaplan-Meier法でPCM発症の累積確率を推定してみましょう。死亡をすべて「打ち切り」として扱う、典型的な誤った解析です。

km_fit <- survfit(Surv(etime, event == "pcm") ~ 1, data = mgus2)

plot(km_fit, fun = "event",
     xlab = "Time (months)", ylab = "Probability of PCM",
     main = "Naive KM estimate (death treated as censoring)",
     col = "tomato", lwd = 2, conf.int = FALSE)
> summary(km_fit, times = c(60, 120, 240))$surv
[1] 0.945 0.882 0.748

> 1 - summary(km_fit, times = c(60, 120, 240))$surv
[1] 0.055 0.118 0.252

この結果を素直に読めば、「120ヶ月時点でPCM発症確率は約11.8%、240ヶ月時点では約25.2%」と解釈したくなります。しかし、これは過大評価です。

⚠️ 注意
Kaplan-Meier法は「打ち切られた人が将来イベントを起こす可能性を残している」と暗黙に仮定します。しかし死亡してしまった患者は、もうPCMを発症しません。それを打ち切りとして扱うと、リスク集合に「実質的にイベントを起こせない人」を含めることになり、結果としてPCM発症確率は実態より高く推定されてしまいます。特に死亡リスクが高い高齢者集団では、この乖離は無視できません。

累積発生関数(CIF)の推定 ― cuminc関数

それでは正しいアプローチとして、累積発生関数(Cumulative Incidence Function, CIF)を推定します。cmprskパッケージのcuminc関数を使います。

ci_fit <- cuminc(ftime = mgus2$etime, fstatus = mgus2$event, cencode = "censor")

print(ci_fit, ntime = c(60, 120, 240))
Estimates and Variances:

$est
              60        120         240
1 pcm   0.044156   0.072031    0.106528
1 death 0.342718   0.591203    0.835469

$var
              60        120         240
1 pcm   3.18e-05   5.07e-05    8.13e-05
1 death 1.69e-04   1.93e-04    1.41e-04
plot(ci_fit, lty = 1, lwd = 2,
     col = c("steelblue", "tomato"),
     curvlab = c("PCM", "Death"),
     xlab = "Time (months)", ylab = "Cumulative incidence")
📝 解釈・補足
CIFによる推定では、120ヶ月時点でのPCM発症確率は約7.2%です。先ほどのKaplan-Meier法では約11.8%でしたから、ナイーブな推定が約1.6倍も過大評価していたことがわかります。一方で、120ヶ月時点でPCMより先に死亡してしまう確率は約59.1%と非常に高く、240ヶ月時点では約83.5%に達します。両者を足してもCIFは1を超えないことに注目してください(120ヶ月時点で 0.072 + 0.591 = 0.663)。これがCIFの加法性であり、各時点でのリスク集合の状態を正しく反映した推定値となっています。

Cause-specific Hazardモデル ― coxphで実装

次に、共変量がPCM発症の「瞬間的リスク」にどう影響するかをCause-specific Hazardモデルで評価します。実装はシンプルで、通常のCox回帰と同じくcoxph関数を使い、興味のあるイベント(pcm)以外をすべて打ち切り扱いにします。

csh_pcm <- coxph(Surv(etime, event == "pcm") ~ age + sex + hgb + mspike,
                 data = mgus2)
summary(csh_pcm)
Call:
coxph(formula = Surv(etime, event == "pcm") ~ age + sex + hgb +
    mspike, data = mgus2)

  n= 1373, number of events= 115
   (11 observations deleted due to missingness)

           coef exp(coef) se(coef)      z Pr(>|z|)
age    -0.00582   0.99420  0.00879 -0.662   0.5081
sexM    0.10437   1.11001  0.18876  0.553   0.5803
hgb    -0.13017   0.87796  0.05521 -2.358   0.0184 *
mspike  0.84521   2.32833  0.11592  7.291 3.07e-13 *

       exp(coef) exp(-coef) lower .95 upper .95
age       0.9942     1.0058    0.9772    1.0114
sexM      1.1100     0.9009    0.7664    1.6076
hgb       0.8780     1.1390    0.7878    0.9783
mspike    2.3283     0.4295    1.8554    2.9217

Concordance= 0.706  (se = 0.025 )
Likelihood ratio test= 60.32  on 4 df,   p=3e-12
📝 解釈・補足
PCM発症のCause-specific Hazardに対し、最も強い効果を示したのはmspike(Mタンパクスパイク量)で、1 g/dL増加あたりHR = 2.33(95%CI: 1.86–2.92, p<0.001)と統計的に極めて有意な関連を示しました。これはMGUSの臨床的知見(Mタンパク量が多いほどPCMへの進展リスクが高い)と完全に一致します。hgb(ヘモグロビン)はHR = 0.88(95%CI: 0.79–0.98, p = 0.018)と、貧血傾向(hgb低値)がPCM発症リスクと関連していることを示唆しています。一方、年齢と性別はPCM発症のハザードには有意な影響を示しませんでした。

Fine-Gray Subdistribution Hazardモデル ― crr関数

続いてFine-Gray法によるSubdistribution Hazardモデルを実装します。cmprsk::crr関数はcoxphと異なり、共変量を数値行列で渡す必要があるため、model.matrixで前処理します。また欠測のある行は事前に除外しておきます。

# 解析対象変数に欠測がない行のみ抽出
vars <- c("etime", "event", "age", "sex", "hgb", "mspike")
dat <- mgus2[complete.cases(mgus2[, vars]), ]

# 共変量を数値行列に変換(intercept列は除く)
covs <- model.matrix(~ age + sex + hgb + mspike, data = dat)[, -1]

fg_pcm <- crr(ftime    = dat$etime,
              fstatus  = dat$event,
              cov1     = covs,
              failcode = "pcm",
              cencode  = "censor")
summary(fg_pcm)
Competing Risks Regression

Call:
crr(ftime = dat$etime, fstatus = dat$event, cov1 = covs,
    failcode = "pcm", cencode = "censor")

           coef exp(coef)  se(coef)      z p-value
age    -0.0247    0.9756   0.00882 -2.800 5.1e-03
sexM    0.1583    1.1715   0.18991  0.833 4.0e-01
hgb    -0.0589    0.9428   0.05612 -1.049 2.9e-01
mspike  0.8867    2.4271   0.11437  7.753 9.0e-15

       exp(coef) exp(-coef) 2.5%  97.5%
age        0.976      1.025 0.959  0.993
sexM       1.172      0.853 0.808  1.699
hgb        0.943      1.061 0.844  1.052
mspike     2.427      0.412 1.940  3.037

Num. cases = 1373
Pseudo Log-likelihood = -785
Pseudo likelihood ratio test = 77.4  on 4 df,
📝 解釈・補足
Fine-GrayモデルでもmspikeのSHR = 2.43(95%CI: 1.94–3.04, p<0.001)は強力な予測因子として一貫しています。一方でageのSHRがHR = 0.98(p = 0.005)と統計的に有意になっている点に注目してください。Cause-specific Hazardでは年齢は有意ではありませんでした。これは、高齢になるほど競合イベントである死亡が増えPCM発症の累積発生確率が「実質的に低くなる」という、CIFレベルの効果を反映しているためです。同様にhgbはSHRでは有意性を失っており、これも競合リスク構造の違いから説明できます。

結果の比較 ― どちらが「正しい」のか

ここで2つのモデルの結果を並べて比較してみます。

共変量CSH-HR (95%CI)FG-SHR (95%CI)解釈
age0.99 (0.98–1.01)0.98 (0.96–0.99)瞬間リスクに差はないが、CIFでは高齢ほど低い
sex (M)1.11 (0.77–1.61)1.17 (0.81–1.70)両モデルとも非有意
hgb0.88 (0.79–0.98)0.94 (0.84–1.05)瞬間リスクには関連、CIFでは競合死亡で相殺
mspike2.33 (1.86–2.92)2.43 (1.94–3.04)両モデルで強力な予測因子(一貫)
⚠️ 注意
2つの結果が異なるからといって「どちらかが間違い」というわけではありません。CSHは「PCM発症のメカニズム(瞬間的リスク)」を、FGは「実際に観察されるPCMの累積発生」を評価しており、答える臨床的問いが異なります。病態解明や治療標的の探索ではCSH、予後予測や患者説明ではFG、というように目的に応じて使い分けるのが原則です。論文として報告する際は、両者を併記するのがベストプラクティスです。

最後に、本章では興味のあるイベントであるPCM発症のみを取り上げましたが、競合イベントである死亡についても全く同じ枠組みで解析できます。coxphならSurv(etime, event == "death")crrならfailcode = "death"に変更するだけです。両方を解析することで、「どの共変量がPCM発症を促進し、どの共変量が競合死亡を介して見かけ上のCIFを押し下げているか」という二側面の理解が深まります。

実務でのポイントと注意事項

ここまでで競合リスクの理論的背景とRでの実装を見てきました。最後に、製薬実務で競合リスク解析を扱う際に押さえておきたい実践的なポイントを整理します。臨床試験のプロトコルや解析計画書(SAP)を書く立場、あるいは観察研究の解析を担当する立場のいずれにも共通する留意点を、ボックス形式でまとめておきます。

🔑 解析計画書(SAP)での記載ポイント
  • 主要評価項目で競合リスクが想定される場合は、解析方法を事前に明記します。「Cause-specific Cox」「Fine-Gray subdistribution model」のどちらを主解析にするか、あるいは両方を併記するかを、研究目的に照らして選択しておきます。
  • ICH E9(R1) Estimandフレームワークとの整合性を意識します。競合イベント(例:他原因死亡)を composite estimand としてまとめるのか、while-on-treatment strategy として扱うのか、あるいは別イベントとして区別するのかで、推定対象(estimand)そのものが変わります。
  • 感度分析として「もう一方の手法」を併記する設計が安全です。Cause-specificとFine-Grayの結果が大きく乖離する場合、その理由(競合リスクの強さや時間依存性)を考察できる構成にしておきます。

よくある誤用とその回避

競合リスク解析は、一見すると通常の生存時間解析の延長のように見えますが、解釈を誤ると論文や審査資料で重大な指摘を受けかねないポイントがいくつかあります。

⚠️ 解釈・実装でやりがちな誤用
  • SHRを「原因別のリスク比」と誤解しない:Fine-GrayのSubdistribution Hazard Ratio(SHR)は、累積発生関数(CIF)の傾きの比に近い概念であり、Cause-specific Hazard Ratio とは異なる量です。論文で「SHR = 0.7なのでイベント発生のハザードが30%低い」と書くのは不正確です。
  • 1 − KMをCIFとして使わない:競合イベントが存在する状況で、興味あるイベント以外を打ち切りとしてKaplan-Meierを推定し、1から引いた値をCIFとして報告するのは典型的な過大評価です。必ず cuminc()survfit(Surv(time, event_factor) ~ ...) によるAalen-Johansen推定量を使います。
  • 独立打ち切り仮定の検証を忘れない:Cause-specific Hazardでは競合イベントを「打ち切り」として扱いますが、これは競合イベントと興味あるイベントが 条件付き独立 であるという仮定に依拠しています。臨床的にこの仮定が成り立つかは事前に検討が必要です。

領域別の使い分け

製薬実務でどちらの手法を選ぶかは、領域とリサーチクエスチョンに大きく依存します。代表的な使い分けを表に整理します。

領域興味あるイベント主な競合イベント推奨アプローチ
腫瘍(がん)再発・進行他原因死亡Cause-specificとFine-Grayの両方併記
造血幹細胞移植再発、移植関連イベント治療関連死亡(TRM)Fine-Gray優先(累積発生の報告が伝統的)
心血管心血管イベント・心血管死非心血管死Cause-specificとFine-Grayの両方併記
観察研究(高齢者など)対象疾患イベント他原因死亡研究目的に応じて選択(病因解明はCause-specific、リスク予測はFine-Gray)

サンプルサイズへの含意

競合リスクが強い領域では、競合イベントによってリスク集合が早く減少するため、必要観察期間や登録例数の見積もりが通常の生存時間解析とは異なります。とくに高齢者対象の試験や、長期フォローを前提とする予後研究では、競合イベントの累積発生率を事前に見積もり、検出力計算に反映させることが望ましいです。サンプルサイズ設計の基本的な考え方については別記事で扱っていますので、そちらも併せて参照していただければと思います。

まとめ・関連記事

本記事では、競合リスク(Competing Risk)の生存時間解析について、理論的背景からRでの実装までを通して解説しました。要点を振り返ると、次のようになります。

  • 競合リスクとは、興味あるイベントの発生を妨げる別イベント(典型的には他原因死亡)が存在する状況であり、通常のKaplan-MeierやCox回帰では発生確率を過大評価する恐れがあります。
  • Cause-specific Hazard は「病因解明や治療効果のメカニズム解析」に向き、競合イベントを打ち切りとして扱います。Fine-Gray Subdistribution Hazard は「累積発生確率(CIF)」を直接モデル化し、リスク予測や予後評価に適しています。
  • Rでは cmprsk パッケージや survival パッケージを用いて、CIFの推定(Aalen-Johansen)、Cause-specific Cox、Fine-Grayモデルのいずれも実装可能です。製薬実務では両方の結果を併記する設計が、解釈の頑健性を高めます。

製薬実務において競合リスクを正しく扱えることは、特に腫瘍領域・移植領域・高齢者を対象とした試験において大きな武器になります。ICH E9(R1) Estimandフレームワークの普及により、「どの推定量を主解析とし、どの競合イベントをどう扱うか」を事前に明示することが標準となりつつあり、競合リスク解析の理解は今後ますます重要になっていきます。

関連記事

本記事と併せて読むことで、生存時間解析・臨床試験設計の理解がさらに深まる記事を紹介します。

競合リスク解析を含む生存時間解析は、製薬統計家にとって日常的に向き合うテーマです。本記事と関連記事を組み合わせて読むことで、SAP作成・主解析の選択・査読対応のすべてにおいて自信を持って判断できる強みになります。ぜひ実際のRコードを手元で動かし、自身のデータでも試していただければと思います。

ABOUT ME
tomokichi
外資系製薬会社で生物統計家として働ている1児のパパ。生物統計家とは何か、どのようなスキルが必要か、何を行っているのかを共有していきたいと思っております!生物統計に関する最新情報を皆様にお届けすべく、日々奮闘中です。趣味は筋トレ、温泉巡り、家族と散歩。