predict.coxph()
calcula a taxa de risco relativa à média da amostra para todas as variáveis preditoras de p . Os fatores são convertidos em preditores fictícios, como de costume, cuja média pode ser calculada. Lembre-se de que o modelo Cox PH é um modelo linear para o risco log emh ( t ) :
emh ( t ) = lnh0 0( t ) + β1X1+ ⋯ + βpXp= lnh0 0( t ) + X β
Onde é o risco de linha de base não especificado. De forma equivalente, o perigo de h ( t ) é modelado como h ( t ) = h 0 ( t ) ⋅ e β 1 X 1 + ⋯ + β p X p = h 0 ( t ) ⋅ e X β . A taxa de risco entre duas pessoas i e i ' com valores de previsãoh0(t)h(t)h(t)=h0(t)⋅eβ1X1+⋯+βpXp=h0(t)⋅eXβii′ e X i ' são, portanto, independentes do risco de linha de base e do tempot:XiXi′t
hi(t)hi′(t)=h0(t)⋅eXiβh0(t)⋅eXi′β=eXiβeXi′β
Para a taxa de risco estimada entre as pessoas e i ' , basta inserir as estimativas do coeficiente b 1 , ... , b p para o β 1 , ... , β p , fornecendo e X i b e e X i ′ b .ii′b1,…,bpβ1,…,βpeXibeXi′b
Como exemplo em R, uso os dados do apêndice de John Fox no modelo Cox-PH, que fornece um texto introdutório muito bom. Primeiro, buscamos os dados e construímos um modelo simples de Cox-PH para o tempo de prisão dos presos libertados ( fin
: fator - recebemos ajuda financeira com codificação fictícia "no"
-> 0, "yes"
-> 1 age
,: idade no momento da libertação, prio
: número de condenações anteriores):
> 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
Agora, inserimos as médias de amostra de nossos preditores na fórmula :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)
Agora, inserimos os valores preditores das 4 primeiras pessoas na fórmula .eXb
r1234 <- exp(coefCPH["finyes"]*(as.numeric(Rossi[1:4, "fin"])-1)
+ coefCPH["age"] *Rossi[1:4, "age"]
+ coefCPH["prio"] *Rossi[1:4, "prio"])
Agora calcule o risco relativo para as primeiras 4 pessoas em relação à média da amostra e compare com a saída de 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 você possui um modelo estratificado, a comparação predict.coxph()
é em comparação com as médias de estratos, isso pode ser controlado através da reference
opção explicada na página de ajuda.
meanFin <- mean(as.numeric(Rossi$fin) - 1)
não faz muito sentido, poisfin
é categórico. Você não precisamodeFin <- get_Mode(Rossi$fin)
neste caso?fin
é binário, portanto, a representação numérica do fator apenas possui os valores 1 e 2. A subtração 1 nos fornece a variável codificada por dummy com os valores 0 e 1 que também aparece na matriz de design. Observe que isso não funcionará para fatores com mais de 2 níveis. Certamente é discutível se a média de variáveis dummy faz sentido, mas é isso quepredict.coxph()
faz.