如何叠加生存情节

时间:2017-04-14 00:39:12

标签: r plot

我想在同一个图上叠加两条不同的生存曲线,例如OS et PFS(这里是假结果)。

N pt.   OS.        OS_Time_(years).    PFS.     PFS_Time_(years).
__________________________________________________________________
1.      1            12                  0          12
2.      0            10                  1          8
3.      0            14                  0          14
4.      0            10                  0          10
5.      1            11                  1          8
6.      1            16                  1          6
7.      0            11                  1          4
8.      0            12                  1          10
9.      1            9                   0          9
10      1            10                  1          9
__________________________________________________________ 

首先,我导入我的数据集:

library(readxl)
testR <- read_excel("~/test.xlsx")
View(testR)

然后,我为OS和PFS创建了survfit:

OS<-survfit(Surv(OS_t,OS)~1, data=test)
PFS<-survfit(Surv(PFS_t,PFS)~1, data=test)

最后,我可以通过以下方式绘制每个人的情节:

plot(OS) 
plot(PFS)
例如

(或ggplot2 ...)。

我的问题是,如果我想在同一个图表上叠加2个,我该怎么办?

我尝试过多个剧情或

ggplot(testR, aes(x)) +                    # basic graphical object
  geom_line(aes(y=y1), colour="red") +  # first layer
  geom_line(aes(y=y2), colour="green")  # second layer

但它没有用(但我不确定是否正确使用它)。 请有人帮帮我吗?

非常感谢

以下是我的数据样本代码:

test <- structure(list(ID = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 2, 3, 4, 5, 6, 7, 8, 9), 
                       Sex = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1), 
                       Tabac = c(2, 0, 1, 1, 0, 0, 2, 0, 0, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1), 
                       Bmi = c(20, 37, 37, 25, 28, 38, 16, 27, 26, 28, 15, 36, 20, 17, 28, 37, 27, 26, 18),
                       Age = c(75, 56, 45, 65, 76, 34, 87, 43, 67, 90, 56, 37, 84, 45, 80, 87, 90, 65, 23), c(0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0), 
                       OS_times = c(2, 4, 4, 2, 3, 5, 5, 3, 2, 2, 4, 1, 3, 2, 4, 3, 4, 3, 2), 
                       OS = c(0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0), 
                       PFS_time = c(1, 2, 1, 1, 3, 4, 3, 1, 2, 2, 4, 1, 2, 2, 2, 3, 4, 3, 2), 
                       PFS = c(1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0)), 
                  .Names = c("ID", "Sex", "Tabac", "Bmi", "Age", "LN", "OS_times", "OS", "PFS_time", "PFS"), 
                  class = c("tbl_df", "tbl", "data.frame"), 
                  row.names = c(NA, -19L))

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式使用ggsurv包中的GGally功能。在数据框中组合两组变量并添加“类型”列。稍后在调用图中,您可以参考类型。

我使用了您的数据结构并将其命名为“test”。之后,我将其转换为名为“testdf”的数据框。

library(GGally)

testdf <- data.frame(test)
OS_PFS1 <- data.frame(life = testdf$OS, life_times = testdf$OS_times, type= "OS")
OS_PFS2 <- data.frame(life = testdf$PFS, life_times = testdf$PFS_time, type= "PFS")
OS_PFS <- rbind(OS_PFS1, OS_PFS2)

sf.OS_PFS <- survfit(Surv(life_times, life) ~ type, data = OS_PFS)
ggsurv(sf.OS_PFS)

如果您想要显示置信区间:

ggsurv(sf.OS_PFS, CI = TRUE)

请告诉我这是否是你想要的。