获取更多R语言知识,请关注公众号:医学和生信笔记
医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
简介
做生信数据分析的小伙伴一定离不开TCGA和GEO这两个数据库,但是在下载以及整理的数据的过程中就会遇到很多麻烦,比如探针id的转换,各种id的转换,数据的过滤,基本的差异分析,PCA,聚类,批量生存分析等。
真正分析的代码也就那几句,但是整理数据的过程真的是太麻烦了!!
今天介绍的这个tinyarray包就可以帮助我们解决这些问题,大幅度简化你的数据清理过程!
这个包是生信技能树团队小洁老师写的R包哟,真的是太棒啦!!
下载安装
在线安装:
if(!require(devtools))install.packages("devtools")if(!require(tinyarray))devtools::install_github("xjsun1221/tinyarray",upgrade = F)
下载zip包后本地安装:
devtools::install_local("tinyarray-master.zip",upgrade = F,dependencies = T)
简化GEO数据分析
简化GEO数据下载
library(tinyarray)# 直接用GSE号即可,默认会通过曾老师的GEO中国镜像下载,超级快,不需要fqgse <- geo_download("GSE38713")载入需要的程辑包:AnnoProbeAnnoProbe v 0.1.0 welcome to use AnnoProbe!If you use AnnoProbe in published research, please acknowledgements:We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.54675 probes, 43 samples from 0.923767449 to 15.77695556
如果报错可添加by_annopbrobe = T从官方途径下载。
class(gse)length(gse)[1] "list"[1] 3
下载来的gse是一个长度为3的列表,第1个就是表达矩阵,第2个是样本信息(pdata),第3个是GPL信息
exp <- gse$expexp[1:4,1:4] # 标准的表达矩阵,行是基因,列是样本GSM948550 GSM948551 GSM948552 GSM9485531007_s_at 9.735874 9.271060 9.885801 9.3063241053_at 7.403046 7.751990 7.579300 5.986061117_at 2.670557 2.677983 2.758533 2.720663121_at 4.118984 4.211329 4.787708 4.141341
View(gse$pd)
gse$gpl[1] "GPL570"
group_list=c(rep('normal',13),rep('UC',30))group_list <- factor(group_list,levels = c("normal","UC"))table(group_list)## group_list## normal UC## 13 30
简化ID转换
简化GEO数据探针转换:
ids <- AnnoProbe::idmap('GPL570') # 配合AnnoProbe## Setting options('download.file.method.GEOquery'='auto')## Setting options('GEOquery.inmemory.gpl'=FALSE)exp1 <- trans_array(exp, ids)exp1[1:4,1:4]41937 of 54675 rownames matched20188 rownames transformed after duplicate rows removedGSM948550 GSM948551 GSM948552 GSM948553RFC2 7.403046 7.751990 7.579300 5.986061HSPA6 2.670557 2.677983 2.758533 2.720663PAX8 4.118984 4.211329 4.787708 4.141341GUCA1A 2.265967 2.257482 2.270735 2.287381
连带着把探针重复的问题也一起解决了,是不是非常方便呢!
简化差异分析
一句代码,完成差异分析,火山图,热图,PCA,简直不能更棒!
deg <- get_deg_all(exp = exp, # 表达矩阵(探针转换前的)group_list = group_list, # 分组信息ids = ids, # 探针和基因名的对应表logFC_cutoff = 1, # logFCscale_before = F, # 是否scalecluster_cols = T # 热图聚类)'select()' returned 1:many mapping between keys and columns[1] "313 down genes,410 up genes"
deg也是一个列表,第1个是差异分析结果,第2个是上下调基因,第3个是3张图。
head(deg[[1]])

str(deg[[2]])List of 1$ deg:List of 3..$ up :'data.frame': 410 obs. of 2 variables:.. ..$ upgenes : chr [1:410] "MANF" "PSME4" "ANKRD22" "SDF2L1" ..... ..$ upprobes: chr [1:410] "202655_at" "212219_at" "238439_at" "218681_s_at" .....$ down:'data.frame': 313 obs. of 2 variables:.. ..$ downgenes : chr [1:313] "TRPM6" "CDKN2B" "CDKN2B-AS1" "LRRN2" ..... ..$ downprobes: chr [1:313] "221102_s_at" "207530_s_at" "1559884_at" "205154_at" .....$ diff:'data.frame': 723 obs. of 2 variables:.. ..$ diffgenes : chr [1:723] "MANF" "PSME4" "ANKRD22" "SDF2L1" ..... ..$ diffprobes: chr [1:723] "202655_at" "212219_at" "238439_at" "218681_s_at" ...
deg[[3]]

这个包的功能远不止此,还可以:简化TCGA数据的ID转换、多组的差异分析、批量生存分析、快速探索表达矩阵等。更多精彩,欢迎到作者的Github中学习!
简化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_IDexpr <- 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 lncRNAexpr_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 lncRNAexpr_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_matchedexprSet <- 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语言知识,请关注公众号:医学和生信笔记
医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
