生存分析2 生存分析的操作过程与R实践

文摘   2024-10-06 09:43   安徽  


写在前面

PSYCH



上次分享中,我们主要介绍了生存分析的概念,以及各项内在定义,数据收集格式。本期内容主要为如何进行生存分析,以及分析相关的危险因素等。



Vol.1

生存分析的目的与方法


1、描述生存过程:

绘制K-M曲线(kaplan-meier曲线),主要用于描述生存率、死亡速度、中位生存时间。它是一种无参数法(non-parametric)来从观察对象的生存时间,估计生存概率的方法。对于研究中的第n个时间点tn,生存概率可以计算为:

而其中,S(tn-1)是指tn-1的时候生存概率是多少,dn是指在时间点tn所发生的事件数,rn指快要到时间点tn时还存货的人,则t0=0, S(0)=1。


2、比较生存过程:

展示组间存在的差异,进行组间比较。基于生存曲线上每个点的数据,合成一个全面的组间比较结果。需要观察生存曲线的状态,来决定用何种统计方式来进行分组比较。(对于前期差异较大的数据使用Breslow进行比较,对于远期差异较大的数据使用LogRank进行比较。)

LogRank:对每一个点赋予的权重值是相同的,但对于结局事件的远期差别赋予更大的权重。所以对远期差异更敏感。

Breslow:给随访时期的前期的时间点权重更大,所以对近期差异更敏感。

3、计算矫正后的风险

挖掘影响生存结局的潜在因素,并得出矫正后的风险比(HR)。



Vol.2

Cox比例风险模型的构建


1、目的:

用于寻找阳性时间发生速度(风险值)的影响因素(危险因素/保护因素)

2、定义:

当进行生存分析模型构建时(K-M),属于单变量的分析过程,此时忽略了其他变量共同的影响,和变量之间的相互作用。为了解决以上问题,需要构建cox比例风险回归模型。

其中,h0(t)是基准风险方程,可以是任意一个针对时间t的非负方程;Xi是实例i的特征向量;β是参数向量,该向量通过最大化cox部分似然得到。

 3、方法:

①筛选有差异的变量,使用单因素cox分析,或者其他筛选变量的方法(如lasso,随机森林等等),再将单因素分析具有统计学意义的变量纳入多因素cox回归中。

②在多因素cox回归中,相当于进行变量之间的矫正,分析独立危险因素或保护因素。



Vol.3

生存分析的R语言实践


首先,根据分析目的,加载相应的R包:

 

library(ggplot2)

library(survminer)

library(survival)

library(readxl)

其中,survminer与survival为生存分析的主要R包,其余两个包为辅助作图与分析数据。

 

载入数据:PRDATA<- read_excel("D:/R/PRdata.xlsx")

 

第一步:进行无分组的生存分析:

#用survival包的Surv函数对时间及生存状态进行拟合(K-M)

fit<- survfit(Surv(time,status)~1,data= PRDATA)

#绘图

ggsurvplot(fit,palette="#C96868")

得到一个带有下降过程的生存曲线,其中纵坐标代表生存概率,横坐标代表由各个样本的存活时间。

 

第二步:计算分组的生存分布情况

#使用性别进行分组

fit1<-survfit(Surv(time,status)~sex,data= PRDATA)

ggsurvplot(fit1, censor.shape="|", censor.size=4, linetype="strata", conf.int=TRUE,

           pval=TRUE, data= PRDATA)

得到数据形式如下图所示,由于基于性别进行分组cox分析时,P值大于0.05,生存曲线相交,代表两组实际上的生存曲线没有统计学差异,因此性别不是影响此疾病生存概率的影响因素。

 

第三步:计算累计风险曲线

#累计风险曲线

ggsurvplot(fit1, data= PRDATA, conf.int= TRUE, fun="cumhaz")

两组人群,均随着时间的增加,死亡风险在不断上升。

 

#分组与整体联合绘制

ggsurvplot(fit1, data=PRDATA, conf.int=TRUE,

           pval=TRUE,surv.median.line = "hv",add.all= TRUE

           )#添加中位生存时间与总生存曲线。

#添加生存表

ggsurvplot(fit1, data=PRDATA, conf.int=TRUE,

           pval=TRUE,surv.median.line = "hv",

           risk.table= TRUE,

           risk.table.col="strata",

           legend.labs=c("Male","Female"),

           risk.table.height=0.25,

           ggtheme = theme_bw())#添加中位生存时间与总生存曲线。


第四步:计算COX模型

##单变量Cox回归

res.cox<- coxph(Surv(time,status)~sex,data= PRDATA,method="efron")

res.cox

此结果与上述分组生存分析计算结果大致相同。

同时可以采用:summary(res.cox)来产生更完整的报告。

 

如果将单变量coxph函数同时用于多个协变量:

covariates<- c(“age”,”sex”, “...”)

univ_formulas<- sapply(covariates, function(x) as.formula(paste(‘Surv(time,status)~, x)))

univ_models<- lapply( univ_formula, function(x){coxph(x,data = PRDATA0)})

 

最后需要进行多因素cox回归:

将所有单因素cox回归中有显著差异的变量输入多变量cox回归中:

res.cox<- coxph(Surv(time, status)~ age+sex+..., data= PRDATA)

summary(res.cox)

 

在summary结果中,可以看到最下方的三行中输出检验结果,在似然比估计,wald检验以及log-rank检验中是否具有统计学意义,并可以求出各回归中变量的系数、95%置信区间以及P值。

 

在构建模型后,可以对模型进行假设有效性检验:

测试比例危险假设,

test.ph<- cox.zph(res.cox)

test.ph

当输出的协变量P值均大于0.05是,我们可以认为假设成立,不拒绝原假设,原比例风险模型成立。


本期主要讲述了生存分析在R上的实践过程,下一期我们会主要介绍生存分析在SPSS上的实践过程。


PSYCH统计实验室

通知公告

网络分析课程目前开放视频课啦!


单次课200元/讲(学生),250元/讲(非学生)
共有四讲内容
①横断面网络分析简介与基础
②网络分析与因子分析
③交叉滞后网络分析
④时间序列网络分析


购买后开放视频权限14天,可多次申请。
并赠送所有课程相关资料(无PPT)
如果想申请购买,请联系M18812507626



更多资讯

关注我们


文稿:莲花清瘟

排版:Peruere
责编:Wink
审核:摘星

本文由“Psych统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。



Psych统计自习室
大家好,我们是由来自北京师范大学,西南大学,天津医科大学等高校在读硕士、博士研究生组成的一个科研团队——Psych统计自习室。Psych统计自习室旨在关注心理学、精神病学领域的最前沿的系列研究,并做前沿统计知识的分享。
 最新文章