生存Coxph和RMS CPH的不同预测图


9

我已经创建了本示例中使用的术语图的略微增强版本,您可以在此处找到它。我以前在SO上发布过文章,但我想得更多,我认为这可能与Cox比例危害模型的解释有关,而不是与实际编码有关。

问题

当我查看危害比图时,我希望有一个参考点,其置信区间自然为0,这是当我从中使用cph()rms package而不是从中使用coxph()时的情况survival package。coxph()的行为是否正确,如果是,参考点是什么?另外,coxph()中的哑变量具有一个间隔,并且其值不是?Ë0

这是我的测试代码:

# 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

考克斯图

这段代码:

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教授很友善地对缺乏信心的情节发表评论:

像gam中的平滑样条一样,对coxph中的平滑样条进行了归一化,使得sum(prediction)= 0。因此,我没有方差很小的固定单点。

尽管我还不熟悉GAM,但这似乎可以回答我的问题:这似乎是一个解释问题。


3
几条评论。首先,请阅读biostat.mc.vanderbilt.edu/Rrms了解rms和Design软件包之间的差异。其次,使用plot()代替plot.Predict以节省工作。第三,您可以轻松地生成两性图,例如,使用Predict(fit,age,sex,fun = exp)#exp = anti-log; 然后绘图(结果)或绘图(结果,〜年龄|性别)。您在Predict中不使用“ x = NA”。rms使用点阵图形,因此通常的标准图形参数和mfrow不适用。请参阅我的rms课程讲义中的示例,网址biostat.mc.vanderbilt.edu/rms。对于contrast.rms,请更多地研究文档。
Frank Harrell

1
非常感谢您的投入。我已经用更好的示例更新了代码,并添加了教授。Thernau的回应。附注:我真的很兴奋,您计划这本书的新版本,扩展切入点偏差部分将对参考非常有用
Max Gordon

1
您可以使用plotcontrast代替plot.Predictcontrast.rms。我将使用bylengthinside seq而不是,times并将给出contrast两个列表,以便您确切指定要对比的内容。您也可以将明暗度xYplot用于置信带。
Frank Harrell'2

1
谢谢。我喜欢使用plot.Predict,因为这样我就可以在RStudio中获得正确的帮助-就我而言,这比编写完整函数名(通过使用自动完成功能(制表符))花费的时间更为重要。花费那么多时间)。
Max Gordon

Answers:


5

我认为绝对应该有一个置信区间为零宽度的点。您也可以尝试第三种方法,即仅使用rms函数。帮助文件下有一个contrast.rms的示例,用于获取危险比图。它以注释#开头,分别显示按治疗和性别分类的估算值。您需要进行反对数以获得比率。


1
谢谢您的回答。您认为我应该向教授提这个问题吗?Terry Therneau是否被认为是错误/错误解释?我也研究了rms软件包中的图形解决方案,但我不太了解对plots.rms的使用。plot.Predict似乎做了一个termplot类似的输出,但是我不能让它完全执行我想要的工作...请参阅我对该问题的更新。
Max Gordon

2
最好写信给他询问,并告诉他感谢几分钟前他送给我的机场。我将在上面对其他问题发表评论。
弗兰克·哈雷尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.