Âm mưu dự đoán khác nhau từ coxph sống và rms cph


9

Tôi đã tạo phiên bản nâng cấp hơi riêng của thuật ngữ mà tôi sử dụng trong ví dụ này, bạn có thể tìm thấy nó ở đây . Trước đây tôi đã đăng trên SO nhưng tôi càng nghĩ về nó tôi tin rằng điều này có lẽ liên quan nhiều hơn đến việc giải thích mô hình mối nguy hiểm Cox Proportional so với mã hóa thực tế.

Vấn đề

Khi tôi nhìn vào một biểu đồ tỷ lệ rms packagerủi ro, tôi hy vọng sẽ có một điểm tham chiếu trong đó khoảng tin cậy tự nhiên là 0 và đây là trường hợp khi tôi sử dụng cph () từ nhưng không phải khi tôi sử dụng coxph () từ survival package. Là hành vi đúng bởi coxph () và nếu vậy điểm tham chiếu là gì? Ngoài ra, biến giả trong coxph () có một khoảng và giá trị khác với ?e0

Thí dụ

Đây là mã kiểm tra của tôi:

# Load libs
library(survival)
library(rms)

# Regular survival
survobj <- with(lung, Surv(time,status))

# Prepare the variables
lung$sex <- factor(lung$sex, levels=1:2, labels=c("Male", "Female"))
labels(lung$sex) <- "Sex"
labels(lung$age) <- "Age"

# The rms survival
ddist <- datadist(lung)
options(datadist="ddist")
rms_surv_fit <- cph(survobj~rcs(age, 4)+sex, data=lung, x=T, y=T)

Các lô cph

Mã này:

termplot2(rms_surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05,
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("cph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

đưa ra âm mưu này:

cph () termplot2

Các lô coxph

Mã này:

termplot2(surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05, 
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("coxph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

đưa ra âm mưu này:

coxph () termplot2

Cập nhật

Như @Frank Harrell đã đề xuất và sau khi điều chỉnh cùng với gợi ý trong nhận xét gần đây của anh ấy, tôi đã nhận được:

p <- Predict(rms_surv_fit, age=seq(50, 70, times=20), 
             sex=c("Male", "Female"), fun=exp)
plot.Predict(p, ~ age | sex,
             col="black",
             col.fill=gray(seq(.8, .75, length=5)))

Điều này đã cho cốt truyện rất hay này:

Sơ đồ lưới

Tôi đã xem lại độ tương phản.rms một lần nữa sau khi nhận xét và thử mã này đã đưa ra một âm mưu ... mặc dù có lẽ còn nhiều điều có thể được thực hiện :-)

w <- contrast.rms(rms_surv_fit, 
                  list(sex=c("Male", "Female"), 
                       age=seq(50, 70, times=20)))

xYplot(Cbind(Contrast, Lower, Upper) ~ age | sex, 
       data=w, method="bands")

Đã cho cốt truyện này:

Cốt truyện tương phản

CẬP NHẬT 2

Giáo sư Thernau rất tốt bụng khi bình luận về những âm mưu thiếu thắt lưng tự tin:

Các spline làm mịn trong coxph, giống như các spline trong gam, được chuẩn hóa để tổng (dự đoán) = 0. Vì vậy, tôi không có một điểm cố định mà phương sai cực nhỏ.

Mặc dù tôi chưa quen với GAM nhưng điều này dường như trả lời câu hỏi của tôi: đây dường như là một vấn đề về giải thích.


3
Một số ý kiến. Đầu tiên hãy đọc biostat.mc.vanderbilt.edu/Rrms để biết sự khác biệt giữa các gói rms và Design. Thứ hai, sử dụng cốt truyện () thay vì cốt truyện.Predict để lưu công việc. Thứ ba, bạn có thể dễ dàng tạo ra các âm mưu cho cả hai giới, ví dụ như sử dụng Dự đoán (phù hợp, tuổi, giới tính, vui vẻ = exp) # exp = anti-log; sau đó âm mưu (kết quả) hoặc âm mưu (kết quả, ~ tuổi | giới tính). Bạn không sử dụng "x = NA" trong Dự đoán. rms sử dụng đồ họa mạng nên các tham số đồ họa thông thường và mfrow không áp dụng. Xem các ví dụ trong tài liệu khóa học rms của tôi tại biostat.mc.vanderbilt.edu/rms . Đối với độ tương phản.rms nghiên cứu các tài liệu nhiều hơn.
Frank Harrell

1
Cảm ơn bạn rất nhiều vì đầu vào của bạn. Tôi đã cập nhật mã với các ví dụ tốt hơn và thêm prof. Phản ứng của Thernau. Tái bút: Tôi thực sự vui mừng khi bạn lên kế hoạch cho phiên bản mới của cuốn sách, mở rộng phần thiên vị điểm cắt sẽ rất hữu ích như một tài liệu tham khảo
Max Gordon

1
Bạn có thể sử dụng plotcontrastthay vì plot.Predictcontrast.rms. Tôi sẽ sử dụng byhoặc lengthbên trong seqthay vì timesvà sẽ đưa ra contrasthai danh sách để bạn chỉ định chính xác những gì đang được tương phản. Bạn cũng có thể sử dụng màu với xYplotcác dải tin cậy.
Frank Harrell

1
Cảm ơn. Tôi thích sử dụng cốt truyện.Predict vì sau đó tôi nhận được sự trợ giúp đúng đắn trong RStudio - một cái gì đó trong trường hợp của tôi quan trọng hơn nhiều so với thời gian viết tên hàm đầy đủ (bằng cách sử dụng tự động hoàn thành (tab) Tôi thực sự không mất nhiều thời gian đó).
Max Gordon

Câu trả lời:


5

Tôi nghĩ chắc chắn nên có một điểm trong đó khoảng tin cậy là độ rộng bằng không. Bạn cũng có thể thử một cách thứ ba là chỉ sử dụng các hàm rms. Có một ví dụ dưới tệp trợ giúp cho độ tương phản.rms để có được biểu đồ tỷ lệ nguy hiểm. Nó bắt đầu với nhận xét # hiển thị các ước tính riêng biệt bằng cách điều trị và quan hệ tình dục. Bạn sẽ cần phải chống đăng nhập để có được tỷ lệ.


1
Cảm ơn bạn vì câu trả lời. Bạn có nghĩ rằng tôi nên đề cập đến vấn đề này để prof. Terry Therneau nếu nó được coi là một lỗi / giải thích sai? Tôi cũng đã xem xét các giải pháp đồ họa trong gói rms, tôi hoàn toàn không thể hiểu được cách sử dụng độ tương phản.rms cho các lô. Cốt truyện.Predict dường như thực hiện một thuật ngữ đầu ra tương tự nhưng tôi không thể làm cho nó thực hiện chính xác những gì tôi muốn ... xem bản cập nhật của tôi cho câu hỏi.
Max Gordon

2
Sẽ rất tốt nếu viết thư cho anh ấy để hỏi thăm, và nói với anh ấy cảm ơn vì chuyến đi đến sân bay mà anh ấy đã cho tôi vài phút trước. Tôi sẽ bình luận ở trên về các câu hỏi khác.
Frank Harrell
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.