Допустим, у меня есть набор данных «почечный катетер». Я пытаюсь смоделировать кривую выживания, используя модель Кокса. Если я рассматриваю модель Кокса: мне нужна оценка базовой опасности. Используя встроенную функцию пакета R , я легко могу сделать это так:
survival
basehaz()
library(survival)
data(kidney)
fit <- coxph(Surv(time, status) ~ age , kidney)
basehaz(fit)
Но если я хочу написать пошаговую функцию базовой опасности для данной оценки параметра, b
как я могу продолжить? Я старался:
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)
Но это не дает тот же результат, что и basehaz(fit)
. В чем проблема?
Ответы:
basehaz()
Давайте попробуем это. (Следующий код приведен только для иллюстрации и не очень хорошо написан.)
частичный вывод:
Я подозреваю, что небольшая разница может быть связана с приближением частичной вероятности
coxph()
из-за связей в данных ...источник
kidney$time >= y[l]
status=0
status=1
status=0
coxph
вызова наfit<-coxph(Surv(time, status)~age, data=kidney, method="breslow")
исправит разницу в методах.