単純な英語のRを使用したCox比例ハザード回帰モデルの解釈と検証


13

誰かが私のCoxモデルをわかりやすい英語で説明できますか?

関数を使用して、すべてのデータに次のCox回帰モデルを適合させましたcph。データはと呼ばれるオブジェクトに保存されますData。変数wxy連続しています。z2つのレベルの要因です。時間は月単位で測定されます。私の患者の中には、変数のデータが欠落しているものもありますz注意:私は、モデルにバイアスをかけないようにこれらの値を調整するというハレル博士の提案を以下に正式に指摘しました。今後もそうします)。

> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)

Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event)    w    x    y    z 
                0    0    0    0   14 

                Model Tests          Discrimination 
                                            Indexes        
Obs       152   LR chi2      8.33    R2       0.054    
Events     64   d.f.            4    g        0.437    
Center 0.7261   Pr(> chi2) 0.0803    gr       1.548    
                Score chi2   8.07                      
                Pr(> chi2) 0.0891                      

                   Coef    S.E.   Wald Z   Pr(>|Z|)
         w      -0.0133  0.0503    -0.26     0.7914  
         x      -0.0388  0.0351    -1.11     0.2679  
         y      -0.0363  0.0491    -0.74     0.4600  
         z=1     0.3208  0.2540     1.26     0.2067

またcox.zph、以下のコマンドを使用して比例ハザードの仮定をテストしようとしましたが、その結果を解釈する方法はわかりません。置くplot()コマンドの周りにすると、エラーメッセージが表示されます。

 cox.zph(fit, transform="km", global=TRUE)
            rho chisq      p
 w      -0.1125 1.312 0.2520
 x       0.0402 0.179 0.6725
 y       0.2349 4.527 0.0334
 z=1     0.0906 0.512 0.4742
 GLOBAL      NA 5.558 0.2347

最初の問題

  • 誰かが上記の出力の結果をわかりやすい英語で説明できますか?私は医学的背景があり、統計の正式なトレーニングを受けていません。

第二の問題

  • ハレル博士が提案したように、rmsパッケージを使用して10回の交差検証を100回繰り返してモデルを内部的に検証したいと思います(私が理解していることから、これは100 * 10 = 1000異なるモデルを構築し、生存時間を予測することを求めます彼らが見たことがなかった患者の)。

    validate示されているように、関数を使用してみました。

    > v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T)
    > v1
          index.orig training    test optimism index.corrected  n
    Dxy      -0.2542  -0.2578 -0.1356  -0.1223         -0.1320 10
    R2        0.0543   0.0565  0.1372  -0.0806          0.1350 10
    Slope     1.0000   1.0000  0.9107   0.0893          0.9107 10
    D         0.0122   0.0128  0.0404  -0.0276          0.0397 10
    U        -0.0033  -0.0038  0.0873  -0.0911          0.0878 10
    Q         0.0155   0.0166 -0.0470   0.0636         -0.0481 10
    g         0.4369   0.4424  0.6754  -0.2331          0.6700 10

    100倍のリサンプリングをどのように実行しますか?上記のコードは相互検証を一度しか実行しないと思います。

  • それから、私のモデルが予測でどれほど優れていたかを知りたかった。私は次を試しました:

    > c_index <- abs(v1[1,5])/2 + 0.5
    > c_index
    [1] 0.565984

    これは、私のモデルがコインをひっくり返すよりもほんの少しだけ良いということですか?

第三の問題

ハレル博士は、共変量効果の線形性を仮定しており、サンプル内のイベントの数は、すべての共変量効果が線形である場合に信頼できるモデルに適合するのにかろうじて大きいことを指摘しています。

  • これは、何らかの相互作用用語をモデルに含める必要があるということですか?もしそうなら、何を置くべきかについてのアドバイスはありますか?

2
上記の最初の質問に、最初に質問してから約3時間後にいくつかの主要な編集を行いました。私は、ハレル博士の非常に役立つアドバイスに従うことを試みました。誰かが上記のcph出力を簡単な英語で説明してくれるか、そうするための参考文献を教えてくれたら、本当に感謝しています。ハレル博士、これまでお世話になりました。
アレクサンダー

回答:


12

開始するには、いくつかのことを考慮してください。まず、データが不足している観測を除外しすぎているため、バイアスが発生します。複数の代入を検討してください。第二に、プロット方法がありますcox.zphこれは、比例ハザードの評価に役立ちます。第三に、共変量効果の線形性を仮定しました。第4に、トレーニングサンプル内のイベントの数は、すべての共変量効果が線形である場合(まれですが)信頼できるモデルに適合するのに十分なほどわずかです。また、予測精度の信頼できる評価を得るためには、テストサンプルにおそらく400のイベントが必要です。データを2つの部分に分割するのに十分なデータがあることは明らかではありません。リサンプリング検証(10回の交差検証を100回繰り返す、またはブートストラップを使用)がより良いソリューションです。元の外部検証(関数rcorr.censおよびval.surv)とリサンプリング内部検証(関数validatecalibrate)の両方がR rmsパッケージに実装されています。のケーススタディrms2×2


1
ハレル博士、コメントありがとうございます。私はタイピングを試みましたplot(cox.zph(fit[[1]], transform="km", global=TRUE))が、これはをもたらしましたError in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom。この関数を間違って呼び出していますか?
アレクサンダー

1
トレーニングデータと検証データを組み合わせると、166の観測値と75のイベントがあります。あなたが提案したように、そのデータが欠落している13の観測値に対して変数「z」の値を代入して、その問題を排除することができます。100x 10倍の交差検証を実行するという提案が気に入っています。時間がある場合は、rmsパッケージを使用してこれを行う方法について、より具体的なヒントを提供していただければ幸いです。それまでの間、私はあなたのウェブサイトを読み続けます。今後、あなたのコースを受講したいと思います。残念ながら、私は現在ヨーロッパにいますが、少し離れすぎています!
アレクサンダー

2
特異点の問題については、を実行しますplot(cox.zph(...), df=2)。以下のためのコースノートのケーススタディを参照してくださいrms例か(も必要パッケージのインストールHmiscパッケージ)およびヘルプファイルを起動するこれらのコマンドを入力します?cph ?validate.cph ?calibrate.cph
フランク・ハレル

2
ご協力ありがとうございます!今週の週末に、コースノートを印刷し、今週を読んで、すべてのケーススタディを実行します。
アレクサンダー

4

R cph関数の出力は、関連する例に基づいて、J。Foxによるこのわかりやすい論文で説明されています。

まだお持ちでない場合は、このペーパーを読むことを強くお勧めします。


1
論文がcph出力の解釈を提案する方法を説明できますか?
smillig

2
+1参照をありがとう、このサイトへようこそ!独立した答えが得られるよう努力する際に​​、論文の内容の簡潔な概要をお伝えいただければ幸いです。
ガラ

このリンクはもうありません
MarcinKosiński15年

1
socialsciences.mcmaster.ca/jfox/Books/Companion-1E/…リンクは現在機能しており、この回答で参照されている論文と同じように見えます。
dnlbrky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.