Main Content

survival

コックス比例ハザード モデルの生存の計算

R2021a 以降

    説明

    s = survival(coxMdl) は、コックス比例ハザード モデル coxMdl のベースライン生存時間関数を推定します。時間 t における生存時間関数は、時間 t までの生存の推定確率です。"ベースライン" という用語は、予測子の決まったベースラインにおける生存時間関数を意味します。この値は coxMdl.Baseline に格納され、既定値は学習に使用されたデータ セットの平均です。

    s = survival(coxMdl,X) は、予測子が X 内の値をもつときの生存時間関数を推定します。この場合、sX の各行に対する列です。

    s = survival(coxMdl,X,Stratification) は、与えられた階層化変数 Stratification の値についての生存時間関数を推定します。Stratification には X の行ごとに 1 つの行が必要です。

    メモ

    階層化変数を使用して coxMdl に学習させ、予測子変数 X を渡す場合は、survival に階層化変数も渡さなければなりません。

    s = survival(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせを使用し、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。たとえば、survival(CoxMdl,"Time",T) は、時間 T における生存を計算します。

    [s,Tout] = survival(___) は、それぞれの生存推定値が計算された時間 Tout も返します。

    すべて折りたたむ

    電球の寿命のシミュレーション データが格納された lightbulb データ セットでコックス比例ハザード回帰を実行します。電球データの 1 列目には 2 種類の電球の寿命 (時間単位) が含まれています。2 列目には電球が蛍光灯と白熱灯のどちらであるかを示すバイナリ変数が含まれています。0 は電球が蛍光灯であることを示し、1 は白熱灯であることを示します。3 列目には打ち切り情報が含まれています。0 は電球が故障するまで観測されたことを示し、1 は観測が打ち切られたことを示します。

    電球の寿命について、打ち切りを考慮してコックス比例ハザード モデルを当てはめます。予測子変数は電球のタイプです。

    load lightbulb
    coxMdl = fitcox(lightbulb(:,2),lightbulb(:,1), ...
        'Censoring',lightbulb(:,3));

    ベースライン生存時間関数を時間 t の関数として計算します。これは、時間 t の後に電球が故障する確率を意味します。既定では、予測子の平均についてベースラインが計算され、この場合は mean(lightbulb(:,2)) = 0.5 です。生存時間関数が計算された時間 Tout を返します。

    [s,Tout] = survival(coxMdl);

    生存を時間の階段状グラフとしてプロットします (時間 ToutcoxMdl.Hazard(:,1) にも格納されます)。

    hold on;
    stairs(Tout,s,'b-')
    xlabel 'Time \it t'
    ylabel 'Probability of failure after time \it t'

    Figure contains an axes object. The axes object with xlabel Time blank t, ylabel Probability of failure after time blank t contains an object of type stair.

    このプロットに蛍光灯電球と白熱灯電球の生存時間関数を重ねてプロットします。

    s_fluorescent = survival(coxMdl,0);
    s_incandescent = survival(coxMdl,1);
    stairs(Tout,s_fluorescent,'r-')
    stairs(Tout,s_incandescent,'k-')
    legend('Baseline','Fluorescent','Incandescent')
    hold off

    Figure contains an axes object. The axes object with xlabel Time blank t, ylabel Probability of failure after time blank t contains 3 objects of type stair. These objects represent Baseline, Fluorescent, Incandescent.

    生存データを作成せずにプロットを直接作成するには、plotSurvivalを使用します。

    coxModel データを読み込みます (これはコックス比例ハザード モデル オブジェクトの例で生成されるシミュレーション データです)。coxMdl という名前のモデルには、階層化レベルが 3 つ (1、2、および 3) と 3 つのカテゴリカル値 (1、1/20、および 1/100) をもつ予測子 X が含まれています。

    load coxModel

    3 つの階層化レベルの X = 1 の生存時間関数を計算します。

    c1 = categorical(1);
    X = [c1;c1;c1];
    stratification = [1;2;3];
    s = survival(coxMdl,X,stratification);

    3 つの生存時間関数をプロットします。最初に、3 つの階層化レベルの時間を調べます。

    t1 = find(coxMdl.Hazard(:,3) == 1);
    t1 = coxMdl.Hazard(t1,1);
    t2 = find(coxMdl.Hazard(:,3) == 2);
    t2 = coxMdl.Hazard(t2,1);
    t3 = find(coxMdl.Hazard(:,3) == 3);
    t3 = coxMdl.Hazard(t3,1);

    3 つのレベルの生存をプロットします。時間 1 ~ 30 についてプロットを表示します。

    plot(t1,s{1},t2,s{2},t3,s{3})
    xlim([1,30])
    legend('Stratification Level 1','Stratification Level 2','Stratification Level 3','Location','northeast')
    xlabel('Time t')
    ylabel('Probability of Survival Past t')

    Figure contains an axes object. The axes object with xlabel Time t, ylabel Probability of Survival Past t contains 3 objects of type line. These objects represent Stratification Level 1, Stratification Level 2, Stratification Level 3.

    または、引数 Time を指定して時間 1 ~ 30 における生存を評価します。

    t = linspace(1,30,300);
    st = survival(coxMdl,X,stratification,'Time',t);
    figure
    plot(t,st{1},t,st{2},t,st{3})
    legend('Stratification Level 1','Stratification Level 2','Stratification Level 3','Location','northeast')
    xlabel('Time t')
    ylabel('Probability of Survival Past t')

    Figure contains an axes object. The axes object with xlabel Time t, ylabel Probability of Survival Past t contains 3 objects of type line. These objects represent Stratification Level 1, Stratification Level 2, Stratification Level 3.

    入力引数

    すべて折りたたむ

    当てはめたコックス比例ハザード モデル。CoxModel オブジェクトとして指定します。coxMdl の作成には fitcox を使用します。

    モデルの予測子。coxMdl の学習に使用された型と同じ型の予測子の配列として指定します。X の各行が 1 つの予測子のセットを表します。

    データ型: double | table | categorical

    階層化レベル。coxMdl の学習に使用された型と同じ型の変数として指定します。Stratification には X と同じ数の行を指定します。

    データ型: single | double | logical | char | string | table | cell | categorical

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: survival(CoxMdl,Time=T)

    範囲外の時間の生存を計算するための外挿法。リストされた値のいずれかとして指定します。CoxModel オブジェクトでは、CoxModel.Hazard に格納される累積ベースライン ハザードを使用して関数 survival または plotSurvival のベースライン生存時間関数を計算します。範囲 (次で定義) 内の時間については、ベースライン生存時間関数の線形内挿から結果が得られます。

    非階層化モデルの場合、範囲は [T1,T2] です。ここで、T1 は最も早い学習時間の (1 - eps) 倍、T2 は最も遅い学習時間です。時間 TExtrapolationMethod に応じて、結果は次のようになります。

    • 'nearest' (既定) — T < T1 の場合、時間 T1 の結果になります。T > T2 の場合、時間 T2 の結果になります。

    • 'linear' — 結果は範囲内の最も近い時間からの線形外挿になります。外挿される生存の値は [0,1] に収まるように切り捨てられます。つまり、返される生存の値が val で線形外挿が extrapval であるとすると次のようになります。

      val = max(0, min(1,extrapval)).

    • 'next'T < T1 の場合、時間 T1 の結果になります。T > T2 の場合、結果は NaN になります。

    • 'none'T < T1 または T > T2 の場合、結果は NaN になります。

    • 'previous'T < T1 の場合、結果は NaN になります。T > T2 の場合、時間 T2 の結果になります。

    階層化モデルの各階層について、非階層化モデルとまったく同じように、その階層におけるイベント時間を使用して時間範囲を定義します。各階層における生存の外挿値に、階層の範囲に適用される ExtrapolationMethod が使用されます。

    例: 'next'

    データ型: char | string

    生存推定値の時間。実数ベクトルとして指定します。survival は、必要に応じて、指定された時間を並べ替えて列ベクトルに変換します。coxMdl.Hazard(:,1) の範囲内の非階層化モデルと時間については、結果の値が学習データの時間から線形に内挿されます。近似データ範囲に収まらない Time の値については、ExtrapolationMethod で指定された外挿法を使用して生存が外挿されます。

    階層化モデルの場合、coxMdl.Hazard(:,1) の各階層に対する個別の時間範囲が coxMdl.Hazard(:,2) において 0 で区切られます。survival は、非階層化モデルの場合と同じ手順を使用して各階層の生存を推定します。

    例: 0:40

    データ型: double

    出力引数

    すべて折りたたむ

    生存推定値。数値列ベクトルまたは数値列ベクトルの cell 配列として返されます。

    • 非階層化モデルの場合、s は、推定確率が格納された並べ替えられた数値列ベクトルです。

    • 階層化モデルの場合、s は、各階層化レベルについての推定確率が格納された並べ替えられた数値列ベクトルの cell 配列です。

    survival は、X の各行について生存推定値の列を返します。

    生存推定値の時間。次のいずれかとして返されます。

    • 非階層化モデルの場合、Tout は、学習セットの時間が格納された並べ替えられた数値列ベクトルです。

    • 階層化モデルの場合、Tout は、各階層化レベルについての学習セットの学習時間が格納された並べ替えられた数値列ベクトルの cell 配列です。

    ベクトル coxMdl.Hazard(:,1) には、階層化モデルと非階層化モデルの両方についての時間が格納されます。階層化モデルの場合、異なる階層化レベルの時間がエントリ 0 で区切られます。

    データ型: double | cell

    バージョン履歴

    R2021a で導入