前期工作
清除环境、导入各种包
#清除环境变量
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
参考文章:(如有侵权,联系必删)