最近在看ceRNA的时候看到了一个宝藏R包,写包简化了芯片数据下游分析之后,我正想着写转录组下游分析的简化版,就看到了它。用起来~
0.R包和数据准备
if(!require(GDCRNATools))BiocManager::install("GDCRNATools")
library(GDCRNATools)
这里使用的是作者给的示例数据,RNA-seq是1000行,miRNAseq是2588个。
# mRNA 和miRNA的表达矩阵
data(rnaCounts);dim(rnaCounts)
## [1] 1000 45
rnaCounts[1:3,1:3]
## TCGA-3X-AAV9-01 TCGA-3X-AAVA-01
## ENSG00000003989 1520 960
## ENSG00000004799 7659 957
## ENSG00000005812 2246 1698
## TCGA-3X-AAVB-01
## ENSG00000003989 2177
## ENSG00000004799 2295
## ENSG00000005812 2454
data(mirCounts);dim(mirCounts)
## [1] 2588 45
mirCounts[1:3,1:3]
## TCGA-3X-AAV9-01 TCGA-3X-AAVA-01
## hsa-let-7a-5p 165141 132094
## hsa-let-7a-3p 204 169
## hsa-let-7a-2-3p 30 26
## TCGA-3X-AAVB-01
## hsa-let-7a-5p 210259
## hsa-let-7a-3p 298
## hsa-let-7a-2-3p 50
#临床信息
metaMatrix.RNA <- gdcParseMetadata(project.id = 'TCGA-CHOL',
data.type = 'RNAseq',
write.meta = FALSE)
metaMatrix.RNA <- gdcFilterDuplicate(metaMatrix.RNA)
metaMatrix.RNA <- gdcFilterSampleType(metaMatrix.RNA)
metaMatrix.RNA[1:4,1:4]
## file_name
## TCGA-3X-AAV9-01A 725eaa94-5221-4c22-bced-0c36c10c2c3b.htseq.counts.gz
## TCGA-3X-AAVA-01A b6a2c03a-c8ad-41e9-8a19-8f5ac53cae9f.htseq.counts.gz
## TCGA-3X-AAVB-01A c2765336-c804-4fd2-b45a-e75af2a91954.htseq.counts.gz
## TCGA-3X-AAVC-01A 8b20cba8-9fd5-4d56-bd02-c6f4a62767e8.htseq.counts.gz
## file_id
## TCGA-3X-AAV9-01A 85bc7f81-51fb-4446-b12d-8741eef4acee
## TCGA-3X-AAVA-01A 42b8d463-6209-4ea0-bb01-8023a1302fa0
## TCGA-3X-AAVB-01A 6e2031e9-df75-48df-b094-8dc6be89bf8b
## TCGA-3X-AAVC-01A 19e8fd21-f6c8-49b0-aa76-109eef46c2e9
## patient sample
## TCGA-3X-AAV9-01A TCGA-3X-AAV9 TCGA-3X-AAV9-01
## TCGA-3X-AAVA-01A TCGA-3X-AAVA TCGA-3X-AAVA-01
## TCGA-3X-AAVB-01A TCGA-3X-AAVB TCGA-3X-AAVB-01
## TCGA-3X-AAVC-01A TCGA-3X-AAVC TCGA-3X-AAVC-01
1.差异分析
gdcDEAnalysis函数,需要表达矩阵、分组信息向量以及比较顺序。可以获取所有的差异基因。
这里method用了limma,还有edgeR和DESeq2可选。
table(metaMatrix.RNA$sample_type)
##
## PrimaryTumor SolidTissueNormal
## 36 9
DEGAll <- gdcDEAnalysis(counts = rnaCounts,
group = metaMatrix.RNA$sample_type,
comparison = 'PrimaryTumor-SolidTissueNormal',
method = 'limma');dim(DEGAll)
## [1] 565 8
head(DEGAll)
## symbol group logFC AveExpr
## ENSG00000143257 NR1I3 protein_coding -6.916825 7.023129
## ENSG00000205707 ETFRF1 protein_coding -2.492182 9.515997
## ENSG00000134532 SOX5 protein_coding -4.871118 6.228227
## ENSG00000141338 ABCA8 protein_coding -5.653794 7.520581
## ENSG00000066583 ISOC1 protein_coding -2.370131 10.466194
## ENSG00000164188 RANBP3L protein_coding -5.624376 4.356284
## t PValue FDR B
## ENSG00000143257 -17.29086 4.244355e-22 2.419282e-19 40.04288
## ENSG00000205707 -16.06753 8.353256e-21 2.380678e-18 37.19751
## ENSG00000134532 -15.03589 1.168746e-19 2.220617e-17 34.49828
## ENSG00000141338 -14.86069 1.851519e-19 2.638414e-17 34.11581
## ENSG00000066583 -14.56532 4.053959e-19 4.621513e-17 33.35640
## ENSG00000164188 -14.22477 1.013592e-18 9.629125e-17 32.25659
可以获取全部差异基因,也可以单独获取mRNA和lncRNA的差异分析结果
deALL <- gdcDEReport(deg = DEGAll, gene.type = 'all');dim(deALL)
## [1] 283 8
deLNC <- gdcDEReport(deg = DEGAll, gene.type = 'long_non_coding');dim(deLNC)
## [1] 47 8
dePC <- gdcDEReport(deg = DEGAll, gene.type = 'protein_coding');dim(dePC)
## [1] 222 8
可以看到,这里总共有283个差异基因,mRNA有222个,lncRNA有47个。看了一下帮助文档,默认的logFC阈值是1,p值是0.01,虽然帮助文档中没有提到校正,但我探索到了,它使用的是矫正后的P值(FDR)。
table(DEGAll$PValue<0.01 & DEGAll$FDR>0.01)
##
## FALSE TRUE
## 550 15
table(deALL$PValue<0.01 & deALL$FDR>0.01)
##
## FALSE
## 283
logFC和p值的阈值有参数可以修改。
2.ceRNAs network 分析
整个过程就只用gdcCEAnalysis这个函数来完成。
参数rna.expr 和mir.expr要求是经过voom转换的表达矩阵;
lnc 和 pc 是lncRNA和miRNA的ensambelid,也就是前面的差异分析结果表格的行名。
lnc.target 是预测lncRNA-miRNA使用的数据库,支持:'spongeScan', 'starBase', and 'miRcode'。
pc.target 是预测miRNA-mRNA关系的数据库,支持"mirTarBase","miRcode"和"starBase"(作者帮助文档写错啦,从文章里找的)。
这个函数鉴定ceRNA的标准有4个:
(1)lncRNA和mRNA之间共享的miRNA数量;
(2)lncRNA与mRNA的表达相关性;
(3)共享miRNA对lncRNA和mRNA的调控相似性;
(4)(sensitivity)灵敏度相关性
rnaExpr <- gdcVoomNormalization(counts = rnaCounts, filter = FALSE)
mirExpr <- gdcVoomNormalization(counts = mirCounts, filter = FALSE)
ceOutput <- gdcCEAnalysis(lnc = rownames(deLNC),
pc = rownames(dePC),
lnc.targets = 'starBase',
pc.targets = 'starBase',
rna.expr = rnaExpr,
mir.expr = mirExpr)
ceOutput[1:3,1:5]
## lncRNAs Genes Counts listTotal popHits
## 1 ENSG00000234456 ENSG00000107864 2 2 95
## 2 ENSG00000234456 ENSG00000135111 2 2 24
## 3 ENSG00000234456 ENSG00000165672 2 2 8
3.输出cytoscape可视化使用的文件
输出数据根据超几何分布检验和相关性分析的p值、调控相关性分数做了筛选。
ceOutput2 <- ceOutput[ceOutput$hyperPValue<0.01
& ceOutput$corPValue<0.01 & ceOutput$regSim != 0,]
dim(ceOutput);dim(ceOutput2)
## [1] 453 13
## [1] 124 13
edges <- gdcExportNetwork(ceNetwork = ceOutput2, net = 'edges')
nodes <- gdcExportNetwork(ceNetwork = ceOutput2, net = 'nodes')
nrow(edges);nrow(nodes)
## [1] 452
## [1] 187
table(nodes$type)
##
## lnc mir pc
## 16 56 115
write.table(edges, file='edges.txt', sep='\t', quote=F)
write.table(nodes, file='nodes.txt', sep='\t', quote=F)
edges[1:4,]
## fromNode toNode altNode1Name
## 1 ENSG00000234456 hsa-miR-374b-5p MAGI2-AS3
## 2 ENSG00000234456 hsa-miR-374a-5p MAGI2-AS3
## 47 ENSG00000234741 hsa-miR-137 GAS5
## 50 ENSG00000255717 hsa-miR-377-3p SNHG1
nodes[1:3,1:3]
## gene symbol type
## 1 ENSG00000003989 SLC7A2 pc
## 2 ENSG00000004799 PDK4 pc
## 3 ENSG00000021826 CPS1 pc
这样就得到了452个关系对、187个节点,其中lncRNA、miRNA、mRNA的数量分别是16,56和115。其中,edges作为网络文件输入,nodes作为特征表格输入,下次给大家讲放进cytoscape如何美化~