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' reference
opzione spiegata nella pagina di aiuto.