前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GDCRNATools--一个R包就能解决TCGA数据处理和可视化!

GDCRNATools--一个R包就能解决TCGA数据处理和可视化!

作者头像
作图丫
发布2022-03-29 09:16:42
1.9K0
发布2022-03-29 09:16:42
举报
文章被收录于专栏:作图丫

导语

GUIDE ╲

GDCRNATools是一个易于使用的用于整合GDC中lncRNA、mRNA和miRNA数据的R/Bioconductor软件包。

背景介绍

TCGA数据库作为癌症研究的首选公共数据库,整合了各种癌症的多组学数据。基因组数据共享数据库(GDC)维护着来自美国国家癌症研究所(NCI)计划的标准化基因组,临床和样本数据,包括TCGA和TARGET,它也接受来自非NCI支持的癌症研究计划的高质量数据集,例如来自Foundation Medicine的基因组数据。

GDCRNATools是一个R软件包,它提供了一个易于使用且全面的方法,用于下载,分析和可视化GDC中的RNA表达数据,重点在于解读癌症中与lncRNA-mRNA相关的ceRNA调控网络。同时还可以进行多种分析,包括基于limma、edgeR和DESeq2识别差异基因,基于clusterProfile和DO包进行的功能富集分析(GO、KEGG、DO),以及单因素生存分析和相关性分析等等。除了一些常规的可视化功能,如火山图、条形图、K-M图,还开发了一些简单的shiny应用,使用户可以在本地网页上的可视化结果。

GDCRNATools的安装

代码语言:javascript
复制
##使用bioconductor安装R包
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("GDCRNATools")
library(GDCRNATools)

GDCRNATools的使用

在GDCRNATools中,内置了一些功能,供用户下载和处理GDC数据。用户还可以使用自己的数据,这些数据来源于UCSC Xena GDC hub,TCGAbiolinks或TCGA-Assembler等。

在这里,我们使用一个小的数据集来进行ceRNAs网络分析的最基本步骤。

01

数据准备工作

1、 HTSeq-Counts data的标准化

代码语言:javascript
复制
library(DT)
### 下载RNAcounts数据
data(rnaCounts)
### 下载miRNAcounts数据
data(mirCounts)
#######  标准化函数gdcVoomNormalization
rnaExpr <- gdcVoomNormalization(counts = rnaCounts, filter = FALSE)
mirExpr <- gdcVoomNormalization(counts = mirCounts, filter = FALSE)

2、 Parse metadata

代码语言:javascript
复制
###生成胆管癌的metadata矩阵
metaMatrix.RNA <- gdcParseMetadata(project.id = 'TCGA-CHOL',
                                   data.type  = 'RNAseq', 
                                   write.meta = FALSE)
###对矩阵样本进行筛选
metaMatrix.RNA <- gdcFilterDuplicate(metaMatrix.RNA)
metaMatrix.RNA <- gdcFilterSampleType(metaMatrix.RNA)
##展示前6行
datatable(as.data.frame(metaMatrix.RNA[1:6,]), extensions = 'Scroller',
          options = list(scrollX = TRUE, deferRender = TRUE, scroller = TRUE))

02

ceRNA网络分析

1、差异表达基因的识别

代码语言:javascript
复制
##输入counts数据,按sample_type对样本分类,选择计算差异表达的方法
DEGAll <- gdcDEAnalysis(counts     = rnaCounts, 
                        group      = metaMatrix.RNA$sample_type, 
                        comparison = 'PrimaryTumor-SolidTissueNormal', 
                        method     = 'limma')
##展示筛选结果
datatable(as.data.frame(DEGAll), 
          options = list(scrollX = TRUE, pageLength = 5))
代码语言:javascript
复制
### 筛选差异表达的lncRNA
deLNC <- gdcDEReport(deg = DEGAll, gene.type = 'long_non_coding')

### 筛选差异表达的编码RNA
dePC <- gdcDEReport(deg = DEGAll, gene.type = 'protein_coding')

2、对于差异基因进行ceRNA网络分析

代码语言:javascript
复制
##生成ceRNA网络,RNA靶标来源starbase
ceOutput <- gdcCEAnalysis(lnc         = rownames(deLNC), 
                          pc          = rownames(dePC), 
                          lnc.targets = 'starBase', 
                          pc.targets  = 'starBase', 
                          rna.expr    = rnaExpr, 
                          mir.expr    = mirExpr)
##展示结果
datatable(as.data.frame(ceOutput), 
          options = list(scrollX = TRUE, pageLength = 5))

3、将ceRNA网络输出到cytoscape

代码语言:javascript
复制
##筛选p值显著的结果生成网络
ceOutput2 <- ceOutput[ceOutput$hyperPValue<0.01 
                      & ceOutput$corPValue<0.01 & ceOutput$regSim != 0,]
### 生成边的信息
edges <- gdcExportNetwork(ceNetwork = ceOutput2, net = 'edges')
datatable(as.data.frame(edges), 
          options = list(scrollX = TRUE, pageLength = 5))
### 生成节点的信息
nodes <- gdcExportNetwork(ceNetwork = ceOutput2, net = 'nodes')
datatable(as.data.frame(nodes), 
          options = list(scrollX = TRUE, pageLength = 5))

将节点和边的信息保存下来就可以输入到cytoscape画图啦!

数据分析实例

在这部分,我们将使用TCGA-CHOL整个数据集为例,详细说明GDCRNATools的使用方法。

01

RNA和miRNA表达数据的下载

在GDCRNATools中,提供了gdc-client方法通过指定data.type和project.id参数自动下载数据。

直接运行如下代码可能会报错,是因为R包内的gdc-client版本过低,我们需要自己下载新版本的gdc-client,解压后替换掉原来的gdc-client_v1.3.0,下载地址是:https://gdc.cancer.gov/access-data/gdc-data-transfer-tool

代码语言:javascript
复制
project <- 'TCGA-CHOL'
rnadir <- paste(project, 'RNAseq', sep='/')
mirdir <- paste(project, 'miRNAs', sep='/')

####### 下载RNAseq data,directory参数要写具体的下载路径(英文目录)
gdcRNADownload(project.id     = 'TCGA-CHOL', 
               data.type      = 'RNAseq', 
               write.manifest = FALSE,
               method         = 'gdc-client',
               directory      = rnadir)

####### 下载mature miRNA data 
gdcRNADownload(project.id     = 'TCGA-CHOL', 
               data.type      = 'miRNAs', 
               write.manifest = FALSE,
               method         = 'gdc-client',
               directory      = mirdir)
####### 下载 clinical data
clinicaldir <- paste(project, 'Clinical', sep='/')
gdcClinicalDownload(project.id     = 'TCGA-CHOL', 
                    write.manifest = FALSE,
                    method         = 'gdc-client',
                    directory      = mirdir)

02

metadata的处理

在gdcParseMetadata()函数中指定project.id和data.type来获取清单文件中的数据信息来解析metadata。对患者的组织和基本临床信息(例如年龄,分期和性别等)进行数据分析。通过gdcFilterDuplicate()去掉重复样本,使用gdcFilterSampleType()过滤掉既不是原发性肿瘤(01)也不是实体组织的正常样本(11)。

代码语言:javascript
复制
#### Parse RNAseq metadata
metaMatrix.RNA <- gdcParseMetadata(project.id = 'TCGA-CHOL',
                                   data.type  = 'RNAseq', 
                                   write.meta = FALSE)

#### 去除 RNAseq metadata的重复样本
metaMatrix.RNA <- gdcFilterDuplicate(metaMatrix.RNA)
#### 去除 RNAseq metadata既不是原发性肿瘤也不是实体组织的正常样本
metaMatrix.RNA <- gdcFilterSampleType(metaMatrix.RNA)
#### Parse miRNAs metadata #######
metaMatrix.MIR <- gdcParseMetadata(project.id = 'TCGA-CHOL',
                                   data.type  = 'miRNAs', 
                                   write.meta = FALSE)

#### 去除miRNAs metadata的重复样本
metaMatrix.MIR <- gdcFilterDuplicate(metaMatrix.MIR)
#### 去除 miRNAs metadata既不是原发性肿瘤也不是实体组织的正常样本
metaMatrix.MIR <- gdcFilterSampleType(metaMatrix.MIR)

03

合并原始counts数据

gdcRNAMerge()将RNAseq的原始数据合并到单个表达矩阵中,其中行为Ensembl id,列为样本。如果不同样本的数据位于单独的文件夹中,可以指定organized = FALSE,否则,指定organized = TRUE。

代码语言:javascript
复制
####### 合并 RNAseq data
rnaCounts <- gdcRNAMerge(metadata  = metaMatrix.RNA, 
                         path      = 'C:\\Users\\Administrator\\Desktop\\rnaseq', # the folder in which the data stored
                         organized = FALSE, # if the data are in separate folders
                         data.type = 'RNAseq')

####### 合并 miRNAs data
mirCounts <- gdcRNAMerge(metadata  = metaMatrix.MIR,
                         path      = 'C:\\Users\\Administrator\\Desktop\\mirna', # the folder in which the data stored
                         organized = FALSE, # if the data are in separate folders
                         data.type = 'miRNAs')
####### 合并 clinical data
clinicalDa <- gdcClinicalMerge(path = 'C:\\Users\\Administrator\\Desktop\\clinicaldir', key.info = TRUE)
clinicalDa[1:6,5:10]

04

TMM标准化和Voom转换

通过运行gdcVoomNormalization()函数,原始数据将通过edgeR中的TMM方法进行标准化,并通过limma中提供的voom方法进行进一步转换。默认情况下,低表达基因(超过一半的样本中logcpm <1)将被滤除。通过在gdcVoomNormalization()中设置filter = TRUE可以保留所有基因。

代码语言:javascript
复制
### RNAseq data的标准化
rnaExpr <- gdcVoomNormalization(counts = rnaCounts, filter = FALSE)

### miRNAs data的标准化
mirExpr <- gdcVoomNormalization(counts = mirCounts, filter = FALSE)

05

差异表达分析和可视化

代码语言:javascript
复制
##差异表达
DEGAll <- gdcDEAnalysis(counts     = rnaCounts, 
                        group      = metaMatrix.RNA$sample_type, 
                        comparison = 'PrimaryTumor-SolidTissueNormal', 
                        method     = 'limma')
data(DEGAll)
### All DEGs
deALL <- gdcDEReport(deg = DEGAll, gene.type = 'all')
### 筛选差异lncRNA
deLNC <- gdcDEReport(deg = DEGAll, gene.type = 'long_non_coding')
### 筛选差异编码基因
dePC <- gdcDEReport(deg = DEGAll, gene.type = 'protein_coding')

火山图绘制

代码语言:javascript
复制
gdcVolcanoPlot(DEGAll)

发现只有半边结果,按照网上的参考改了一下函数,从新写了一个函数gdcVolcanoPlot2,这样画出来的结果就好看多啦!

代码语言:javascript
复制
gdcVolcanoPlot2<-function (deg.all, fc = 2, pval = 0.01, dotsize=0.8) 
{
  geneList <- deg.all
  geneList$threshold <- c()
  geneList$threshold[geneList$logFC > log(fc, 2) & geneList$FDR < 
                       pval] <- 1
  geneList$threshold[geneList$logFC >= -log(fc, 2) & geneList$logFC <= 
                       log(fc, 2) | geneList$FDR >= pval] <- 2
  geneList$threshold[geneList$logFC < -log(fc, 2) & geneList$FDR < 
                       pval] <- 3
  geneList$threshold <- as.factor(geneList$threshold)
  lim <- max(max(geneList$logFC), abs(min(geneList$logFC))) + 
    0.5
  volcano <- ggplot(data = geneList, aes(x = logFC, 
                                         y = -log10(FDR)))
  volcano + geom_point(aes(color = threshold), alpha = 1, 
                       size = dotsize) + xlab("log2(Fold Change)") + ylab("-log10(FDR)") + 
    scale_colour_manual(values = c("red", "black", "green3")) + xlim(c(-lim, lim)) + 
    geom_vline(xintercept = c(-log(fc, 2), log(fc, 2)), color = "darkgreen", 
               linetype = 3) + geom_hline(yintercept = -log(pval, 
                                                            10), color = "darkgreen", linetype = 3) + theme_bw() + 
    theme(axis.line = element_line(colour = "black"), 
          panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
          panel.border = element_rect(colour = "black"), 
          panel.background = element_blank()) + theme(legend.position = "none") + 
    theme(axis.text = element_text(size = 14), axis.title = element_text(size = 16))
}
##使用新函数绘图
gdcVolcanoPlot2(DEGAll, pval = 0.01)

上下调的柱状图绘制:

代码语言:javascript
复制
gdcBarPlot(deg = deALL, angle = 45, data.type = 'RNAseq')

热图的绘制:

代码语言:javascript
复制
degName = rownames(deALL)
gdcHeatmap(deg.id = degName, metadata = metaMatrix.RNA, rna.expr = rnaExpr)

06

ceRNA网络分析

gdcCEAnalysis()还可以获取用户提供的miRNA-mRNA和miRNA-lncRNA相互作用数据集,而不仅仅是来源于starbase数据库

代码语言:javascript
复制
##使用来源于starbase的靶标数据集
ceOutput <- gdcCEAnalysis(lnc         = rownames(deLNC), 
                          pc          = rownames(dePC), 
                          lnc.targets = 'starBase', 
                          pc.targets  = 'starBase', 
                          rna.expr    = rnaExpr, 
                          mir.expr    = mirExpr)
##使用自行输入的靶标数据集
### 加载 miRNA-lncRNA互作数据
data(lncTarget)
### 加载miRNA-mRNA互作数据
data(pcTarget)
pcTarget[1:3]
ceOutput <- gdcCEAnalysis(lnc         = rownames(deLNC), 
                          pc          = rownames(dePC), 
                          lnc.targets = lncTarget, 
                          pc.targets  = pcTarget, 
                          rna.expr    = rnaExpr, 
                          mir.expr    = mirExpr)
###将节点和边的信息输出后,使用cytoscape绘图
ceOutput2 <- ceOutput[ceOutput$hyperPValue<0.01 & 
                        ceOutput$corPValue<0.01 & ceOutput$regSim != 0,]

edges <- gdcExportNetwork(ceNetwork = ceOutput2, net = 'edges')
nodes <- gdcExportNetwork(ceNetwork = ceOutput2, net = 'nodes')

write.table(edges, file='edges.txt', sep='\t', quote=F)
write.table(nodes, file='nodes.txt', sep='\t', quote=F)

07

共表达分析

这部分可以使用gdcCorPlot()函数绘制相关性图,也可以使用开发的shinyCorPlot()函数制作一个交互式的本地网页,自行输入基因名来绘图。

代码语言:javascript
复制
gdcCorPlot(gene1    = 'ENSG00000251165', 
           gene2    = 'ENSG00000091831', 
           rna.expr = rnaExpr, 
           metadata = metaMatrix.RNA)
shinyCorPlot(gene1    = rownames(deLNC), 
             gene2    = rownames(dePC), 
             rna.expr = rnaExpr, 
             metadata = metaMatrix.RNA)

08

K-M曲线的绘制

K-M曲线的绘制同样也有两种方式,通过gdcKMPlot()绘制基本的生存曲线,还有通过shinyKMPlot()绘制交互式的网页。

代码语言:javascript
复制
gdcKMPlot(gene     = 'ENSG00000136193',
          rna.expr = rnaExpr,
          metadata = metaMatrix.RNA,
          sep      = 'median')
shinyKMPlot(gene = rownames(deALL), rna.expr = rnaExpr, 
            metadata = metaMatrix.RNA)

09

功能富集分析

代码语言:javascript
复制
enrichOutput <- gdcEnrichAnalysis(gene = rownames(deALL), simplify = TRUE)
data(enrichOutput)
gdcEnrichPlot(enrichOutput, type = 'bar', category = 'GO', num.terms = 10)
代码语言:javascript
复制
gdcEnrichPlot(enrichOutput, type='bubble', category='GO', num.terms = 10)

文章参考:

http://bioconductor.org/packages/devel/bioc/vignettes/GDCRNATools/inst/doc/GDCRNATools.htm

小编总结

GDCRNATools作为集成了对GDC数据下载、处理和可视化的R包,可以说是功能十分全面了,可能是目前使用最方便的TCGA工具了,希望小编的介绍会对大家有所帮助,让小伙伴们多多了解GDCRNATools,为大家的科研工作助力!

END

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

本文分享自 作图丫 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档