Saya telah membuat versi termplot saya sendiri yang sedikit ditingkatkan yang saya gunakan dalam contoh ini, Anda dapat menemukannya di sini . Saya sebelumnya telah diposting di SO tetapi semakin saya memikirkannya, saya percaya bahwa ini mungkin lebih terkait dengan interpretasi model bahaya Cox Proportional daripada dengan pengkodean yang sebenarnya.
Masalah
Ketika saya melihat plot Rasio Bahaya saya berharap memiliki titik referensi di mana interval kepercayaan secara alami adalah 0 dan ini adalah kasus ketika saya menggunakan cph () dari rms package
tetapi tidak ketika saya menggunakan coxph () dari survival package
. Apakah perilaku yang benar oleh coxph () dan jika demikian apa titik rujukannya? Juga, variabel dummy dalam coxph () memiliki interval dan nilainya selain ?
Contoh
Ini kode pengujian saya:
# 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)
Plot cph
Kode ini:
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")
berikan plot ini:
Plot coxph
Kode ini:
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")
berikan plot ini:
Memperbarui
Sebagai @Frank Harrell menyarankan dan setelah menyesuaikan saran dalam komentarnya baru-baru ini saya mendapat:
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)))
Ini memberi plot yang sangat bagus ini:
Saya telah melihat kontras.rms lagi setelah komentar dan mencoba kode ini yang memberikan plot ... walaupun mungkin ada lebih banyak yang dapat dilakukan :-)
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")
Memberi plot ini:
PEMBARUAN 2
Prof. Thernau berbaik hati mengomentari plot yang kurang percaya diri:
Splines smoothing dalam coxph, seperti yang ada di gam, dinormalisasi sehingga jumlah (prediksi) = 0. Jadi saya tidak punya satu titik tetap yang variansinya ekstra kecil.
Walaupun saya belum terbiasa dengan GAM, ini sepertinya menjawab pertanyaan saya: ini sepertinya masalah interpretasi.
plot
dan contrast
bukannya plot.Predict
dan contrast.rms
. Saya akan menggunakan by
atau length
di dalam seq
daripada times
dan akan memberikan contrast
dua daftar sehingga Anda menentukan dengan tepat apa yang sedang kontras. Anda juga dapat menggunakan shading dengan xYplot
untuk band kepercayaan diri.