如何用~pspline绘制Cox模型,并在R中找到截止点?

如何用~pspline绘制Cox模型,并在R中找到截止点?,r,plot,R,Plot,我现在正在学习如何评估X和Y之间的非线性关联。我发现“smoothHR”软件包是一个不错的选择。 例如,我想评估HDLC和事件之间的非线性关联 model<-coxph(Surv(futime, death) ~ age+sex+pspline(hdlc,df = 2), data = data,x=T) hr1 <- smoothHR(data=data, coxfit=model) print(hr1) plot(hr1,predictor='hdlc',prob = 0,con

我现在正在学习如何评估X和Y之间的非线性关联。我发现“smoothHR”软件包是一个不错的选择。 例如,我想评估HDLC和事件之间的非线性关联

model<-coxph(Surv(futime, death) ~ age+sex+pspline(hdlc,df = 2), data = data,x=T)
hr1 <- smoothHR(data=data, coxfit=model)
print(hr1)
plot(hr1,predictor='hdlc',prob = 0,conf.level=0.95,round.x = 1)
model加载库

library(survival)
library(tidyverse)
获取肺部数据

df = lung
基于惩罚样条函数的Cox模型

c = coxph(Surv(time, status) ~ pspline(age, df = 4), data = df)
使用术语图,我们可以得到年龄的系数 plot=F,这样我们就可以得到数据

g = termplot(c, term = 1, se = T,plot = F)

newdf = data.frame(g$age)
现在,newdf数据帧包含x=age、y=log(hr)和se=standard error 对于日志(HR) 我们可以使用exp(y+/-1.96se)获得我们想要的CI(95%) 使用log(HR)=HR,然后绘制

我用的是base R,但为了制作更漂亮的情节,我们可以用同样的 概念图,并用ggplot2绘制。 这是一个数据帧,新变量hr、lci和uci添加到 原始数据帧。因此,使用ggplot2很容易获得相同的结果 图中所示为基数R

plot(x = newdf$x, y = newdf$hr,type = 'l', col = "red",xlab = "Age",
     ylab = "Hazard ratio for Age with the Cox model using psplines")
lines(x = newdf$x, y = newdf$lci, col = "blue")
lines(x = newdf$x, y = newdf$uci, col = "blue")
abline(h = 1, col = "gray")

使用Frank Harrell的rms和Hmisc软件包,可以更轻松地完成这些绘图和更多绘图。他还有一本书《回归建模策略》。这本书非常优秀,因为它给出了每种类型回归模型的示例以及如何将其绘制成图形。现在使用ggplot2图形重做。他还有一个非常活跃的博客和网站,你可以查看。谢谢你的回复!我试着用“ggplot2”来描绘它,它真的解决了我的第一个问题。但是我如何标记直线(x=newdf$x,y=newdf$lci)和abline(h=1)的交点,就像上面图3中的“107”和“154”一样。此外,我之前已经了解了“rms”,并尝试使用“rcs”构建分段cox回归,但它找不到具有最小风险比的点(如上面图1中的“1.5”)。然后我发现“SMOOTHR”可以找到最小危险比的点,参考第10.1136/bmj.k2158条。那么,我是否可以通过“rms”确定具有最小危险比的点?再次感谢,期待您的回复!使用ggplot2很容易将图层添加到图形中。因此,使用geom_vline和geom_hline,您可以在原始图形上创建垂直线或水平线。最简单的方法是创建第一个图形并给它命名为“g”。然后可以使用g1=g+geom_vhline(yintercept=1)在HR=1处绘制水平线。