一、基本概念
生存分析:研究各个因素与生存时间有无关系以及关联程度大小。可拓展到疾病复发时间,机器的故障时间等。
起始事件:反应研究对象开始生存过程的起始特征事件。
终点事件(死亡事件):出现研究者所关心的特定结局。如“病人因该疾病死亡”。
观察时间:从研究开始观察到研究观察结束的时间。
生存时间:观察到的存活时间,用符号t表示。
完全数据:从观察起点到死亡事件所经历的时间,生存时间是完整的。
截尾数据(删失值):观察时间不是由于终点事件而结束的,而是由于(1)失访(2)死于非研究因素(3)观察结束而对象仍存活以上三种原因结束的。常在截尾数据的右上角放一个“+”表示其实该对象可能活的更久。
变量:生存分析的变量有两个:生存时间t和结局变量(0-1)。其中结局变量1表示死亡事件,0表示截尾。
生存曲线:以生存时间为横轴、生存率为纵轴绘制一条生存曲线。
中位生存时间:又称为生存时间的中位数,表示刚好有50%的个体其存活期大于该时间。
二、生存分析研究的部分内容
1、描述生存过程
研究生存时间的分布特点,估计生存率及其标准误、绘制生存曲线。常用方法有乘积极限法(K-M法)和寿命表法,此处简单介绍乘积极限法(K-M法)。
注:生存曲线为单因素分析(两个或者多个水平),用中位生存时间表示生存时间的平均水平;
2、比较生存过程
获得生存率及其标准误的估计值后,可以进行两组或多组生存曲线的比较,常用方法有对数秩检验(log-rank检验)。如曲线交叉,可能存在混杂因素。
注:两个或者多个生存曲线的比较(单因素两个或者多个水平)
3、影响生存时间的因素分析
常用的多因素生存分析方法:Cox比例风险回归模型。可能后面会啰嗦。
三、R包进行生存分析
1、R-survival包进行生存分析,并绘制KM曲线图:
Surv:用于创建生存数据对象
survfit:创建KM生存曲线或是Cox调整生存曲线
survdiff:用于不同组的统计检验
coxph:构建COX回归模型 (待)
cox.zph:检验PH假设是否成立 (待)
#载入包,读取数据
library(survival)
dat <- read.table('Test.txt',header=TRUE)
1) 估计生存函数,观察不同组间的区别
# 估计KM生存曲线
# OS_time:跟踪到的存活时间
# OS_Status: 跟踪到的存活状态
# COV1:表示按照COV1进行分组
fit <- survfit(Surv(dat$OS_time,as.numeric(dat$OS_Status))~dat$COV1,data=dat)
# 获得的survial列就是生存率
summary(fit)
2) 比较不同因子分组的生存效果,检验显著性
survdiff(Surv(dat$OS_time,as.numeric(dat$OS_Status))~dat$COV1,data=dat)
3) 绘制KM曲线图
#横轴表示生存时间,纵轴表示生存概率,为一条梯形下降的曲线。下降幅度越大,表示生存率越低或生存时间越短。
plot(fit,xlab="Time(Days)",ylab="Survival",main="",col=c("blue","red"),lty=2,lwd=2)
legend("topright",c("A","B"),col=c("blue","red"),lty=2,lwd=2,cex=0.7)
2、R-survminer包绘制KM曲线图:图形更精美,展示效果更好。
library("survminer") #载入R包
fit<- survfit(Surv(time, status) ~ sex, data = lung) #读取数据
#绘制KM图
ggsurvplot(fit, data = lung,
surv.median.line = "hv", # Add medians survival
# Change legends: title & labels
legend.title = "Sex",legend.labs = c("Male", "Female"),
# Add p-value and tervals
pval = TRUE,pval.size = 3,
# Change censor
censor.shape = 124,censor.size = 2,
conf.int = FALSE,# 有无置信区间
break.x.by = 100, #横轴坐便
# Add risk table
risk.table = TRUE,tables.height = 0.2,tables.theme = theme_cleantable(),
#palette = c("#E7B800", "#2E9FDF"),
palette = c("blue", "purple"),
ggtheme = theme_bw(), # Change ggplot2 theme
# Change font size, style and color
main = "Survival curve",
font.main = c(16, "bold", "darkblue"),
font.x = c(14, "bold.italic", "red"),
font.y = c(14, "bold.italic", "darkred"),
font.tickslab = c(12, "plain", "darkgreen")
)
后续再补充COX回归相关内容。。。。。。