Closed ixxmu closed 2 years ago
众所周知,TCGA数据库是目前最综合全面的癌症病人相关组学数据库,包括的多组学数据有:
知名的肿瘤研究机构都有着自己的TCGA数据库探索工具,比如:
其中MSKCC的就是cBioPortal,主页在:https://www.cbioportal.org/
这个网页工具可以很方便的查询感兴趣的目标基因在指定的癌症数据集里面,是否有突变,有表达量差异或者生存意义。包含的数据集列表在:https://www.cbioportal.org/datasets,值得注意的是这里面可不仅仅是TCGA数据集哦,也并不是说每个数据集都有多组学哦,如果我们按照样品数量排序,很容易看到:
只要是ngs数据文献 愿意遵守这个cBioPortal规则,就可以把其突变信息和表达量信息以及病人临床信息,按照固定的格式整理好,并且上传到cBioPortal网站,就可以使用cBioPortal的网页工具去探索它。
我们这里不纠结这个网页工具的用法了,那个很容易摸索,我们介绍生信工程师喜欢的编程语言来操作这个网页工具,就是 cgdsr: R-Based API for Accessing the MSKCC Cancer Genomics Data Server (CGDS)
既然是一个R包,首先就需要安装它,超级简单的代码:
install.packages('cgdsr')
接下来查看有多少个文献,多少个样品列表信息,每个文献都是有多少个数据集,分别对应的函数是:
首先是文献信息,需要使用getCancerStudies 来获取有哪些文献:
library(cgdsr)
library(DT)
# Get list of cancer studies at server ## 获取有哪些文献
mycgds <- CGDS("https://www.cbioportal.org/")
all_TCGA_studies <- getCancerStudies(mycgds)
all_TCGA_studies[1:3, 1:2]
#write.csv(all_TCGA_studies,paste0(Sys.time(),"all_TCGA_studies.csv"),row.names = F)
DT::datatable(all_TCGA_studies)
这个代码其实就是实现了:https://www.cbioportal.org/datasets,网页里面的文献列表获取,可以看到也是340个文献。
因为每个文献都是突变数据和表达量数据,所以可以使用getGeneticProfiles ,查询指定文献里面的数据集有哪些。
cg_study <- all_TCGA_studies[6,1]
cg_study # [1] "laml_tcga"
all_dataset <- getGeneticProfiles(mycgds, cg_study)
dim(all_dataset) # 11个数据集
cg_dataset <- all_dataset[9,1]
cg_dataset #[1] "laml_tcga_rna_seq_v2_mrna"
这个laml_tcga对应的文献提供了11种数据集,我们这里以 laml_tcga_rna_seq_v2_mrna 举例,它是 mRNA gene expression (RNA Seq V2 RSEM) 的简称。
使用 getCaseLists,查询指定文献里面的样品列表信息有哪些,代码如下所示:
all_tables <- getCaseLists(mycgds, cg_study)
all_tables[1:3, 1:2]
dim(all_tables) ## 共10种样本列表方式
# 这样的样品列表可以去获取其它属性信息
cg_table <- all_tables[1,1]
cg_table # [1] "laml_tcga_all"
可以看到,虽然是同一个文献,前面的查询发现有11个数据集,但是只有10个样品列表,如下所示:
这些样品列表可以用来获取临床信息,一般来说是使用全部的样品列表即可。
clinicaldata <- getClinicalData(mycgds, cg_table)
这些样品列表也可以用来获取组学信息,包括突变数据和表达量矩阵。
df <- getProfileData(mycgds, c('CD4','CD8A'), cg_dataset, cg_table)
dim(df) # 200个样品
df = na.omit(df)
dim(df) # 173个样品
cor(df[,1],df[,2])
因为我们使用全部的样品列表去获取表达量矩阵,而这个laml_tcga文献里面是200个病人,但并不是所有的病人都有转录组测序,其实就173个有,所以需要去除NA值。当然了,最好的方法是,获取表达量矩阵的时候,就使用对应的样品列表,而不是选择全部的病人样品列表。
这个 getProfileData 函数是万能的,后续如果我们要数量使用它来举例,基本上就是靠这一个函数即可。
前面我们提到了通过R包cgdsr链接cbioportal来探索TCGA等公共数据,而我喜欢把TCGA数据库的应用划分为8个领域:
下面我们就演示一下如何实现上面的需求:
> phe=clinicaldata[,c('OS_MONTHS','OS_STATUS','SEX')]
> head(phe)
OS_MONTHS OS_STATUS SEX
TCGA.AB.2882.03 11.99 1:DECEASED Female
TCGA.AB.2991.03 59.99 0:LIVING Female
TCGA.AB.2847.03 19.97 1:DECEASED Male
TCGA.AB.2979.03 22.04 0:LIVING Female
TCGA.AB.2818.03 9.95 1:DECEASED Female
TCGA.AB.2927.03 2.96 1:DECEASED Female
有了 OS_MONTHS OS_STATUS SEX,做一个简单的生存分析就太简单了。我在生信技能树多次分享过生存分析的细节;
同样的使用getProfileData函数,去指定的文献里面,根据指定的样品列表,去获取指定的数据集信息
df = getProfileData(mycgds, "NF1", c("gbm_tcga_gistic","gbm_tcga_mrna"), "gbm_tcga_all")
head(df)
df=na.omit(df)
table(df$gbm_tcga_gistic)
boxplot(df[,2] ~ df[,1], main="NF1 : CNA status vs mRNA expression",
xlab="CNA status", ylab="mRNA expression", outpch = NA)
stripchart(df[,2] ~ df[,1], vertical=T, add=T, method="jitter",pch=1,col='red')
如下所示:
这个其实前面演示了:
df = getProfileData(mycgds, c("MDM2","MDM4"), "gbm_tcga_mrna", "gbm_tcga_all")
head(df)
df=na.omit(df)
plot(df, main="MDM2 and MDM4 mRNA expression",
xlab="MDM2 mRNA expression", ylab="MDM4 mRNA expression")
df.pri = getProfileData(mycgds, "PTEN", "prad_mskcc_mrna_median_Zscores", "prad_mskcc_primary")
head(df.pri)
df.met = getProfileData(mycgds, "PTEN", "prad_mskcc_mrna_median_Zscores", "prad_mskcc_mets")
head(df.met)
boxplot(list(t(df.pri),t(df.met)), main="PTEN expression in primary and metastatic tumors", xlab="Tumor type", ylab="PTEN mRNA expression",names=c('primary','metastatic'), outpch = NA)
stripchart(list(t(df.pri),t(df.met)), vertical=T, add=T, method="jitter",pch=1,col='red')
如下所示:
就需要大家熟练掌握R语言,比如把上面的基础绘图全部使用ggplot语法重新绘制,并且让它更美观,甚至惊艳。
以及需要掌握TCGA数据库及其背后的癌症数据集的背景知识了,这些都是需要时间积累的,不能一蹴而就。
强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:
https://mp.weixin.qq.com/s/jW3f6hSSkgKsrP4G0_ogXQ