Come interpretare l'output di predict.coxph?


17

Dopo aver inserito un modello coxmodel è possibile fare previsioni e recuperare il rischio relativo di nuovi dati. Quello che non capisco è come viene calcolato il rischio relativo per un individuo e a che cosa è relativo (cioè la media della popolazione)? Qualche consiglio per le risorse per aiutare a capire (non sono molto avanzato nell'analisi di sopravvivenza, quindi più semplice è, meglio è)?

Risposte:


32

predict.coxph()calcola il rapporto di rischio relativo alla media del campione per tutte le variabili predittive . I fattori vengono convertiti in predittori fittizi come al solito, la cui media può essere calcolata. Ricordiamo che il modello Cox PH è un modello lineare per il log-hazard ln h ( t ) :plnh(t)

lnh(t)=lnh0(t)+β1X1++βpXp=lnh0(t)+Xβ

Dove è il rischio di base non specificato. Equivalentemente, il pericolo h ( t ) è modellato come h ( t ) = h 0 ( t ) e β 1 X 1 + + β p X p = h 0 ( t ) e X β . Il rapporto di rischio tra due persone i e i ' con valori predittivih0(t)h(t)h(t)=h0(t)eβ1X1++βpXp=h0(t)eXβii e X i ' sono quindi indipendenti dal pericolo di base e indipendenti dal tempot:XiXit

hi(t)hi(t)=h0(t)eXiβh0(t)eXiβ=eXiβeXiβ

Per il rapporto di rischio stimato tra le persone e i ' , inseriamo semplicemente le stime del coefficiente b 1 , ... , b p per β 1 , ... , β p , dando e X i b e e X i b .iib1,,bpβ1,,βpeXibeXib

Come esempio in R, uso i dati dell'appendice di John Fox sul modello Cox-PH che fornisce un testo introduttivo molto carino. Innanzitutto, recuperiamo i dati e costruiamo un semplice modello di Cox-PH per il tempo di arresto dei prigionieri rilasciati ( fin: fattore: ricevuto un aiuto finanziario con codifica fittizia "no"-> 0, "yes"-> 1 age,: età al momento del rilascio, prio: numero di condanne precedenti):

> URL   <- "http://socserv.mcmaster.ca/jfox/Books/Companion/data/Rossi.txt"
> Rossi <- read.table(URL, header=TRUE)                  # our data
> Rossi[1:3, c("week", "arrest", "fin", "age", "prio")]  # looks like this
  week arrest fin age prio
1   20      1  no  27    3
2   17      1  no  18    8
3   25      1  no  19   13

> library(survival)                                      # for coxph()    
> fitCPH <- coxph(Surv(week, arrest) ~ fin + age + prio, data=Rossi)    # Cox-PH model
> (coefCPH <- coef(fitCPH))                              # estimated coefficients
     finyes         age        prio 
-0.34695446 -0.06710533  0.09689320 

Ora inseriamo le medie dei campioni per i nostri predittori nella formula :eXb

meanFin  <- mean(as.numeric(Rossi$fin) - 1)   # average of financial aid dummy
    meanAge  <- mean(Rossi$age)                   # average age
meanPrio <- mean(Rossi$prio)                  # average number of prior convictions
rMean <- exp(coefCPH["finyes"]*meanFin        # e^Xb
           + coefCPH["age"]   *meanAge
           + coefCPH["prio"]  *meanPrio)

Ora inseriamo i valori predittivi delle prime 4 persone nella formula .eXb

r1234 <- exp(coefCPH["finyes"]*(as.numeric(Rossi[1:4, "fin"])-1)
           + coefCPH["age"]   *Rossi[1:4, "age"]
           + coefCPH["prio"]  *Rossi[1:4, "prio"])

Ora calcola il rischio relativo per le prime 4 persone rispetto alla media del campione e confronta con l'output di predict.coxph().

> r1234 / rMean
[1] 1.0139038 3.0108488 4.5703176 0.7722002

> relRisk <- predict(fitCPH, Rossi, type="risk")   # relative risk
> relRisk[1:4]
        1         2         3         4 
1.0139038 3.0108488 4.5703176 0.7722002

Se si dispone di un modello stratificato, il confronto tra predict.coxph()è contro le medie degli strati, questo può essere controllato tramite l' referenceopzione spiegata nella pagina di aiuto.


2
+1 perché non è ovvio ottenere esattamente ciò che predict.coxph fa esattamente dalla pagina di aiuto!
Ocram,

È stato perfetto! Molto semplice da capire!
user4673,

meanFin <- mean(as.numeric(Rossi$fin) - 1)non ha molto senso, dal momento che finè categorico. Non è necessario modeFin <- get_Mode(Rossi$fin)in questo caso?
Zhubarb,

1
@Zhubarb finè binario, quindi la rappresentazione numerica del fattore ha solo i valori 1 e 2. Sottraendo 1 si ottiene la variabile con codice fittizio con i valori 0 e 1 che appare anche nella matrice del disegno. Nota che questo non funzionerà per fattori con più di 2 livelli. È certamente discutibile se la media delle variabili fittizie abbia senso, ma è quello che predict.coxph()fa.
Caracal,

In words, how would you interpret a hazard ratio of 3.01 (e.g. relRisk[2])?
RNB
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.