Làm thế nào để giải thích đầu ra của dự đoán.coxph?


17

Sau khi lắp coxmodel, có thể đưa ra dự đoán và truy xuất rủi ro tương đối của dữ liệu mới. Điều tôi không hiểu là làm thế nào rủi ro tương đối được tính cho một cá nhân và nó có liên quan gì (tức là trung bình của dân số)? Bất kỳ đề xuất nào cho các tài nguyên để giúp hiểu (tôi không tiến bộ lắm trong phân tích sinh tồn nên càng đơn giản càng tốt)?

Câu trả lời:


32

predict.coxph()tính tỷ lệ nguy hiểm liên quan đến trung bình mẫu cho tất cả các biến dự đoán . Các yếu tố được chuyển đổi thành các yếu tố dự đoán giả như bình thường có thể tính trung bình. Hãy nhớ rằng mô hình Cox PH là một mô hình tuyến tính cho log- risk ln h ( t ) :plnh(t)

lnh(t)=lnh0(t)+β1X1++βpXp=lnh0(t)+Xβ

Trong đó là mối nguy cơ bản không xác định. Tương tự, nguy hiểm h ( t ) được mô phỏng như h ( t ) = h 0 ( t ) e β 1 X 1 + + β p X p = h 0 ( t ) e X β . Tỷ lệ rủi ro giữa hai người tôitôi ' với giá trị dự đoánh0(t)h(t)h(t)=h0(t)eβ1X1++βpXp=h0(t)eXβiiXi là như vậy, không phụ thuộc vào rủi ro cơ bản và không phụ thuộc vào thời gian t :Xit

hi(t)hi(t)=h0(t)eXiβh0(t)eXiβ=eXiβeXiβ

Đối với tỷ lệ rủi ro ước tính giữa người i ' , chúng ta chỉ cần cắm trong dự toán hệ số b 1 , ... , b p cho β 1 , ... , β p , cho e X i be X i ' biib1,,bpβ1,,βpeXibeXib .

Lấy ví dụ trong R, tôi sử dụng dữ liệu từ phụ lục của John Fox trên mô hình Cox-PH cung cấp văn bản giới thiệu rất hay. Đầu tiên, chúng tôi lấy dữ liệu và xây dựng mô hình Cox-PH đơn giản để bắt giữ tù nhân được thả ra ( fin: yếu tố - nhận viện trợ tài chính với mã hóa giả "no"-> 0, "yes"-> 1 , age: tại thời điểm phát hành, prio: số tiền án trước đó):

> 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 

Bây giờ chúng tôi cắm trung bình mẫu cho các yếu tố dự đoán của chúng tôi vào công thức :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)

Bây giờ chúng tôi cắm các giá trị dự đoán của 4 người đầu tiên vào công thức .eXb

r1234 <- exp(coefCPH["finyes"]*(as.numeric(Rossi[1:4, "fin"])-1)
           + coefCPH["age"]   *Rossi[1:4, "age"]
           + coefCPH["prio"]  *Rossi[1:4, "prio"])

Bây giờ hãy tính rủi ro tương đối cho 4 người đầu tiên so với trung bình mẫu và so sánh với đầu ra từ 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

Nếu bạn có một mô hình phân tầng, việc so sánh so predict.coxph()với mức trung bình, điều này có thể được kiểm soát thông qua referencetùy chọn được giải thích trong trang trợ giúp.


2
+1 vì không rõ ràng để có được chính xác những gì dự đoán.coxph từ trang trợ giúp!
ocram

thật tuyệt Rất đơn giản để hiểu!
dùng4673

meanFin <- mean(as.numeric(Rossi$fin) - 1)không có nhiều ý nghĩa, vì finlà phân loại. Bạn không cần phải modeFin <- get_Mode(Rossi$fin)trong trường hợp này?
Zhubarb

1
@Zhubarb finlà nhị phân, vì vậy biểu diễn số của yếu tố chỉ có các giá trị 1 và 2. Phép trừ 1 cung cấp cho chúng ta biến mã giả với các giá trị 0 và 1 cũng xuất hiện trong ma trận thiết kế. Lưu ý rằng điều này sẽ không hoạt động đối với các yếu tố có nhiều hơn 2 cấp độ. Điều chắc chắn là tranh cãi về việc liệu các biến giả trung bình có ý nghĩa hay không, nhưng đó là những gì predict.coxph().
caracal

Nói cách khác, làm thế nào bạn diễn giải tỷ lệ nguy hiểm là 3,01 (ví dụ: relRisk [2])?
RNB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.