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 package
rủ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 ?
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:
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:
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:
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Ậ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.
plot
và contrast
thay vì plot.Predict
và contrast.rms
. Tôi sẽ sử dụng by
hoặc length
bên trong seq
thay vì times
và sẽ đưa ra contrast
hai 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 xYplot
các dải tin cậy.