พล็อตการทำนายที่แตกต่างจาก coxph การอยู่รอดและ rms cph


9

ฉันได้สร้างตัวเองรุ่นของฉันเพิ่มขึ้นเล็กน้อยจาก termplot ที่ฉันใช้ในตัวอย่างนี้คุณสามารถค้นหาได้ที่นี่ ฉันโพสต์ก่อนหน้านี้บนSOแต่ยิ่งฉันคิดเกี่ยวกับมันมากขึ้นฉันเชื่อว่านี่อาจเกี่ยวข้องกับการตีความของโมเดลอันตราย Cox Proportional มากกว่าการเข้ารหัสจริง

ปัญหา

เมื่อฉันมองไปที่พล็อตอัตราส่วนอันตรายผมคาดว่าจะมีจุดอ้างอิงที่ช่วงความเชื่อมั่นตามธรรมชาติคือ 0 และเป็นกรณีนี้เมื่อฉันใช้ CPH () จากrms packageแต่ไม่เมื่อฉันใช้ coxph (ที่) survival packageจาก พฤติกรรมที่ถูกต้องโดย coxph () และถ้าเป็นเช่นนั้นจุดอ้างอิงคืออะไร? นอกจากนี้ตัวแปรดัมมี่ใน coxph () มีช่วงเวลาและค่าอื่นที่ไม่ใช่e0?

ตัวอย่าง

นี่คือรหัสทดสอบของฉัน:

# 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")

ให้พล็อตนี้:

cph () termplot2

พล็อต 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")

ให้พล็อตนี้:

coxph () termplot2

ปรับปรุง

ตามที่ @ 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 แต่ดูเหมือนว่าจะตอบคำถามของฉัน: ดูเหมือนว่าจะเป็นปัญหาการตีความ


3
หลายความคิดเห็น ก่อนอื่นให้อ่านbiostat.mc.vanderbilt.edu/Rrmsสำหรับความแตกต่างระหว่าง rms และแพ็คเกจการออกแบบ สองใช้ plot () แทน plot.Predict เพื่อบันทึกงาน ประการที่สามคุณสามารถสร้างแปลงสำหรับทั้งสองเพศเช่นการใช้ Predict (พอดี, อายุ, เพศ, ความสนุก = exp) # exp = anti-log; จากนั้นพล็อต (ผลลัพธ์) หรือพล็อต (ผลลัพธ์ ~ อายุ | เพศ) คุณไม่ได้ใช้ "x = NA" ในการทำนาย rms ใช้กราฟิก lattice เพื่อให้พารามิเตอร์กราฟิกปกติและ mfrow ใช้ไม่ได้ ดูตัวอย่างใน RMS ของฉันแน่นอนเอกสารที่biostat.mc.vanderbilt.edu/rms สำหรับ contrast.rms ศึกษาเอกสารเพิ่มเติม
Frank Harrell

1
ขอบคุณมากสำหรับข้อมูลของคุณ ฉันได้อัปเดตรหัสด้วยตัวอย่างที่ดีขึ้นและเพิ่มศาสตราจารย์แล้ว คำตอบของ Thernau ป.ล. ฉันตื่นเต้นมากที่การวางแผนเวอร์ชันใหม่ของหนังสือของคุณการขยายส่วนจุดตัดจุดตัดจะมีประโยชน์มากสำหรับการอ้างอิง
Max Gordon

1
คุณสามารถใช้plotและcontrastแทนและplot.Predict contrast.rmsฉันจะใช้byหรือlengthภายในseqแทนtimesและจะให้contrastสองรายการเพื่อให้คุณระบุสิ่งที่ถูกเปรียบเทียบ นอกจากนี้คุณยังสามารถใช้การแรเงาด้วยxYplotสำหรับแถบความมั่นใจ
Frank Harrell

1
ขอบคุณ ฉันชอบการใช้พล็อตเรื่องเพราะฉันได้รับความช่วยเหลือที่ถูกต้องใน RStudio - สิ่งที่ในกรณีของฉันมีความสำคัญมากกว่าเวลาที่ใช้ในการเขียนชื่อฟังก์ชั่นเต็มรูปแบบ (โดยใช้แท็บเติมข้อความอัตโนมัติ) ทำให้เสียเวลามาก)
Max Gordon

คำตอบ:


5

ฉันคิดว่าควรมีจุดที่ช่วงความมั่นใจเป็นศูนย์กว้าง คุณอาจลองวิธีที่สามซึ่งใช้ฟังก์ชั่น rms เพียงอย่างเดียว มีตัวอย่างภายใต้ไฟล์วิธีใช้เพื่อให้ contrast.rms รับพล็อตอัตราส่วนอันตราย มันเริ่มต้นด้วยความคิดเห็นที่ # แสดงการประเมินแยกต่างหากจากการรักษาและเพศ คุณจะต้องต่อต้านการบันทึกเพื่อรับอัตราส่วน


1
ขอบคุณสำหรับคำตอบ. คุณคิดว่าฉันควรพูดถึงปัญหานี้กับศาสตราจารย์หรือไม่ เทอร์รี่เธ่อเนาถ้ามันถูกพิจารณาว่าเป็นข้อผิดพลาด / การตีความผิด? ฉันยังได้ดูโซลูชันกราฟิกในแพ็คเกจ rms ฉันไม่เข้าใจการใช้ contrast.rms สำหรับการแปลง เนื้อเรื่องพล็อตดูเหมือนว่าจะทำคล้าย ๆ กันเอาท์พล็อตเอาท์พุท แต่ฉันไม่สามารถทำสิ่งที่ฉันต้องการ ... เห็นการปรับปรุงคำถาม
Max Gordon

2
มันเป็นการดีที่จะเขียนถึงเขาเพื่อสอบถามและบอกเขาว่าขอบคุณสำหรับการเดินทางไปสนามบินที่เขาให้ฉันไม่กี่นาทีที่ผ่านมา ฉันจะแสดงความคิดเห็นข้างต้นในคำถามอื่น ๆ
Frank Harrell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.