R统计生存分析入门:三步跑通癌症数据的生存曲线

你可能在医学论文、临床试验报告,甚至药企的疗效评估里见过“Kaplan-Meier曲线”——那条带阶梯状下降的折线图。它不讲平均寿命,而是回答一个更实在的问题:患者在治疗后,活过3个月、6个月、1年的概率分别是多少?这个过程,就叫生存分析

生存分析不是算“能活多久”,而是看“还活着的概率”

举个例子:某医院收集了80名肺癌患者的随访数据,有的病人半年后复发,有的两年后失访(电话打不通、搬走了),还有的至今健在。传统统计方法会把“失访”当成“死亡”或直接删掉,但生存分析尊重现实——它把“没死也没失联”的人记作“删失数据”,照样参与计算。

R里跑一次生存分析,其实就三行代码

先装好两个核心包:

install.packages("survival")
install.packages("survminer")

假设有份数据框 lung(R自带的肺癌数据集),含两列关键字段:time(生存时间,单位天)和 status(1=死亡,0=删失)。画图只需:

library(survival)
library(survminer)
fit <- survfit(Surv(time, status) ~ 1, data = lung)
ggsurvplot(fit, risk.table = TRUE)

运行完,一张带风险表的生存曲线图就弹出来了。横轴是时间,纵轴是“仍存活的概率”,曲线每下一个台阶,就代表有人死亡。

想比两组效果?加个分组变量就行

比如对比男性和女性患者的生存差异,只要把公式改成:

fit_sex <- survfit(Surv(time, status) ~ sex, data = lung)

再用 ggsurvplot 画图,两条线自动分开,还能加 log-rank 检验P值:

ggsurvplot(fit_sex, pval = TRUE, legend.labs = c("男", "女"))

看到P<0.05,说明性别对生存时间的影响在统计上是靠谱的,不是碰巧。

别被术语吓住,生存分析就是“带状态的时间统计”

它不像机器学习要调参,也不像深度学习得搭GPU。你只需要理清三件事:谁活了多久、谁什么时候退出了观察、你想比较哪几类人。R的 survival 包把数学藏在背后,你敲几行命令,就能把医生关心的中位生存期、风险比(HR)、95%置信区间全吐出来。笔记本电脑开RStudio,5分钟就能跑通一个真实案例。