Digamos que eu tenha um conjunto de dados de "cateter renal". Estou tentando modelar uma curva de sobrevivência usando um modelo de Cox. Se eu considerar um modelo de Cox: preciso da estimativa do risco da linha de base. Usando a função interna do pacote R , posso fazer isso da seguinte maneira:
survival
basehaz()
library(survival)
data(kidney)
fit <- coxph(Surv(time, status) ~ age , kidney)
basehaz(fit)
Mas se eu quiser escrever uma função passo a passo do risco da linha de base para uma determinada estimativa de parâmetro, b
como posso proceder? Eu tentei:
bhaz <- function(beta, time, status, x) {
data <- data.frame(time,status,x)
data <- data[order(data$time), ]
dt <- data$time
k <- length(dt)
risk <- exp(data.matrix(data[,-c(1:2)]) %*% beta)
h <- rep(0,k)
for(i in 1:k) {
h[i] <- data$status[data$time==dt[i]] / sum(risk[data$time>=dt[i]])
}
return(data.frame(h, dt))
}
h0 <- bhaz(fit$coef, kidney$time, kidney$status, kidney$age)
Mas isso não dá o mesmo resultado que basehaz(fit)
. Qual é o problema?
Respostas:
Aparentemente,
basehaz()
na verdade calcula uma taxa de risco cumulativa, em vez da própria taxa de risco. A fórmula é como se com h 0 ( y ( l ) ) = d ( l )Vamos tentar isso. (O código a seguir existe apenas para ilustração e não pretende ser muito bem escrito.)
saída parcial:
Suspeito que a pequena diferença possa ser devida à aproximação da probabilidade parcial
coxph()
devido a laços nos dados ...fonte
kidney$time >= y[l]
status=0
status=1
status=0
coxph
chamada porfit<-coxph(Surv(time, status)~age, data=kidney, method="breslow")
corrigirá a diferença de métodos.