Come eseguire l'analisi ROC in R con un modello Cox


10

Ho creato alcuni modelli di regressione di Cox e vorrei vedere quanto bene funzionano questi modelli e ho pensato che forse una curva ROC o una statistica c potrebbe essere utile simile a questo articolo:

JN Armitage o JH van der Meulen, "Identificazione della comorbilità nei pazienti chirurgici utilizzando dati amministrativi con il Royal College of Surgeons Charlson Score", British Journal of Surgery, vol. 97, num. 5, ss. 772-781, mag 2010.

Armitage ha utilizzato la regressione logistica, ma mi chiedo se sia possibile utilizzare un modello dal pacchetto di sopravvivenza, survivalROC dà un'idea di ciò che è possibile, ma non riesco a capire come farlo funzionare con una regressione di Cox regolare.

Le sarei grato se qualcuno mi mostrasse come fare un'analisi ROC su questo esempio:

library(survival)
data(veteran)

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

Se possibile, apprezzerei sia l'output c-statics grezzo sia un bel grafico

Grazie!

Aggiornare

Grazie mille per le risposte. @Dwin: vorrei solo essere sicuro di averlo capito bene prima di selezionare la tua risposta.

Il calcolo come ho capito secondo il suggerimento di 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

Non ho familiarità con la funzione validate e il bootstrap ma dopo aver visto il prof. La risposta di Frank Harrel qui su R-help ho pensato che probabilmente era il modo di ottenere il Dxy. La guida per gli stati di convalida:

... Correlazione del Dxy rank di Somers da calcolare ad ogni ricampionamento (questo richiede un po 'più di tempo rispetto alle statistiche basate sulla probabilità). I valori corrispondenti alla riga Dxy sono uguali a 2 * (C - 0,5) dove C è l'indice C o la probabilità di concordanza.

Immagino di essere per lo più confuso dalle colonne. Ho pensato che il valore corretto fosse quello che dovrei usare ma non ho davvero capito l'output validato:

      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
...

Nella domanda R-help ho capito che avrei dovuto "surv = TRUE" nel cph se avessi degli strati ma non sono sicuro di quale sia lo scopo del parametro "u = 60" nella funzione validate. Le sarei grato se potesse aiutarmi a capirli e verificare che non ho fatto errori.


2
Probabilmente darei un'occhiata al pacchetto rms e al suo cph()comando.
chl

2
index.correctedè ciò che dovrebbe essere sottolineato. Queste sono stime della probabile performance futura. u=60non è necessario validateperché non hai strati. Se hai strati, le curve di sopravvivenza possono incrociarsi e devi specificare un particolare punto temporale per ottenere l'area ROC generalizzata.
Frank Harrell,

Risposte:


2

@chl ha indicato una risposta specifica alla tua domanda. La cphfunzione del pacchetto 'rms' produrrà un Somers-D che può essere trasformato banalmente in un c-index. Tuttavia, Harrell (che ha introdotto l'indice c nella pratica biostatistica) ritiene che ciò non sia saggio come strategia generale per la valutazione delle misure prognostiche, poiché ha un basso potere di discriminazione tra le alternative. Invece di fare affidamento sulla letteratura chirurgica per la guida metodologica, sarebbe più saggio cercare la saggezza accumulata nel testo di Harrell, "Regressione Modeling Strategies" o "Clinical Prediction Models" di Steyerberg.


4
Grazie per la nota. Penso che e non siano male per descrivere la discriminazione predittiva di un singolo modello predefinito. Ma come hai detto, a loro manca il potere di fare di più. CDxyC
Frank Harrell,

Grazie per le tue risposte, la mia situazione è che ho tre diversi punteggi che voglio confrontare e vedere come si comportano. Non ho avuto il tempo di esaminare la parte Somers-D e tornerò dopo che avrò avuto il tempo (ho dato una rapida occhiata e non ho trovato nulla di utile). Ho anche ordinato il libro @FrankHarrell, "Regressione Modeling Strategies", ISBN 13: 978-0387952321, e spero che mi guiderà nelle mie scelte.
Max Gordon,

2
Poiché Dxy = 2 * (c- 0,5) il calcolo di c dato Dxy dovrebbe essere banale.
DWin,

3

χ2


+1 per guidarmi nella giusta direzione. Ho appena finito di fare la statistica C e il punteggio più dettagliato che sto guardando aveva una statistica C di 0.4365081 mentre l'altra aveva 0.4414625 (suppongo che dovrei contare 0,5-Dxy / 2 nel mio caso). Ho impiegato parecchio tempo a fare il calcolo sul mio campione di 140 000; Ho dovuto abbassare i bootstrap a 10 e non sono sicuro di quale sia l'impatto. Non vedo l'ora di leggere il tuo libro (è nella posta) e spero che mi aiuti a capire meglio la metodologia e confrontare la statistica C con l'indice di adeguatezza.
Max Gordon,

Buona. Non è facile dire se .44 vs. .43 significano molto senza guardare alle distribuzioni dei valori previsti.
Frank Harrell,

Capisco che è difficile commentare numeri del genere. Proverò a esaminare la distribuzione. La mia principale interpretazione del risultato è che il mio modello spiega molto poco e anche se c'è una piccola differenza, probabilmente non è di grande importanza. Sarebbe interessante cosa aspettarsi in un contesto di sopravvivenza - raggiungere un valore di .8 come hanno fatto nell'analisi a cui ho fatto riferimento nella mia domanda sembra abbastanza lontano ... ma poi di nuovo la mia sopravvivenza è la sopravvivenza di una protesi impiantata e non la sopravvivenza del paziente. Hanno anche usato la regressione logistica che forse cambia la stima.
Max Gordon,

La regressione logistica non funzionerebbe se il tempo è importante o il tempo di follow-up varia tra i soggetti. Tornando alla domanda originale, i rischi previsti avranno una distribuzione ristretta se il modello spiega una minima variazione.
Frank Harrell,

Ho appena ricevuto il tuo libro ... Ho avuto un blocco rapido nella parte di sopravvivenza ma quando provo il tuo caso di studio nel capitolo 20 ma ho un errore sulla parte di imputo (w, sz): 'variabile sz non ha un attributo names () '. Ho seguito il cap. 8: caricato il dataframe con getHdata (prostata) (impossibile trovare il sito Web nel libro), ha fatto w <- transcan (~ sz + sg + ap + sbp + dbp + age + wt + hg + ekg + pf + bm + hx, imputato = T, trasformato = T, imcat = "albero", dati = prostata) ma non ho trovato nulla sulla denominazione ...
Max Gordon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.