チュートリアル: 心不全データの Kaplan-Meier 生存曲線
心不全と診断された299人の患者について、追跡期間中の生存状況を記録したデータがあります。このチュートリアルでは、Kaplan-Meier 法で生存曲線を推定し、患者背景(貧血の有無、高血圧の有無)で群分けした生存曲線を Log-rank 検定で比較します。
- サンプルデータを読み込み、データの構造を確認します
- 生存時間データの特徴(打ち切り)を説明します
- 全体の生存曲線を推定します
- 貧血の有無で群分けし、生存曲線を比較します
- Log-rank 検定の結果を読みます
- 他の群変数でも比較します
データを読み込む
ランチャー画面の Sample Data セクションから Heart Failure をクリックしてください。プロジェクトが作成され、データが読み込まれます。
このデータは、Faisalabad Institute of Cardiology(パキスタン)で2015年に収集された心不全患者の臨床記録です(Chicco & Jurman, 2020)。
データの構造を確認する
Data Table タブを開くと、299行13列のデータが表示されます。

生存分析に使う主な列は次の3種類です。
時間変数とイベント変数
| 列名 | 内容 |
|---|---|
time | 追跡期間(日数)です。診断から最後の観察(死亡または打ち切り)までの日数を記録しています |
DEATH_EVENT | 追跡期間中に死亡したかどうかです。1 = 死亡、0 = 打ち切り(追跡終了時に生存) |
患者背景(群分けに使用)
| 列名 | 内容 |
|---|---|
age | 年齢(歳) |
anaemia | 貧血の有無(0: なし、1: あり) |
diabetes | 糖尿病の有無(0: なし、1: あり) |
high_blood_pressure | 高血圧の有無(0: なし、1: あり) |
sex | 性別(0: 女性、1: 男性) |
smoking | 喫煙の有無(0: なし、1: あり) |
検査値
残りの5列(creatinine_phosphokinase, ejection_fraction, platelets, serum_creatinine, serum_sodium)は血液検査の結果です。このチュートリアルでは使いませんが、Cox 回帰で共変量として使えます。
打ち切りとは
299人の患者のうち、追跡期間中に死亡した患者(DEATH_EVENT = 1)と、追跡終了時にまだ生存していた患者(DEATH_EVENT = 0)がいます。後者を 打ち切り(censoring) と呼びます。
打ち切られた患者の生存時間は time 日以上であることは確定していますが、その先いつイベントが起きるかは分かりません。
打ち切りを単純に除外すると、長期間生存していた打ち切り患者の情報が失われ、死亡した患者のデータだけから生存時間を推定することになります。結果として生存時間を過小推定します。Kaplan-Meier 法は「少なくともここまで生存していた」という不完全な情報もリスク集合の計算に反映させて生存曲線を推定します。
打ち切りの数理的な扱いは生存分析の基礎を参照してください。
全体の生存曲線を推定する
メニューバーから Analysis > Survival Analysis > Kaplan-Meier... を選択します。Kaplan-Meier タブが開きます。
変数を設定する
- Time Variable:
timeを選択します - Event Variable:
DEATH_EVENTを選択します
Group Variable は空のままにします。

Run Analysis をクリックします。

生存曲線を読む
横軸が追跡期間(日数)、縦軸が生存確率 です。Kaplan-Meier 法は分布の形状を仮定せず、各イベント時刻での生存確率を直接推定するため、曲線は階段状のステップ関数になります。ステップが下がる位置が死亡の発生時点、曲線上の + マークが打ち切りの発生時点です。曲線の周囲の帯は95%信頼区間です。
Summary Statistics を確認する
| 項目 | 意味 |
|---|---|
| n | 対象者数(299人) |
| Events | 死亡数 |
| Median | 生存時間の中央値 |
Median は、生存曲線が の水平線と交わる時点です。対象者の半数がイベントを経験するまでの時間を表し、生存時間の代表値として広く使われます。
貧血の有無で生存曲線を比較する
次に、貧血(anaemia)の有無によって生存曲線が異なるかを調べます。
Group Variable を設定する
Group Variable のドロップダウンで anaemia を選択し、Run Analysis をクリックします。

2本の生存曲線が表示されます。anaemia = 0(貧血なし)と anaemia = 1(貧血あり)のグループです。
曲線の見方
各時点での2本の曲線の間隔は、その時点における群間の推定生存確率の差です。各曲線の信頼帯はそれぞれの群の生存関数の推定精度を表すもので、帯の重なりから群間の差を判断することはできません。群間比較には Log-rank 検定を使います。
Log-rank 検定の結果を読む
Group Variable を指定すると、曲線の下に Log-rank 検定の結果が表示されます。
Log-rank 検定は「2つの群の生存曲線が同じである」という帰無仮説を検定します。
| 項目 | 説明 |
|---|---|
| Chi-squared | 検定統計量です。各イベント時刻で群ごとの観測死亡数と期待死亡数の差を集計して算出します。帰無仮説のもとで自由度 df のカイ二乗分布に近似的に従います |
| df | カイ二乗分布の自由度です。群数 1 で決まります(2群の場合は1) |
| p-value | 帰無仮説が正しいと仮定した場合に、観測された検定統計量以上に極端な値が得られる確率です。事前に設定した有意水準と比較して帰無仮説を棄却するかどうかを判断します |

群ごとの詳細テーブルには Observed(実際の死亡数)と Expected(帰無仮説のもとで期待される死亡数)が表示されます。
- O/E > 1: 期待よりも死亡が多い(生存率が低い)
- O/E < 1: 期待よりも死亡が少ない(生存率が高い)
Number at Risk テーブル
生存曲線の下に Number at Risk テーブルが表示されます。各時点でリスク集合に残っている(死亡も打ち切りもされていない)患者の人数です。
時間の経過とともに数が減っていくのは、死亡と打ち切りの両方で患者がリスク集合から離脱するためです。リスク集合の人数が少ない時点では推定の不確実性が大きくなり、信頼区間の帯が広がります。
他の群変数で比較する
同様の手順で、高血圧(high_blood_pressure)や喫煙(smoking)でも群分けして比較できます。

群変数を変えるたびに Log-rank 検定を実行できますが、複数の群変数を試す作業は仮説の生成です。検定を繰り返すと多重検定の問題が生じます。探索で見つけた知見は探索的分析として報告し、検定には独立に収集した新しいデータを使います。
Kaplan-Meier 法は一度に1つの群変数しか扱えません。複数の要因を同時に考慮したい場合(たとえば「貧血の影響を年齢で調整して評価したい」場合)は、Cox 比例ハザードモデルを使います。Cox 回帰の使い方は生存分析を参照してください。
結果をレポートに追加する
生存曲線を論文やプレゼンテーション用に保存するには、Add to Report ボタンをクリックします。生存曲線がレポートに追加されます。
レポートの使い方はレポートを参照してください。
振り返り
- 生存時間データの構造: 時間変数(追跡期間)とイベント変数(死亡/打ち切り)の2つが必要です
- 打ち切り: 追跡終了時に生存していた患者も、「少なくともここまで生存」という情報として分析に含まれます
- 生存曲線の推定: Kaplan-Meier 法は分布を仮定せず、観測データから直接生存曲線を推定します
- 群間比較: Group Variable を設定すると、群ごとの生存曲線と Log-rank 検定が得られます
生存分析の数理的な背景は生存分析の基礎で説明しています。
参考文献
- Chicco, D., & Jurman, G. (2020). Machine learning can predict survival of patients with heart failure from serum creatinine and ejection fraction alone. BMC Medical Informatics and Decision Making, 20, 16.
- Kaplan, E. L., & Meier, P. (1958). Nonparametric estimation from incomplete observations. Journal of the American Statistical Association, 53(282), 457-481.