Digamos que tengo un conjunto de datos de "catéter renal". Estoy tratando de modelar una curva de supervivencia usando un modelo de Cox. Si considero un modelo de Cox: necesito la estimación del riesgo de referencia. Al usar la función integrada del paquete R , puedo hacerlo fácilmente de esta manera:
survival
basehaz()
library(survival)
data(kidney)
fit <- coxph(Surv(time, status) ~ age , kidney)
basehaz(fit)
Pero si quiero escribir una función paso a paso del peligro de la línea de base para una estimación dada del parámetro, b
¿cómo puedo proceder? Lo intenté:
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)
Pero esto no da el mismo resultado que basehaz(fit)
. ¿Cuál es el problema?
Respuestas:
Aparentemente, en
basehaz()
realidad calcula una tasa de riesgo acumulativo, en lugar de la tasa de riesgo en sí. La fórmula es la con h 0 ( y ( l ) ) = d ( l )Intentemos esto. (El siguiente código está ahí solo a modo ilustrativo y no está destinado a estar muy bien escrito).
salida parcial:
Sospecho que la ligera diferencia podría deberse a la aproximación de la probabilidad parcial
coxph()
debido a lazos en los datos ...fuente
kidney$time >= y[l]
status=0
status=1
status=0
coxph
llamada confit<-coxph(Surv(time, status)~age, data=kidney, method="breslow")
solucionará la diferencia en los métodos.