有时候你通过各种挖掘,筛选出了一些基因,你可能需要对这些基因进行生存分析,常规的办法可能要去下载所有的基因表达量和临床表型,然后再去一个个分析。说真的,这样很低效,我们可以利用survminer包的ggsurvplot_facet()函数进行分面绘制,类似于ggolot2的facet。

多基因生存分析数据的获得

我建议去xena浏览器的可视化卡片去直接筛选数据,这样可以节省很多很多时间,而且我建议你使用TPM的基因表达定量,在xena上有TCGA和GDC的hub,但是单位都不是TPM,而含有TPM的基因单位和生存数据保存在Pan-Cancer Atlas Hub里面。

我们使用xena的中国镜像站登录网址:

  • 第一列输入:TCGA Pan-Cancer

  • 第二列在Phenotypic,勾选cancer type abbreviationsample_typeOSOS.time(当然还有别的生存时间和状态,按需下载)

  • 后续列在Genomic里输入需要的基因名,gene expression RNAseq勾选TOIL RSEM tpm

  • 可以在上方的文本框内输入所要的肿瘤缩写(如BLCA)后点击Filter筛选当前肿瘤,继续输入Primary Tumor提取肿瘤样本

  • 点击下载,保存为“data.tsv”

这里需要解释一下,由于肿瘤的生存分析不应该设计正常样本,最好也不设计转移样本,所以我们要将“Primary Tumor”单独过滤除了。比如我随便输入了(RFC1、RFC2、RFC3、RCF4、RFC5、BEST1、BEST、BEST3和BEST4)九个基因,想看看这九个基因在BLCA中的OS生存曲线,示例数据见data.tsv

数据的处理

我们首先读取这个tsv表格,看看前几列的数据,其中表中部分基因的表达量是NA,我们需要去除NA值,然后把不需要的sample列去除

data<-read.csv("/data.tsv",sep="\t",row.names = 1,header = T)
data[1:10,1:10]
data<-na.omit(data)
data<-data[,-1]

我们一般按基因表达定位的中位数进行分组,这里有九个基因,我们可以设置一个函数,然后合并。

## 设置批量函数
keep<-function(x){
  ifelse(x>median(x),"High","Low")
}

data2<-apply(data[5:ncol(data)], 2, keep) #从6列开始批量运行

#将生存信息(Time,Status)与High/Low分类好的矩阵合并
survival<-cbind(data[,1:2],data2)
colnames(survival)<-c('status','time','RFC1','RFC2','RCF3','RFC4','RFC5','BEST1','BEST2','BEST3','BEST4') #重命名一下表格

接下来,我们需要将短数据,转换为长数据。

library(reshape)
survival2<-melt(survival,id.vars=c("status","time"))

多基因生存曲线分面绘制

进行一步批量生存分析,最终结果见图1所示

library(survival)
library(survminer)
fit<- survfit(Surv(time, status) ~ value, data = survival2)

ggsurvplot_facet(fit,survival2,
                 palette = "lancet",
                 linetype=3,
                 pval = T,pval.method = T,
                 conf.int = T,conf.int.style='step',
                 surv.median.line = "hv",
                 scales = "free",
                 short.panel.labs = T,
                 facet.by = "variable",
                 ggtheme=theme_linedraw(),legend.title="Group")
## Warning: `as.tibble()` was deprecated in tibble 2.0.0.
## Please use `as_tibble()` instead.
## The signature and semantics have changed, see `?as_tibble`.
## Warning: `select_()` was deprecated in dplyr 0.7.0.
## Please use `select()` instead.
## New names:
## * variable -> variable...1
## * variable -> variable...2
多基因生存曲线分面绘制

Figure 1: 多基因生存曲线分面绘制

结果显示好像我随机挑的这个基因在膀胱癌中都不咋的,没一个有意义,但我们可以换换配色和主题

ggsurvplot_facet(fit,survival2,
                 palette = "jco",
                 linetype=3,
                 pval = T,pval.method = T,
                 conf.int = T,conf.int.style='step',
                 surv.median.line = "hv",
                 scales = "free",
                 short.panel.labs = T,
                 facet.by = "variable",
                 ggtheme=theme_pubclean(),legend.title="Group")
## New names:
## * variable -> variable...1
## * variable -> variable...2

—更多细节需要多练习

作者简介

欧阳松石河子大学医学院第一附属医院泌尿外科主治医师、讲师、医学博士。 擅长泌尿及男性生殖系统常见疾病的诊疗,对男性生殖医学疾病具有较深研究熟悉各种泌尿男科手术及腔镜微创诊疗技术, 同时擅长R语言在生物信息方面的研究。

欧阳松 (2021). 多个基因的生存分析曲线一步绘制法. 欧阳松的博客. https://swcyo.rbind.io/course/multi-km-facet/

BibTeX citation

@misc{
  title = "多个基因的生存分析曲线一步绘制法",
  author = "欧阳松",
  year = "2021",
  journal = "欧阳松的博客",
  note = "https://swcyo.rbind.io/course/multi-km-facet/"
}
.. ... ...
本站总访问量次; 本站访客数人次; 本文总阅读量次;