前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R生存分析|关心的变量KM曲线不显著,还有救吗?

R生存分析|关心的变量KM曲线不显著,还有救吗?

作者头像
生信补给站
发布2021-09-09 11:06:48
3K1
发布2021-09-09 11:06:48
举报
文章被收录于专栏:生信补给站

如果想查看某些因素,如年龄,性别,分期,肿瘤数目,大小,实验室指标 或者 通过生信手(tao)段(lu)构建的模型和评分是否对预后有影响时候,经常会把连续变量变为分类变量,然后绘制KM曲线或者列线图等。

这时候会有一些常用的方法:

(1)实验室指标:根据正常范围进行分类

(2)临床指标:根据临床意义进行分类

(3)生信模型评分:根据中位数,平均值等进行分类

(4)生信模型评分:根据统计上的最优cutoff来分类

本次主要介绍基于统计上的最优cutoff分类的方法,并与常见的中位数进行简单的比较。

一 载入数据,R包

为了复现方便,使用内置myeloma数据集

代码语言:javascript
复制
#载入所需的R包
library("survival")
library("survminer")
#查看myeloma数据集
data(myeloma)
head(myeloma)
二 KM-中位数分类

以TP53基因为例,按照常用的中位数分为表达量高,低两组

代码语言:javascript
复制
#按照中位数进行分类
myeloma <- myeloma %>% 
  mutate(TP53_cat = ifelse(TP53 > median(TP53) ,"High" , "Low"))

head(myeloma)

构建模型,并绘制KM曲线

代码语言:javascript
复制
#构建模型
fit <- survfit(Surv(time, event) ~ TP53_cat, data = myeloma) 

#绘制生存曲线并显示P值
ggsurvplot(fit,
           data = myeloma,
           palette=c("red", "blue"), #自定义颜色
           legend.labs=c("TP53_High","TP53_Low"), #自定义标签
           risk.table = TRUE, 
           break.x.by = 6, #横坐标刻度间隔
           pval = T) #是否显示P值
如图显示P值不显著,这时候可以试一下最优cutoff。
更多调整可参考R|生存分析 - KM曲线 ,必须拥有姓名和颜值
三 KM-最优cutoff分类
3.1 计算最优cutoff

使用surv_cutpoint函数找到最优cutoff

代码语言:javascript
复制
res.cut <- surv_cutpoint(myeloma, 
                         time = "time",
                         event = "event",
                         variables = c("TP53", "WHSC1")) #可以添加多列

summary(res.cut)#查看最佳cutoff
      cutpoint statisticTP53     748.3  2.928906WHSC1   3205.6  3.361330

可以看到TP53 和 WHSC1 基因统计得到的最优cutoff。

3.2 根据最优cutoff分类

A:根据得到的最优cutoff 自行分类

代码语言:javascript
复制
myeloma <- myeloma %>% 
  mutate(TP53_cutoff = ifelse(TP53 > 748.3 ,"High" , "Low"))

head(myeloma)

构建模型,并绘制KM曲线

代码语言:javascript
复制
#构建模型
fit <- survfit(Surv(time, event) ~ TP53_cutoff, data = myeloma)
#绘制生存曲线
ggsurvplot(fit,
           data = myeloma, 
           palette=c("red", "blue"), #自定义颜色
           legend.labs=c("TP53_High","TP53_Low"), #自定义标签
           risk.table = TRUE,  
           break.x.by = 6,##横坐标间隔
           pval = T) #是否展示P值

可以看到P值 < 0.05了,变化还是很明显的。

B:根据surv_categorize函数获取重新构建的矩阵

此处推荐这种方法,能比较简单的获取重新构建的矩阵

代码语言:javascript
复制
##重新构建的矩阵
res.cat <- surv_categorize(res.cut)
head(res.cat)
          time event TP53 WHSC1GSM50986 69.24     0  low   lowGSM50988 66.43     0 high   lowGSM50989 66.50     0 high  highGSM50990 42.67     1 high  highGSM50991 65.00     0  low   lowGSM50992 65.20     0 high   low

构建模型,并绘制KM曲线

代码语言:javascript
复制
fit <- survfit(Surv(time, event) ~TP53, data = res.cat) 
#绘制生存曲线
ggsurvplot(fit,
           data = res.cat,
           palette=c("red", "blue"),
           legend.labs=c("TP53_High","TP53_Low"), #标签
           risk.table = TRUE,
           break.x.by = 6, ##横坐标间隔
           pval = T)

结果和自行根据最优cutoff,使用ifelse进行分类得到的结果一致,此处不展示了。

参考资料:https://www.rdocumentation.org/packages/survminer/versions/0.4.9

https://www.rdocumentation.org/packages/survminer/versions/0.4.9/topics/surv_cutpoint

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信补给站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 载入数据,R包
  • 二 KM-中位数分类
  • 如图显示P值不显著,这时候可以试一下最优cutoff。
  • 更多调整可参考R|生存分析 - KM曲线 ,必须拥有姓名和颜值
  • 三 KM-最优cutoff分类
    • 3.1 计算最优cutoff
      • 3.2 根据最优cutoff分类
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档