原文链接:https://www.bioinfo-scrounger.com/archives/647/
生存分析是研究生存时间的分布规律,以及生存时间和相关因素之间关系的一种统计分析方法。生存分析可用来预测在某一时间点上的事件是否会出现,它需要通过时间的维度来完成事件在某一时间发生概率的预测。
(1)参数法:知道生存时间的分布模型,然后根据数据来估计模型参数,最后以分布模型来计算生存率。
(2)非参数法:不需要生存时间分布,根据样本统计量来估计生存率,常见方法Kaplan-Meier法(乘积极限法)、寿命法。
(3)半参数法:也不需要生存时间的分布,但最终是通过模型来评估影响生存率的因素,最为常见的是Cox回归模型。
ps:生存率,可以看作条件生存概率(conditional probability of survival)的累积,比如三年生存率则是第1-3年每年存活概率的乘积。
(1)Kaplan-Meier plots to visualize survival curves(根据生存时间分布,估计生存率以及中位生存时间,以生存曲线方式展示,从而分析生存特征,一般用Kaplan-Meier法,还有寿命法)。
(2)Log-rank test to compare the survival curves of two or more groups(通过比较两组或者多组之间的的生存曲线,一般是生存率及其标准误,从而研究之间的差异,一般用log rank检验)。
(3)Cox proportional hazards regression to describe the effect of variables on survival(用Cox风险比例模型来分析变量对生存的影响,可以两个及两个以上的因素,很常用)。
一般做生存分析,可以先用KM(Kaplan-Meier)方法估计生存率,做生存曲线,之后可以根据分组检验一下多组间生存曲线是否有显著的差异,最后用Cox风险比例模型来研究下某个因素对生存的影响。
生存曲线(survival curve)是将每个时间点的生存率连接在一起的曲线,一般随访时间为X轴,生存率为Y轴;曲线平滑则说明高生存率,反之则低生存率;中位生存率(median survival time)越长,则说明预后较好。
(1) 指的是在第 年还存活的概率。
(2) 指的是在 年之前还存活的人数。
(3) 指的是在事件发生的人数,即有多少人发生了事件。
(4)
(1)基本信息获取
#packages library(ggplot2) library(ggpubr) library(survival) library(survminer) #data data("lung") print(head(lung)) #a <- Surv(time,status),create a survival data object #survfit(a,data),create KM curve fit <- survfit(Surv(time, status) ~ sex, data=lung) print(fit) #plot(fit) #获取整体的拟合效果 ##显示出详细信息 fit_1 <- summary(fit) print(fit_1) ##对详细信息进行统计的结果 fit_2 <- summary(fit)$table print(fit_2) #获取具体到每个时间点的拟合效果 res.sum <- surv_summary((fit)) print(head(res.sum))(2)绘制KM曲线
1°
#绘制拟合后的KM曲线 #主要使用Survminer包的ggsurvplot()函数 #代码在使用survfit()函数时用性别因子进行了分组,所以生存曲线有两组,即两条曲线。 #如果不想分组,将sex换成1即可 ggsurvplot(fit, pval = TRUE, conf.int = TRUE, risk.table = TRUE, # Add risk table risk.table.col = "strata", # Change risk table color by groups linetype = "strata", # Change line type by groups surv.median.line = "hv", # Specify median survival ggtheme = theme_bw(), # Change ggplot2 theme palette = c("#E7B800", "#2E9FDF") )效果图:
2°
#在参数里加上fun = "event"则可绘制cumulative events图 ggsurvplot(fit, conf.int = TRUE, risk.table.col = "strata", # Change risk table color by groups ggtheme = theme_bw(), # Change ggplot2 theme palette = c("#E7B800", "#2E9FDF"), fun = "event")效果图:
3°
#如果想对不同组的生存率进行假设检验(Log-Rank test)的话,可以用survdiff()函数。 #Log-Rank test是无参数检验,近似于卡方检验,零假设是组间没有差异。 surv_diff <- survdiff(Surv(time, status) ~ sex, data = lung) print(surv_diff)结果展示: