(自用)使用R语言绘制Kaplan-Meier(KM)曲线

前期工作

清除环境、导入各种包

#清除环境变量
rm(list = ls()) 
没有包

只展示一个"survival",其他自行尝试,方法同理

install.packages("survival") 

有包

library(survival)
library(survminer)
library(mice)
library(pROC)
library(readxl)

导入数据

woky1<- read_excel("/Users/mima000000/Desktop/科研/Seer/副本操作数据.xlsx", sheet = "Sheet1")

数据分析

tips:删失值(左删失、右删失、区间删失)不必关注,删失值与生存共同归类,终点结局单独一类,编排数字0,1或1,2。如果终点结局选择数字1,则删失与生存的编号为0。总儿言之,终点事件的编号要选大的那个。

1、初步构建图像

#初步构建图像
fit <- survfit(Surv(woky1$Survivalmonths, woky1$CSS) ~ woky1$`4classes`, data=woky1)

#展示fit图像
plot(fit)

2、美化图像

初步美化,使用ggplot

#引入ggplot
p1 <- ggsurvplot(fit)

#展示图像
p1

再次美化

p2 <- ggsurvplot(fit, data = woky1,
                  surv.median.line = "hv", #添加中位生存曲线
                  palette=c("blue", "red", "green", "purple"),  #更改线的颜色
                  legend.labs=c("<40","40-59","60-79","≥80"), #标签
                  legend.title="Age", 
                  title="Cancer-Specific Survival", #标题
                  ylab="Caner-Specific Survival (percentage)",xlab = " Time (Months)", #更改横纵坐标
                  censor.shape = 124,censor.size = 2,conf.int = FALSE, #删失点的形状和大小
                  break.x.by = 100)#横坐标间隔

#展示图像p2
p2

注意中位生存时间表示50 %的个体尚存活的时间,而不是生存时间的中位数

3、增加Risk table

p3 <- ggsurvplot(fit, data = woky1,
                surv.median.line = "hv", #添加中位生存曲线
                palette=c("blue", "red", "green", "purple"), 
                legend.labs=c("<40","40-59","60-79","≥80"), #标签
                legend.title="Age",
                title="Cancer-Specific Survival",
                ylab="Cancer-Specific Survival (percentage)",xlab = " Time (Months)", #更改横纵坐标
                censor.shape = 124,censor.size = 2,conf.int = FALSE, 
                #——————以上数据详见上面的p2
                break.x.by = 25, #间隔多少x轴距离出现一次Risk 数据
                risk.table = TRUE,tables.height = 0.2, #增加 risk table
                tables.theme = theme_cleantable(),
                ggtheme = theme_bw())

p3

 4、增加P值

p4 <- ggsurvplot(fit, data = woky1,
                pval = TRUE,#添加P值
                pval.coord = c(0, 0.03), #调节Pval的位置
                #——————下述同p2、p3,注意修改上面的data=
                surv.median.line = "hv", #添加中位生存曲线
                palette=c("blue", "red", "green", "purple"), 
                legend.labs=c("<40","40-59","60-79","≥80"), #标签
                legend.title="Age",
                title="Cancer-Specific Survival",
                ylab="Cancer-Specific Survival (percentage)",xlab = " Time (Months)", #更改横纵坐标
                censor.shape = 124,censor.size = 2,conf.int = FALSE, 
                #——————以上数据详见上面的p2
                break.x.by = 25, #间隔多少x轴距离出现一次Risk 数据
                risk.table = TRUE,tables.height = 0.2, #增加 risk table
                tables.theme = theme_cleantable(),
                ggtheme = theme_bw())

p4

 5、增加HR值

tips:如果要调整HR的x轴位置,建议从p3重头往下走,因为此处有个函数paste,会无限重叠

###添加COX回归hazard ratio值相关信息
res_cox<-coxph(Surv(woky1$Survivalmonths, woky1$CSS) ~woky1$`4classes`, data=woky1)
p3$plot = p3$plot + ggplot2::annotate("text",x = 15, y = 0.15,
                             label = paste("HR :",round(summary(res_cox)$conf.int[1],2))) + ggplot2::annotate("text",x = 15, y = 0.10,
                    label = paste("(","95%CI:",round(summary(res_cox)$conf.int[3],2),"-",round(summary(res_cox)$conf.int[4],2),")",sep = ""))+
  ggplot2::annotate("text",x = 15, y = 0.05,
                    label = paste("P:",round(summary(res_cox)$coef[5],4)))
p3

参考文章:(如有侵权,联系必删) 

R|生存分析 - KM曲线 ,值得拥有姓名和颜值_km生存曲线-CSDN博客

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值