콕스베이스 라인 위험


19

"신장 카테터"데이터 세트가 있다고 가정하겠습니다. Cox 모델을 사용하여 생존 곡선을 모델링하려고합니다. Cox 모형을 고려하면 : 기준 위험 추정치가 필요합니다. 내장 패키지 R 함수 를 사용하면 다음과 같이 쉽게 할 수 있습니다.

h(t,Z)=h0exp(bZ),
survivalbasehaz()
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). 무엇이 문제입니까?


@gung 이 질문에 도움 될 수 있습니까? 나는 며칠 동안 고투했다 ...
Haitao Du

답변:


21

분명히, basehaz()실제로 누적 위험 속도보다는 위험 속도 자체를 계산한다. 다음 공식은 : 와 여기서 는 고유 한 이벤트 시간을 나타내고 은 의 이벤트 수입니다. 및 의 집합 인 위험 의 경우에 여전히 취약 모든 개인 함유 . H 0(Y(L))=D(L)

H^0(t)=y(l)th^0(y(l)),
Y(1)<Y(2)<D(L)Y(L)R(Y(L))(Y)(L), Y(L)
h^0(y(l))=d(l)jR(y(l))exp(xjβ)
와이(1)<와이(2)<()와이()아르 자형(와이())와이()와이()

시도해 봅시다. (다음 코드는 설명을위한 것으로, 잘 작성되지 않았습니다.)

#------package------
library(survival)

#------some data------
data(kidney)

#------preparation------
tab <- data.frame(table(kidney[kidney$status == 1, "time"])) 
y <- as.numeric(levels(tab[, 1]))[tab[, 1]] #ordered distinct event times
d <- tab[, 2]                               #number of events

#------Cox model------
fit<-coxph(Surv(time, status)~age, data=kidney)

#------cumulative hazard obtained from basehaz()------
H0 <- basehaz(fit, centered=FALSE)
H0 <- H0[H0[, 2] %in% y, ] #only keep rows where events occurred

#------my quick implementation------
betaHat <- fit$coef

h0 <- rep(NA, length(y))
for(l in 1:length(y))
{
  h0[l] <- d[l] / sum(exp(kidney[kidney$time >= y[l], "age"] * betaHat))
}

#------comparison------
cbind(H0, cumsum(h0))

부분 출력 :

       hazard time cumsum(h0)
1  0.01074980    2 0.01074980
5  0.03399089    7 0.03382306
6  0.05790570    8 0.05757756
7  0.07048941    9 0.07016127
8  0.09625105   12 0.09573508
9  0.10941921   13 0.10890324
10 0.13691424   15 0.13616338

약간의 차이가 coxph()데이터의 관계로 인한 부분적 가능성의 근사치 때문일 수 있습니다 .


고마워 예, 근사법에는 약간의 차이가 있습니다. 그러나 매 시점마다 기준 위험을 찾으려면 76 개의 시점이 있습니다. 어떡해? R 코드에서 어떤 유형의 수정이 필요합니까?
Dihan

1
이별 된 위험은 이벤트 시간을 제외하고 0입니다. 이것은 별개의 위험 함수가 가정되는 경우 가능성에 가장 크게 기여합니다. 예를 들어 위험이 일정하게 유지된다고 가정하면 두 추정치 사이를 보간 할 수 있습니다.
ocram

Breslow의 방법 (1974)
tomka

kidney$time >= y[l]와이status=0status=1=2=1status=0

@tomka가 언급했듯이. coxph통화를 교체하면 fit<-coxph(Surv(time, status)~age, data=kidney, method="breslow")방법의 차이가 해결됩니다.
mr.bjerre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.