Main Content

fitcox

コックス比例ハザード モデルの作成

R2021a 以降

説明

関数 fitcox は、寿命データについてのコックス比例ハザード モデルを作成します。基本的なコックス モデルには、ハザード関数 h0(t) とモデル係数 b が含まれており、予測子 X についての時間 t におけるハザード率は次のようになります。

h(Xi,t)=h0(t)exp[j=1pxijbj],

係数 b は時間に依存しません。fitcox は、モデル係数 b とハザード率 h0(t) の両方を推定し、それらを結果の CoxModel オブジェクトにプロパティとして格納します。

完全なコックス モデルは、基本的なモデルを拡張したもので、異なるベースラインを基準とするハザードや階層化変数などが含まれています。コックス比例ハザード モデルの拡張を参照してください。

coxMdl = fitcox(X,T) は、予測子の値 X とイベント時間 T を使用してコックス比例ハザード モデル オブジェクト coxMdl を返します。

coxMdl = fitcox(X,T,Name,Value) は、1 つ以上の引数 Name,Value を使用して当てはめを変更します。たとえば、データに打ち切り (観測されない値) が含まれる場合は、引数 Censoring で打ち切りデータを指定します。

すべて折りたたむ

ワイブル確率変数では、形状パラメーターが同じであればハザード率は比例します。ワイブル分布を参照してください。スケール パラメーターを a、形状パラメーターを b とすると、時間 t におけるハザード率は次のようになります。

babtb-1.

ワイブル分布から疑似無作為標本を生成します。スケール パラメーターは 1、5、および 1/3 で、形状パラメーターはいずれも B とします。

rng default % For reproducibility
B = 2;
A = ones(100,1);
data1 = wblrnd(A,B);
A2 = 5*A;
data2 = wblrnd(A2,B);
A3 = A/3;
data3 = wblrnd(A3,B);

データの table を作成します。予測子は 3 つの変数の型で、1、2、または 3 です。

predictors = categorical([A;2*A;3*A]);
data = table(predictors,[data1;data2;data3],'VariableNames',["Predictors" "Times"]);

データにコックス回帰を当てはめます。

mdl = fitcox(data,"Times")
mdl = 
Cox Proportional Hazards regression model

                     Beta        SE        zStat       pValue  
                    _______    _______    _______    __________

    Predictors_2    -3.5834    0.33187    -10.798    3.5299e-27
    Predictors_3     2.1668    0.20802     10.416    2.0899e-25


Log-likelihood: -1197.917

rates = exp(mdl.Coefficients.Beta)
rates = 2×1

    0.0278
    8.7301

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

lightbulb データ セットを読み込みます。

load lightbulb

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

coxMdl = fitcox(lightbulb(:,2),lightbulb(:,1), ...
    'Censoring',lightbulb(:,3))
coxMdl = 
Cox Proportional Hazards regression model

           Beta       SE      zStat       pValue  
          ______    ______    ______    __________

    X1    4.7262    1.0372    4.5568    5.1936e-06


Log-likelihood: -212.638

exp(Beta) を評価して、蛍光灯電球と比較した白熱灯電球のハザード率を求めます。

hr = exp(coxMdl.Coefficients.Beta)
hr = 112.8646

ハザード率の推定値は eBeta = 112.8646 です。つまり、白熱灯電球の推定ハザードは蛍光灯電球のハザードの 112.86 倍であることを意味します。coxMdl.Coefficients.pValue の値が小さいことから、2 種類の電球のハザード率が同じになる、つまり Beta = 0 になる可能性は無視できます。

入力引数

すべて折りたたむ

予測子の値。行列または table として指定します。

  • 行列には、予測子ごとに 1 つの列と観測値ごとに 1 つの行が格納されます。

  • table には、観測値ごとに 1 つの行が格納されます。table には予測子に加えて時間のデータも格納できます。

既定では、予測子データが table 内にある場合、fitcox は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列のいずれか、あるいは文字ベクトルの cell 配列である場合に、変数を categorical であると見なします。予測子データが行列である場合、fitcox はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。

XT'Frequency' の値、または 'Stratification' の値に NaN 値が含まれている場合、fitcox はコックス モデルを当てはめるときに、NaN 値がある行をすべてのデータから削除します。

データ型: double | table | categorical

イベント時間。次のいずれかとして指定します。

  • 実数の列ベクトル。

  • 開始時間と終了時間を表す 2 つの列からなる実数の行列。

  • table X の列の名前。

  • table X のウィルキンソンの表記法による式。たとえば、table の列 'x''y' をモデルに含める場合は次のように指定します。

    'T ~ x + y'

    ウィルキンソンの表記法を参照してください。

ベクトルまたは行列の要素について、T の行数は X の行数と同じでなければなりません。

時変係数をもつモデルを当てはめるには、2 列の形式の T を使用します。共変量が時間に依存するコックス比例ハザード モデルを参照してください。

データ型: single | double | char | string

名前と値の引数

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

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

例: 打ち切り値 cens を含むデータを当てはめるには、'Censoring',cens を指定します。

ベースライン ハザードの計算対象となる X 値。実数のスカラーまたは行ベクトルとして指定します。Baseline が行ベクトルの場合、長さは予測子の数であるため、ベースラインは予測子ごとに 1 つになります。

連続予測子の既定のベースラインは mean(X) であるため、それらの予測子に対する X の既定のハザード率は h(t)*exp((X – mean(X))*b) です。カテゴリカル予測子の既定のベースラインは 0 です。0 を基準にしてすべての予測子に対するベースラインを計算するには「0」を入力します。これにより、X のハザード率は h(t)*exp(X*b) になります。ベースラインを変更するとハザード率は変わりますが、係数推定値には影響しません。

特定されたカテゴリカル予測子の場合、fitcox はダミー変数を作成します。fitcox は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。

例: 'Baseline',0

データ型: double

係数の初期値。係数の値の数値ベクトルとして指定します。これらの値から fitcox で実行される尤度最大化の反復が開始されます。

データ型: double

カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

説明
正の整数のベクトルベクトルの各エントリは、カテゴリカル変数が含まれている予測子データ (X) の列に対応するインデックス値です。
logical ベクトルtrue というエントリは、予測子データ (X) の対応する列がカテゴリカル変数であることを意味します。
文字行列行列の各行は table X 内の予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は table X 内の予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
'all'すべての予測子がカテゴリカルです。

既定では、予測子データがテーブル内にある場合、fitcox は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列のいずれか、あるいは文字ベクトルの cell 配列である場合に、変数を categorical であると見なします。予測子データが行列である場合、fitcox はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 'CategoricalPredictors' を使用してそれらを指定します。

特定されたカテゴリカル予測子の場合、fitcox はダミー変数を作成します。fitcox は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。

例: 'CategoricalPredictors','all'

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

打ち切りのインジケーター。X と同じ行数の boolean ベクトル、または table X の列の名前として指定します。右側打ち切りの観測値の場合は 1、完全に観測された観測値の場合は 0 を使用します。既定の設定では、すべての観測値が完全に観測されます。たとえば、打ち切りデータのコックス比例ハザード モデルを参照してください。

例: 'Censoring',cens

データ型: logical

観測値の頻度または重み。非負のスカラー値が格納されている T と同じサイズの配列として指定します。この配列には、観測値の頻度に対応する整数値、または観測値の重みに対応する非負値を格納できます。

既定は、X および T の各行に対して 1 です。

XT'Frequency' の値、または 'Stratification' の値に NaN 値が含まれている場合、fitcox はコックス モデルを当てはめるときに、NaN 値がある行をすべてのデータから削除します。

例: 'Frequency',w

データ型: double

fitcox で解を推定するために使用する反復アルゴリズムのアルゴリズム制御パラメーター。構造体として指定します。この構造体の作成には statset を使用します。パラメーター名と既定値については、次の表を参照するか「statset('fitcox')」と入力してください。

表にある "終了許容誤差" とは、内部の反復によるその値の変化が許容値未満になると反復が停止することを意味します。

構造体のフィールド説明
Displayコマンド ラインに返す情報の量
  • 'off' — なし (既定の設定)

  • 'final' — 最終出力

  • 'iter' — 各反復における出力

MaxFunEvals関数評価の最大数正の整数 (既定値は 200)
MaxIter最大反復回数正の整数 (既定値は 100)
TolFun尤度の変化の終了許容誤差 (コックス比例ハザード モデルを参照)正のスカラー (既定値は 1e-8)
TolXパラメーター (予測子の推定) の変化の終了許容誤差正のスカラー (既定値は 1e-8)

例: 'OptimizationOptions',statset('TolX',1e-6,'MaxIter',200)

予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。'PredictorNames' の機能は、学習データの提供方法によって決まります。

  • X を数値配列として指定した場合、'PredictorNames' を使用して X 内の予測子変数に名前を割り当てることができます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'X1','X2',...} です。

  • X を table として指定した場合、'PredictorNames' を使用して学習に使用する予測子変数を選択できます。つまり、fitcox は、学習中に PredictorNames の予測子変数と時間変数のみを使用します。

    • PredictorNamesX.Properties.VariableNames のサブセットでなければならず、時間変数 T の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • 学習用の予測子は、'PredictorNames' とウィルキンソンの表記法による式の両方ではなく、いずれか一方を使用して指定します。

例: 'PredictorNames',{'Sex','Age','Weight','Smoker'}

データ型: string | cell

階層化変数。実数値の行列、table X の列の名前、またはカテゴリカル変数の配列として指定します。この行列の行数は T と同じでなければならず、各行は 1 つの観測値に対応しなければなりません。

既定の [] は階層化変数なしです。

XT'Frequency' の値、または 'Stratification' の値に NaN 値が含まれている場合、fitcox はコックス モデルを当てはめるときに、NaN 値がある行をすべてのデータから削除します。

例: 'Stratification',Gender

データ型: single | double | char | string | categorical

同順位の故障時間の処理方法。'breslow' (Breslow の方法) または 'efron' (Efron の方法) として指定します。同時発生イベントの部分尤度関数を参照してください。

例: 'TieBreakMethod','efron'

データ型: char | string

バージョン履歴

R2021a で導入