Cox回归的Kaplan-Meier图

Cox回归的Kaplan-Meier图,r,plot,survival-analysis,cox-regression,R,Plot,Survival Analysis,Cox Regression,我有一个Cox比例风险模型,使用R中的以下代码来预测死亡率。添加协变量A、B和C只是为了避免混淆(即年龄、性别、种族),但我们确实对预测因子X感兴趣。X是一个连续变量 cox.model <- coxph(Surv(time, dead) ~ A + B + C + X, data = df) 我还试图绘制一个数字,显示死亡的累积风险。我不知道我是否做得对,因为我尝试了几种不同的方法,得到了不同的结果。理想情况下,我想画两条线,一条显示X的第75百分位的死亡率风险,另一条显示X的第25百

我有一个Cox比例风险模型,使用R中的以下代码来预测死亡率。添加协变量A、B和C只是为了避免混淆(即年龄、性别、种族),但我们确实对预测因子X感兴趣。X是一个连续变量

cox.model <- coxph(Surv(time, dead) ~ A + B + C + X, data = df)
我还试图绘制一个数字,显示死亡的累积风险。我不知道我是否做得对,因为我尝试了几种不同的方法,得到了不同的结果。理想情况下,我想画两条线,一条显示X的第75百分位的死亡率风险,另一条显示X的第25百分位。我该怎么做

我可以列出我试过的所有东西,但我不想把任何人搞糊涂


非常感谢。

下面是一个来自的示例

我们得到了存活率的曲线图(95%置信区间)。对于累积危险率,您可以执行以下操作

# plot(survfit(mod.allison)$cumhaz)
但这并没有给出置信区间。不过,不用担心!我们知道H(t)=-ln(S(t))并且我们有S(t)的置信区间。我们需要做的就是

sfit <- survfit(mod.allison)
cumhaz.upper <- -log(sfit$upper)
cumhaz.lower <- -log(sfit$lower)
cumhaz <- sfit$cumhaz # same as -log(sfit$surv)


您需要使用
survfit(…,conf.int=0.50)
要获得75%和25%的范围,而不是97.5%和2.5%的范围。

请求估算X的第25和75个百分位的存活曲线,首先需要确定这些百分位,并指定数据框中所有其他协变量的值,作为survfit的新数据参数:

虽然在我的机器上需要构建一个
url
-对象,但可以使用福克斯网站上其他resondent建议的数据:

 url <- url("http://socserv.mcmaster.ca/jfox/Books/Companion/data/Rossi.txt")
 Rossi <- read.table(url, header=TRUE)
这就是fit和survfit调用的模型:

 mod.allison <- coxph(Surv(week, arrest) ~ 
                         fin + age + race + prio ,
                         data=Rossi)
 prio.fit <- survfit(mod.allison, 
                     newdata= data.frame(fin="yes", age=30, race="black", prio=c(1,4) ))
 plot(prio.fit, col=c("red","blue"))

mod.allison我不确定设置conf.int=0.50是否与绘制X值第25百分位和第75百分位的生存曲线估计值相同。我想我必须对Kaplan-Meier曲线使用survfit.coxph函数,但不确定累积风险。这很有帮助,但最后一句是错的,因为这是问题的主旨,所以确实需要修正@Hims关于您对
survfit.coxph
的评论-基于
R
处理类对象的方式,
survfit.coxph
在我调用
survfit
时被调用,我不确定它是否可能-
survfit
函数估计生存函数,并使用该生存函数(使用Kaplan-Meier方法完成)导出
cumhaz
预测。因此,我们不能将cumhaz的预测分为单独的危险。这不是因为“KM曲线调整协变量”,而是我们可以根据模型拟合构建预测的阶跃函数生存曲线。大多数人会用KM曲线这个术语来指未经调整的生存曲线。您还需要指定所有变量来进行预测。请参见下面的编码示例。是否可以在红色和蓝色曲线之间进行对数秩检验?您可以在
mod.allison
模型中获得
prio
变量在构建和估计数据条件下的显著性对数秩检验。这就是你想要的吗?我想是的。如果我对模型执行summary(),它将为所有系数返回一个logrank结果。我想在两个prio四分位数之间进行测试,我认为没有一种方法可以像你描述的那样进行统计测试。
sfit <- survfit(mod.allison)
cumhaz.upper <- -log(sfit$upper)
cumhaz.lower <- -log(sfit$lower)
cumhaz <- sfit$cumhaz # same as -log(sfit$surv)
plot(cumhaz, xlab="weeks ahead", ylab="cumulative hazard",
     ylim=c(min(cumhaz.lower), max(cumhaz.upper)))
lines(cumhaz.lower)
lines(cumhaz.upper)
 url <- url("http://socserv.mcmaster.ca/jfox/Books/Companion/data/Rossi.txt")
 Rossi <- read.table(url, header=TRUE)
> summary(Rossi$prio)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   1.000   2.000   2.984   4.000  18.000 
 mod.allison <- coxph(Surv(week, arrest) ~ 
                         fin + age + race + prio ,
                         data=Rossi)
 prio.fit <- survfit(mod.allison, 
                     newdata= data.frame(fin="yes", age=30, race="black", prio=c(1,4) ))
 plot(prio.fit, col=c("red","blue"))