生存函数图中哪条曲线是哪条?

时间:2017-07-30 10:26:59

标签: r plot survival-analysis

我正在用生存包绘制生存函数。一切正常,但我怎么知道哪条曲线是哪条?如何将其添加到图例?

  url <- "http://socserv.mcmaster.ca/jfox/Books/Companion/data/Rossi.txt"
  Rossi <- read.table(url, header=TRUE)[,c(1:10)]
  km <- survfit(Surv(week, arrest)~race, data=Rossi)
  plot(km, lty=c(1 ,2))

3 个答案:

答案 0 :(得分:2)

不幸的是,plot.survival函数似乎没有提供标记曲线的好选项。文档说明曲线是按它们在print中出现的顺序绘制的,因此您可以确定哪种曲线可以改变线型或颜色。但这并不适合分享。

另一种方法是使用survplot中的rms函数,它会对曲线进行标注。以下是您的示例和CI绘图关闭后的样子。 (请注意,survplot不会占用survfit个对象,因此您必须使用可以读取其结果的函数重新进行估算 - 此处为npsurv。)

library(rms)
survplot(npsurv(Surv(week, arrest)~race, data=Rossi), conf = "none")

enter image description here

查看文档,了解如何调整图表的其他方面,包括用图例替换图中的标签。

答案 1 :(得分:2)

  

我怎么知道哪条曲线是哪条?

使用str(),您可以查看km中的哪些元素。 km$strata显示有48个和10个元素。这恰好与前48个项目的下降模式和km $ surv中的最后10个项目

相吻合
km$surv[1:48]
km$surv[49:58]

因此除了print()中的订单提示之外,使用此特定数据集我们还可以确保前48个元素属于race=black

  

如何将其添加到图例?

与其他模型输出不同km不容易转换为data.frame。但是,我们可以自己提取元素并创建一个data.frame,然后自己绘制它。

首先,我们创建一个涉及阶层的因素:48个黑人和10个其他

race <- as.factor(c(rep("black", 48), rep("other", 10)))
df <- data.frame(surv = km$surv, race = race, time = km$time)

接下来我们可以像往常一样绘制它(在我的例子中,使用ggplot2)。

library(ggplot2)
ggplot(data = df, aes(x = time, y = surv)) + 
    geom_point(aes(colour = race)) + 
    geom_line(aes(colour = race)) +
    theme_bw()

survival by race

答案 2 :(得分:1)

多亏了Richard的回答,我找到了一种使用plot.survfit中使用的基本绘图方法将正确的名称绘制到正确的曲线的方法:

legend_values <- names(km$strata)
plot(km)
legend(
  "topright",
  legend=legend_values,
  col=1:2,
  lty = c(1,1),
  horiz=FALSE,
  bty='n')

我更喜欢ggplot的绘制方式,但是我希望在plot.survfit中保留逐步显示。