我已经创建了我在本示例中使用的术语图的略微增强版本,您可以在此处找到它。我之前曾在SO上发过帖子,但我想得越多,我认为这可能与 Cox 比例风险模型的解释有关,而不是与实际编码有关。
问题
当我查看危险比图时,我希望有一个参考点,其中置信区间自然为 0,当我rms package
使用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 中的平滑样条曲线与 gam 中的样条曲线一样,被归一化,使得 sum(prediction) =0。所以我没有一个固定的单点,其方差非常小。
虽然我还不熟悉 GAM,但这似乎确实回答了我的问题:这似乎是一个解释问题。