zl程序教程

您现在的位置是:首页 >  Java

当前栏目

生存分析中的统计检验方法你用对了吗?

2023-02-18 16:31:08 时间

生存分析可能大家采用Kaplan-Meier法和log-rank检验生存率差异,很多TCGA在线工具也是用这2种方法,下面先对这2种方法简单介绍。

1. Kaplan-Meier法

Kaplan-Meier法简称K-M法,又称乘积极限法(Product-limit Estimate)是生存分析方法中最常用的一种,主要用于估计患者生存率和绘制生存曲线。Kaplan-Meier曲线(生存曲线),以生存时间为横轴,生存率S (tk)为纵轴,绘制而成的连续型的阶梯形曲线,用以说明生存时间与生存率之间的关系。生存曲线一般是平滑而水平延伸的,当某个时间点一旦有患者发生终点事件(如死亡),曲线就会垂直下降,下降幅度是该时间点上患者发生终点事件例数和上一个时间节点后随访的患者样本量的比。

一般情况下,不同组生存曲线不交叉,但如果有交叉,则提示可能存在混杂因素,可以用校正方法(如逆概率加权法),获得校正后的K-M曲线。

2.Log-Rank test

当两组或多组生存曲线(生存率)进行比较时,常用的假设检验方法是对数秩检验(log-rank test ),又称时序检验,属于非参数检验,用于比较两组或多组生存曲线或生存时间是否相同,检验统计量为卡方。需要注意的是,选用Log-Rank检验对样本生成存率进行比较时,要求各组生存曲线不能交叉,生存曲线交叉提示存在混杂因素,可以使用Two-stage方法。


了解这2种检验方法后,都发现,这两种方法都不能有交叉。那么有交叉的生存曲线,该如何进行统计检验。其实前面已经提到可以用two-stage方法。

3.Two Stage Hazard Rate Comparison

在R中使用TSHRC包进行统计检验,该检验方法同时可以计算Kaplan-MeierLog-Rank test的p值。

安装

install.packages("TSHRC")
library(TSHRC)

生存分析

我这里有一个生存数据:

library(survival)
fit <-  survdiff(Surv(OS.time,OS) ~ cluster,data = osdata)
summary(fit)
surv.obj <- Surv(osdata$OS.time,osdata$OS)
surv.treat <- survfit(surv.obj ~ cluster, data = osdata)

默认的统计检验方法,p值是0.45,但我们看到生存曲线是有交叉的。

ggsurvplot(surv.treat, data = osdata, pval = T,risk.table =T,
           ggtheme = theme_bw())

接下来我们使用two-stage方法计算p值。

TSHRC包中的twostage函数是计算p值的方法。

twostage(time, delta, group, nboot, alpha = 0.05, eps = 0.1)

你可以查看函数帮助文档。

pv <- twostage(osdata$OS.time,osdata$OS, osdata$group, nboot = 100)
> pv
      LRPV       MTPV       TSPV 
0.44762934 0.06000000 0.08380133 

得到的只是一个有名字的向量。

LRPV: p-value of the log-rank test,

MTPV: p-value of the suggested stage-II test,

TSPV: p-value of the two-stage test.

我们可以看到,默认情况下使用的是log-rank test,这里的0.44762934四舍五入收就是前面的0.45,但是生存曲线有交叉,这里我们需要使用TSPV。

 ggsurvplot(surv.treat, data = osdata, pval = round(pv["TSPV"],3),risk.table =T,
                ggtheme = theme_bw())

参考:

生存分析统计方法选择,可以避免的一些坑