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:XiXi′t
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 .ii′b1,…,bpβ1,…,βpeXibeXi′b
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.