使用tinyarray简化你的TCGA分析流程!
简介
做生信数据分析的小伙伴一定离不开TCGA和GEO这两个数据库,但是在下载以及整理的数据的过程中就会遇到很多麻烦,比如探针id的转换,各种id的转换,数据的过滤,基本的差异分析,PCA,聚类,批量生存分析等。
真正分析的代码也就那几句,但是整理数据的过程真的是太麻烦了!!
今天介绍的这个tinyarray
包就可以帮助我们解决这些问题,大幅度简化你的数据清理过程!
这个包是生信技能树团队小洁老师写的R包哟,真的是太棒啦!!
下载安装
在线安装:
install.packages("tinyarray")
if(!require(devtools))install.packages("devtools")
if(!require(tinyarray))devtools::install_github(
下载zip包后本地安装:
devtools::install_local("tinyarray-master.zip",upgrade = F,dependencies = T)
简化TCGA数据分析
表达矩阵的整理
简化id转换,简化分组,一步到位,提取mRNA和lncRNA!
# 以xena下载的BRCA为例,其他也一样可以!
rm(list = ls())
library(tinyarray) # 加载包
##
##
survinfo <- data.table::fread("E:/projects/lisy/files/TCGA-BRCA.survival.tsv",data.table = F)
expr <- data.table::fread("E:/projects/lisy/files/TCGA-BRCA.htseq_fpkm.tsv.gz",data.table = F)
rownames(expr) <- expr$Ensembl_ID
expr <- expr[,-1] # 变成标准的表达矩阵格式,行是基因,列是样本
expr[1:4,1:4]
## TCGA-E9-A1NI-01A TCGA-A1-A0SP-01A TCGA-BH-A1EU-11A
## ENSG00000242268.2 0.09170787 0.000000000 0.05789928
## ENSG00000270112.3 0.01957347 0.004700884 0.01630174
## ENSG00000167578.15 2.23589760 1.863334319 1.70475318
## ENSG00000273842.1 0.00000000 0.000000000 0.00000000
## TCGA-A8-A06X-01A
## ENSG00000242268.2 0.000000
## ENSG00000270112.3 0.000000
## ENSG00000167578.15 1.947481
## ENSG00000273842.1 0.000000
分别提取mRNA和lncRNA,并转换id为gene symbol,一步到位!
expr_mrna <- trans_exp(expr,mrna_only = T) # 提取mrna,转换id为gene symbol
## 19712 of genes successfully mapping to mRNA,14805 of genes successfully mapping to lncRNA
expr_mrna[1:4,1:4]
## TCGA-E9-A1NI-01A TCGA-A1-A0SP-01A TCGA-BH-A1EU-11A TCGA-A8-A06X-01A
## RAB4B 2.2358976 1.86333432 1.70475318 1.9474808
## C12orf5 2.3219445 4.22669935 1.97575523 2.8087572
## RNF44 3.6200560 3.54611744 3.39694310 4.7232701
## DNAH3 0.3370874 0.01601615 0.04145534 0.0023613
expr_lncrna <- trans_exp(expr,lncrna_only = T) # 提取lncrna,转换id为gene symbol
## 19712 of genes successfully mapping to mRNA,14805 of genes successfully mapping to lncRNA
expr_lncrna[1:4,1:4]
## TCGA-E9-A1NI-01A TCGA-A1-A0SP-01A TCGA-BH-A1EU-11A
## RP11-368I23.2 0.09170787 0.000000000 0.05789928
## RP11-742D12.2 0.01957347 0.004700884 0.01630174
## EHD4-AS1 0.08466075 0.000000000 0.46162417
## RP11-166P13.4 0.05394113 0.000000000 0.50697074
## TCGA-A8-A06X-01A
## RP11-368I23.2 0.00000000
## RP11-742D12.2 0.00000000
## EHD4-AS1 0.08891242
## RP11-166P13.4 0.19295943
tcga样本分为癌和癌旁,也是一步到位!
group_list <- make_tcga_group(expr_mrna)
table(group_list)
## group_list
## normal tumor
## 113 1104
下面接差异分析就非常简单了!就不在演示了。
批量生存分析的简化
生存分析需要将表达矩阵和临床信息合并,或者变成顺序一样才行,直接手撸代码也是可以的,但是tinyarray
包把这个过程简化了!
# 去除重复的tumor样本
expr_mrna_fi <- sam_filter(expr_mrna)
## filtered 13 samples.
# 匹配tcga的表达矩阵和临床信息
match_exp_cl(expr_mrna_fi, survinfo, "_PATIENT")
## match successfully.
names(cl_matched)[4:5] <- c("event","time") # 把生存状态和生存时间名字改一下
identical(rownames(cl_matched), colnames(exp_matched))
## [1] TRUE
可以看到现在表达矩阵和临床信息都是1181个样本,而且顺序是一致的!
下面就可以批量做生存分析了。
首先展示下最佳截点的计算方法,比较简单的就是根据基因表达量的中位数作为截断值,但是这样有时会导致p值不显著,所以可以使用其他方法。
# 挑选10个基因做,一共有19712个基因
meta <- cl_matched
exprSet <- exp_matched[1:10,]
point_cut(exprSet,meta)
## $RAB4B
## [1] 1.868292
##
## $C12orf5
## [1] 1.468261
##
## $RNF44
## [1] 3.582367
##
## $DNAH3
## [1] 0.007520641
##
## $RPL23A
## [1] 7.546291
##
## $ARL8B
## [1] 5.517558
##
## $CALB2
## [1] 3.726976
##
## $MFSD3
## [1] 2.525482
##
## $PIGV
## [1] 3.45386
##
## $ZNF708
## [1] 2.11762
可以看到每个基因的最佳截点都给你算好了!
批量KM生存分析:
surv_KM(exprSet,meta,cut.point = T) # 使用最佳截点
## MFSD3 CALB2 RAB4B RPL23A DNAH3 ZNF708
## 2.985878e-11 1.549063e-06 8.240647e-05 6.176400e-03 1.078377e-02 1.764367e-02
## C12orf5 RNF44
## 4.037767e-02 4.395910e-02
批量cox生存分析:
surv_cox(exprSet, meta, cut.point = T)
## coef se z p HR HRse
## RAB4B -0.5685845 0.1460777 -3.892343 9.928061e-05 0.5663265 0.08272767
## C12orf5 -0.4358979 0.2147148 -2.030125 4.234383e-02 0.6466837 0.13885258
## RNF44 -0.3019320 0.1504873 -2.006362 4.481766e-02 0.7393884 0.11126856
## DNAH3 0.6244150 0.2484815 2.512924 1.197353e-02 1.8671534 0.46395306
## RPL23A -0.4741161 0.1745146 -2.716770 6.592238e-03 0.6224350 0.10862400
## CALB2 0.7304669 0.1551399 4.708441 2.496186e-06 2.0760497 0.32207808
## MFSD3 -1.0713457 0.1684207 -6.361128 2.002771e-10 0.3425472 0.05769205
## ZNF708 0.4487043 0.1901424 2.359833 1.828314e-02 1.5662815 0.29781645
## HRz HRp HRCILL HRCIUL
## RAB4B -5.242182 1.586884e-07 0.4253293 0.7540644
## C12orf5 -2.544542 1.094210e-02 0.4245476 0.9850483
## RNF44 -2.342186 1.917117e-02 0.5505257 0.9930420
## DNAH3 1.869054 6.161529e-02 1.1472872 3.0387000
## RPL23A -3.475889 5.091623e-04 0.4421268 0.8762764
## CALB2 3.340959 8.348949e-04 1.5317308 2.8137988
## MFSD3 -11.395899 0.000000e+00 0.2462411 0.4765192
## ZNF708 1.901444 5.724382e-02 1.0789972 2.2736273
批量画箱线图:
boxes <- exp_boxplot(exprSet, color = c("blue","red"))
boxes[[1]]
拼图:
patchwork::wrap_plots(boxes, nrow = 2)
批量画生存分析图:
surv_plots <- exp_surv(exprSet, meta)
patchwork::wrap_plots(surv_plots, nrow = 3)
这个包的功能远不止此,还可以:多组的差异分析、快速探索表达矩阵、一句代码画热图等。更多精彩,欢迎到作者的Github中学习!
以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发!
欢迎在评论区留言或直接添加我的微信!
往期精彩内容:
R语言和医学统计学系列(2):方差分析
R语言和医学统计学系列(3):卡方检验
R语言和医学统计学系列(4):秩和检验
超详细的R语言热图之complexheatmap系列6