Coxモデルを使用してRでROC分析を行う方法


10

いくつかのCox回帰モデルを作成しました。これらのモデルのパフォーマンスを確認したいと思います。ROC曲線またはc統計が、この記事で使用しているのと同じように役立つと思います。

JNアーミテージとJHファンデルムーレン、「Royal College of Surgeons Charlsonスコアによる管理データを使用した外科患者の共存症の特定」、British Journal of Surgery、vol。97、num。5、ss。772-781、Maj 2010。

アーミテージはロジスティック回帰を使用しましたが、サバイバルパッケージのモデルを使用できるかどうか、サバイバル ROCはこれが可能であるというヒントを示していますが、通常のCox回帰でそれを機能させる方法を理解できません。

この例についてROC分析を行う方法を誰かに教えてもらえれば幸いです。

library(survival)
data(veteran)

attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)

可能であれば、生のc-statics出力と素敵なグラフの両方に感謝します

ありがとう!

更新

回答ありがとうございます。@Dwin:私はあなたの答えを選択する前に、私がそれを正しく理解していることを確認したいと思います。

DWinの提案によると、私が理解している計算:

library(survival)
library(rms)
data(veteran)

fit.cph <- cph(surv ~ trt + age + prior, data=veteran, x=TRUE, y=TRUE, surv=TRUE)

# Summary fails!?
#summary(fit.cph)

# Get the Dxy
v <- validate(fit.cph, dxy=TRUE, B=100)
# Is this the correct value?
Dxy = v[rownames(v)=="Dxy", colnames(v)=="index.corrected"]

# The c-statistic according to the Dxy=2(c-0.5)
Dxy/2+0.5

検証機能とブートストラップに慣れていませんが、profを見たところです。R-helpに関するフランクハレルの回答ここでは、おそらくDxyを取得する方法だと考えました。状態を検証するためのヘルプ:

...各リサンプルで計算されるSomersのDxyランク相関(これは、尤度ベースの統計よりも少し時間がかかります)。行Dxyに対応する値は2 *(C-0.5)に等しく、CはCインデックスまたは一致確率です。

私は主に列に混乱していると思います。私は修正された値が私が使用すべきものであることを理解しましたが、検証の出力を本当に理解していません:

      index.orig training    test optimism index.corrected   n
Dxy      -0.0137  -0.0715 -0.0071  -0.0644          0.0507 100
R2        0.0079   0.0278  0.0037   0.0242         -0.0162 100
Slope     1.0000   1.0000  0.2939   0.7061          0.2939 100
...

ではR-ヘルプの質問私は地層持っているが、私は検証機能の「uが= 60」パラメータの目的が何であるかの不確実だ場合、私はCPHに「surv = TRUE」を持つべきであることを理解しました。これらを理解して、間違いがないことを確認していただけると助かります。


2
おそらくrmsパッケージとそのcph()コマンドを見てみましょう。
11

2
index.corrected強調すべきことです。これらは、予想される将来のパフォーマンスの見積もりです。 階層u=60がないため、は必要ありませんvalidate。階層がある場合、生存曲線は交差する可能性があり、一般化されたROC領域を取得するために特定の時点を指定する必要があります。
フランクハレル

回答:


2

@chlがあなたの質問に対する特定の回答を示しました。'rms'パッケージのcph関数は、ささやかにc-indexに変換できるSomers-Dを生成します。ただし、ハレル(生物統計学の実践にc-indexを導入した)は、代替案を識別する力が低いため、これは予後指標を評価するための一般的な戦略としては賢明ではないと考えています。方法論的ガイダンスを外科的文献に頼るのではなく、ハレルのテキスト「回帰モデリング戦略」またはシュタイアーバーグの「臨床予測モデル」に蓄積された知恵を探すほうが賢明でしょう。


4
メモありがとうございます。とは、事前に指定された単一のモデルの予測差別を記述するのに悪くないと思います。しかし、あなたが言ったように、彼らはそれ以上のことをする力を欠いています。 CDxyC
フランクハレル2011年

回答ありがとうございます。私の状況では、3つの異なるスコアを比較して、それらのパフォーマンスを確認したいと考えています。私はソマーズDの部分を調べる時間がありませんでした。時間があれば、また戻ってきます(ざっと目を通し、何も役に立たなかった)。また、@ FrankHarrellの本、「Regression Modeling Strategies」、ISBN 13:978-0387952321も注文しました。
Max Gordon

2
Dxy = 2 *(c- 0.5)なので、Dxyを指定したcの計算は簡単です。
DWin

3

必要に応じて、より大きなモデル内にモデルを埋め込み、追加の変数の追加値に対して「チャンク」尤度比テストを実行すると、強力なテストが得られます。私の本は、このアプローチから生じる指標(「妥当性指標」)について述べています。χ2


正しい方向に案内してくれる+1。私はC統計の実行を終えたばかりで、私が見ているより詳細なスコアはC統計が0.4365081で、もう1つは0.4414625でした(私の場合は0.5-Dxy / 2を数える必要があると思います)。140 000サンプルの計算にはかなり時間がかかりました。ブートストラップを10に下げる必要がありましたが、その影響はわかりません。私はあなたの本(メールにあります)を読むのを楽しみにしています。うまくいけば、方法論をよりよく理解し、C統計と妥当性指数を比較するのに役立ちます。
Max Gordon、

良い。予測値の分布を見ないで、.44と.43の意味が大きいかどうかを判断するのは簡単ではありません。
フランクハレル

そのような数字についてコメントするのは難しいと思います。ディストリビューションを調べてみます。結果についての私の主な解釈は、私のモデルではほとんど説明されていないということです。わずかな違いはありますが、おそらくそれほど重要ではありません。サバイバル設定で何が期待できるかは興味深いでしょう。私の質問で参照した分析で行ったように0.8の値に到達すると、かなり遠くに思えます...患者の生存ではありません。彼らはまた、おそらく推定値を変更するロジスティック回帰を使用しました。
Max Gordon

時間が重要であるか、フォローアップ時間が被験者間で異なる場合、ロジスティック回帰は機能しません。元の質問に戻りますが、モデルによって説明される変動が非常に少ない場合、予測リスクは狭い分布になります。
フランクハレル

ちょうどあなたの本を手に入れました...私はサバイバル部分で簡単にロックしましたが、第20章のケーススタディを試してみましたが、impute(w、sz)部分でエラーが発生しました: 'variable sz has not have names()属性」。私はchaptに従いました。8:データフレームをgetHdata(prostate)でロードしました(本でWebサイトを見つけることができませんでした)、w <-transcan(〜sz + sg + ap + sbp + dbp + age + wt + hg + ekg + pf + bm + hx、imputed = T、transformed = T、imcat = "tree"、data = prostate)が、名前付けに何も見つかりませんでした...
Max Gordon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.