ฉันได้สร้างตัวเองรุ่นของฉันเพิ่มขึ้นเล็กน้อยจาก termplot ที่ฉันใช้ในตัวอย่างนี้คุณสามารถค้นหาได้ที่นี่ ฉันโพสต์ก่อนหน้านี้บนSOแต่ยิ่งฉันคิดเกี่ยวกับมันมากขึ้นฉันเชื่อว่านี่อาจเกี่ยวข้องกับการตีความของโมเดลอันตราย Cox Proportional มากกว่าการเข้ารหัสจริง
ปัญหา
เมื่อฉันมองไปที่พล็อตอัตราส่วนอันตรายผมคาดว่าจะมีจุดอ้างอิงที่ช่วงความเชื่อมั่นตามธรรมชาติคือ 0 และเป็นกรณีนี้เมื่อฉันใช้ CPH () จากrms package
แต่ไม่เมื่อฉันใช้ coxph (ที่) survival package
จาก พฤติกรรมที่ถูกต้องโดย coxph () และถ้าเป็นเช่นนั้นจุดอ้างอิงคืออะไร? นอกจากนี้ตัวแปรดัมมี่ใน coxph () มีช่วงเวลาและค่าอื่นที่ไม่ใช่?
ตัวอย่าง
นี่คือรหัสทดสอบของฉัน:
# 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)
แปลง cph
รหัสนี้:
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")
ให้พล็อตนี้:
พล็อต coxph
รหัสนี้:
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")
ให้พล็อตนี้:
ปรับปรุง
ตามที่ @ Frank Harrell แนะนำและหลังจากปรับตามคำแนะนำในความคิดเห็นล่าสุดของเขาฉันได้:
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)))
นี่เป็นพล็อตที่ดีมาก:
ฉันได้ดู contrast.rms อีกครั้งหลังจากความคิดเห็นและลองใช้รหัสนี้ที่ให้พล็อต ... แม้ว่าอาจจะมีอีกมากมายที่สามารถทำได้ :-)
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")
ให้พล็อตนี้:
อัพเดท 2
ศาสตราจารย์ Thernau ใจดีพอที่จะแสดงความคิดเห็นในเรื่องที่ขาดความมั่นใจเอว:
เส้นโค้งที่ราบเรียบใน coxph เช่นเดียวกับในเกมจะถูกทำให้เป็นมาตรฐานเพื่อให้ผลรวม (การทำนาย) = 0 ดังนั้นฉันไม่มีจุดเดียวคงที่ซึ่งความแปรปรวนนั้นเล็กมาก
แม้ว่าฉันยังไม่คุ้นเคยกับ GAM แต่ดูเหมือนว่าจะตอบคำถามของฉัน: ดูเหมือนว่าจะเป็นปัญหาการตีความ
plot
และcontrast
แทนและplot.Predict
contrast.rms
ฉันจะใช้by
หรือlength
ภายในseq
แทนtimes
และจะให้contrast
สองรายการเพื่อให้คุณระบุสิ่งที่ถูกเปรียบเทียบ นอกจากนี้คุณยังสามารถใช้การแรเงาด้วยxYplot
สำหรับแถบความมั่นใจ