目录
原文链接:R语言-Survival analysis(生存分析) | KeepNotes blog
1.什么是生存分析?
生存分析是研究生存时间的分布规律,以及生存时间和相关因素之间关系的一种统计分析方法。生存分析可用来预测在某一时间点上的事件是否会出现,它需要通过时间的维度来完成事件在某一时间发生概率的预测。
2.生存分析方法的种类?
(1)参数法:知道生存时间的分布模型,然后根据数据来估计模型参数,最后以分布模型来计算生存率。
(2)非参数法:不需要生存时间分布,根据样本统计量来估计生存率,常见方法Kaplan-Meier法(乘积极限法)、寿命法。
(3)半参数法:也不需要生存时间的分布,但最终是通过模型来评估影响生存率的因素,最为常见的是Cox回归模型。
ps:生存率,可以看作条件生存概率(conditional probability of survival)的累积,比如三年生存率则是第1-3年每年存活概率的乘积。
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风险比例模型来研究下某个因素对生存的影响。
4.什么是生存曲线?
生存曲线(survival curve)是将每个时间点的生存率连接在一起的曲线,一般随访时间为X轴,生存率为Y轴;曲线平滑则说明高生存率,反之则低生存率;中位生存率(median survival time)越长,则说明预后较好。
5.卡普兰-迈耶生存分析的计算方法?
(1) 指的是在第 年还存活的概率。
(2) 指的是在 年之前还存活的人数。
(3) 指的是在事件发生的人数,即有多少人发生了事件。
(4)
6.代码实现
(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)
结果展示: