ฉันได้สร้างตัวเองรุ่นของฉันเพิ่มขึ้นเล็กน้อยจาก 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สำหรับแถบความมั่นใจ