转录组学数据挖掘基本方法

本文初步记录了下转录组数据挖掘的基本工具使用方法,之后将补充各个工具的官方文档说明。

转录组学数据挖掘基本套路

1-差异分析套路路线。先跑出差异基因,然后有几个方向可以走:常规功能富集、GSEA/GSVA、PPI分析(找Hub基因)。

2-WGCNA路线。通过最后那个两个维度的相关性筛选关键基因。本路线可以移植到差异分析路线之中。

3-细胞成分分析路线。使用CiberSort、xCell(ssGSEA)等计算各类间质细胞的比例,进行细胞成分分析。

4-无监督聚类路线。这个适用于探索新的疾病分类模式,除了常规的聚类,还可以尝试NMF、一致性聚类等方法。对于聚类所得的各个分类,有必要探索该类别的功能特征。也有必要对比现有分类与已有分类的优缺点、交集及相互分布关系。

5-与其他组学联合分析。

6-单细胞测序类套路。



差异分析

常用的分析工具主要是:Limma、edgeR、DESeq2.

DESeq2和edgeR不用RPKM/FPKM或TPM做均一化,而是直接用原始的read counts做均一化处理。Limma既可以用read counts数据,也可以用均一化后的数据。

参考资料:

用limma包对芯片数据做差异分析

edgeR、limma、DESeq2三种差异表达包比较

简单使用DESeq2/EdgeR做差异分析

Limma包差异分析

需要自己做好三个数据(表达矩阵,分组矩阵,差异比较矩阵),总共三个步骤(lmFit,eBayes,topTable)就可以了。

代码:

# 表达矩阵

data = exprSet_by_group

# 分组矩阵

group_list = factor(group_list)design <- model.matrix(~0+group_list)rownames(design) = colnames(data)colnames(design) <- levels(group_list)

# 差异比较矩阵

cont.matrix <- makeContrasts(contrasts = c('tumor-normal'), levels = design)

# 建模预处理,可选步骤

dge <- DGEList(counts = data)

dge <- calcNormFactors(dge)

v <- voom(dge, design)

建模分析

fit <- lmFit(v, design)

fit2 <- contrasts.fit(fit, cont.matrix)

fit2 <- eBayes(fit2)

allDEG1 <- topTable(fit2, coef = 'tumor-normal', n = Inf)

allDEG1 <- na.omit(allDEG)

# 设置筛选界值

padj = 0.01

foldChange= 2

diff_signif1 = allDEG1[(allDEG1$adj.P.Val < padj &

                          (allDEG1$logFC>foldChange | allDEG1$logFC<(-foldChange))),]

diff_signif1 = diff_signif1[order(diff_signif1$logFC),]

save(diff_signif1, file = 'limma_diff1.Rdata')

limma包差异分析的结果解读(尤其是B值的含义)如下(摘自:http://www.bio-info-trainee.com/1194.html):


转录组学数据挖掘基本方法_第1张图片

另外,关于limma包的使用手册,这里有个博客系列专门讲解:https://www.jianshu.com/nb/15584694


EdgeR包差异分析

与Limma的步骤大同小异。

# 表达矩阵

data = exprSet_by_group

# 分组矩阵

group_list = factor(group_list)

design <- model.matrix(~0+group_list)

rownames(design) = colnames(data)

colnames(design) <- levels(group_list)

# 建模分析

y <- DGEList(counts=data,group= group_list)

y <- calcNormFactors(y)

y <- estimateCommonDisp(y)

y <- estimateTagwiseDisp(y)

et <- exactTest(y,pair = levels(group_list))

topTags(et)

ordered_tags <- topTags(et, n=100000)

allDEG = ordered_tags$table

allDEG = allDEG[is.na(allDEG$FDR)==FALSE,]

# 设置筛选界值

padj = 0.01

foldChange= 2

diff_signif = allDEG[(allDEG$FDR < padj & (allDEG$logFC>foldChange | allDEG$logFC<(-foldChange))),]

diff_signif = diff_signif[order(diff_signif$logFC),]

save(diff_signif, file = 'edger_diff.Rdata')


DESeq2包差异分析

代码

# 表达矩阵

data = exprSet_by_group

# 分组矩阵

condition = factor(group_list)

coldata <- data.frame(row.names = colnames(data), condition)

dds <- DESeqDataSetFromMatrix(countData = data,

                              colData = coldata,

                              design = ~condition)

dds$condition<- relevel(dds$condition, ref = "normal") # 指定哪一组作为对照组

# 建模分析

dds <- DESeq(dds)

allDEG2 <- as.data.frame(results(dds))

# 设置筛选界值

padj = 0.01

foldChange= 2

diff_signif2 = allDEG2[(allDEG2$padj < padj &

                          (allDEG2$log2FoldChange>foldChange | allDEG2$log2FoldChange<(-foldChange))),]

diff_signif2 = diff_signif2[order(diff_signif2$log2FoldChange),]

save(diff_signif2, file = 'DESeq2_diff2.Rdata')


肿瘤纯度分析

肿瘤纯度分析主要使用的4种方法:

ESTIMATE, which usesgene expression profilesof 141 immune genes and 141 stromal genes ( Yoshihara et al., 2013 );

ABSOLUTE, which usessomatic copy-number data(estimations were available for only 11 cancer types) (Carter et al., 2012);

LUMP (leukocytes unmethylation for purity), which averages 44non-methylated immune-specific CpGsites;

IHC, as estimated by image analysis ofhaematoxylin and eosin stain slidesproduced by the Nationwide Children’s Hospital Biospecimen Core Resource.

ABSOLUTE基于基因组学数据,ESTIMATE基于转录组学数据(RNA-Seq等)来评估肿瘤纯度,LUMP基于甲基化数据。三种方法估算的肿瘤纯度一致性比较高,但是都跟IHC的差异比较大。本文虽然着眼于转录组学数据分析,但是也顺带提一下ABSOLUTE和LUMP。

ESTIMATE包评估肿瘤纯度

ESTIMATE算法计算肿瘤纯度

使用ESTIMATE来根据stromal和immune细胞比例估算肿瘤纯度

TCGA数据库肿瘤微环境挖掘肿瘤免疫评分基质评分

ESTIMATE主要是基于ssGSEA,对 stromal and immune 两个基因集计算stromal成分评分和immune成分评分。预测到基质和免疫细胞的含量之后,基质细胞和免疫细胞含量多了,那么肿瘤纯度就低。因此可以间接预测出肿瘤纯度。

代码实战很简单,根据说明书使用即可。代码也可参考:

使用ESTIMATE来根据stromal和immune细胞比例估算肿瘤纯度


ABSOLUTE包评估肿瘤纯度

解析ABSOLUTE软件

ABSOLUTE评估肿瘤纯度

ABSOLUTE是评估肿瘤纯度的常用软件之一,它可以利用肿瘤样本的CNV和SNV等信息,对肿瘤纯度进行估计。ABSOLUTE是Broad研究所开发的一款癌症CNV分析软件,实质是一个R包,可以定量细胞的绝对拷贝数、肿瘤纯度与倍性,如果提供突变数据,还能探究克隆与亚克隆等。核心思想:ABSOLUTE主要通过3个子模型——SCNA(CNV数据),已预先设计好的癌症核型以及体细胞突变频率(MAF文件)进行计分,然后进行整合,最高分者为最优模型。但作者也指出最优模型并不是最好的,所以人工评审结果是有必要的

代码很简单,可参考说明书,或者:ABSOLUTE评估肿瘤纯度


间质成分分析

对混合细胞类型的转录组数据去卷积

工具包(下面这两个都安装失败了,直接使用网页版工具吧,CiberSort和xCell的网页版都还可以):

github-xCell

github-CiberSort etc

肿瘤间质成分分析都是基于转录组数据,主要使用的方法如下

1、CIBERSORT (Newman et al., 2015):以22种白细胞亚型细胞的细胞比例作为参考,用于来自于异质性样本的芯片或者RNA-seq数据。

3到11分文章解读(肿瘤免疫浸润挖掘方向)

Cibersort实战

2、TIMER (Li et al., 2016):包含B cells, CD4+, CD8+ T cells, macrophages, neutrophils 和 dendritic cells 的细胞比例,数据来源于TCGA 32种癌症类型,11,509个样本。

3、xCell (Dvir Aran et al., 2017):xCell is a recently published method based on ssGSEA that estimates the abundance scores of 64 immune cell types, including adaptive and innate immune cells, hematopoietic progenitors, epithelial cells, and extracellular matrix cells.

作者整合了FANTOM、ENCODE、Blueprint、GEO数据库共1822个纯人类细胞型转录组,既包括RNA-seq也有Array-based数据,使用单样本GSEA(ssGSEA)分析方法对每个样本进行评分,获得每个样本最可靠的特征集(gene signature),共生成了489个特征。然后建模评估样本表达谱与特征之间的关联。最后作者将这个根据基因表达谱计算其各个细胞类型富集分数的工具称为xCell

使用xcell根据表达谱推断样本组成细胞的类型

4、MCPcounter:MCPcounter和CIBERSORT最大的区别就是CIBERSORT是计算淋巴细胞的比例,二MCPcounter是一个绝对计数方法。

MCPcounter实战点点滴滴


另一个方法是从一篇Oncolmmunology里看到的,使用GSVA包的ssGSEA法,基于Bindea的研究工作,进行富集分析,得到24个免疫细胞的情况。

Identification of genetic determinants of breast cancer immune phenotypes by integrative genome-scale analysis

转录组学数据挖掘基本方法_第2张图片

此外,还有ssGSEA的方法也可以用来评估肿瘤浸润程度。其实xCell也是基于ssGSEA实现的。

纯R代码实现ssGSEA算法评估肿瘤免疫浸润程度

这个有一篇综述,可以看看:

Quantifying tumor-infiltrating immune cells from transcriptomics data


肿瘤免疫的其他内容

免疫调节基因的分析:好像有六七十个基因受到较多认可。

免疫分型分析:有好几种分型方法(如:荒漠型、枯竭型、激活型等等)。

免疫细胞表面CD分子表达分析

Cytolytic index分析:如 Immune Cytolytic Activity Stratifies Molecular Subsets of Human Pancreatic Cancer


功能富集分析

这两篇博客讲得不错,值得读一读:

转录组入门(8):富集分析

GO富集分析示例

富集分析的各种图:enrichplot: 让你们对clusterProfiler系列包无法自拔

R: clusterProfiler/enrichplot 富集分析与可视化神器

除了GO和KEGG,还有其他的比如enriched REACTOME pathways;有一个包可以做REACTOME富集分析:ReactomePA(Y叔的一个包)。

GO富集分析

代码

ego <- enrichGO(

  gene = row.names(deseq2.sig),

  OrgDb = org.hs,

  keytype = "ENSEMBL",

  ont = "MF"

)

# 可视化分为冒泡图和网络图等,画起来也就几行代码的事情

dotplot(ego,font.size=5)

enrichMap(ego, vertex.label.cex=1.2, layout=igraph::layout.kamada.kawai)

plotGOgraph(ego)


KEGG富集分析

代码

library(clusterProfiler)

gene_list <- mapIds(org.hs, keys = row.names(deseq2.sig),

                      column = "ENTREZID", keytype = "ENSEMBL" )

kk <- enrichKEGG(gene_list, organism="hsa",

                keyType = "ncbi-geneid",

                pvalueCutoff=0.05, pAdjustMethod="BH",

                qvalueCutoff=0.1)

head(summary(kk))

# 气泡图等图限于篇幅不画了,流量有限

dotplot(kk)

另外,Cytoscape的插件ClueGo也可以进行GO和KEGG的功能注释分析。


基因集富集分析 GSEA

一文教会你从头开始做GSEA

GSEA-基因富集分析

GSEA基因集富集分析

GSEA的分析汇总

GSEA分析结果详细解读

GSEA学习笔记 (这篇里面还大致讲了讲如何计算ES分数)

一文掌握GSEA,超详细教程

基因功能富集分析的研究进展

我们通常会筛选差异表达基因进而对这些差异表达基因进行功能富集分析(简称常规富集分析)。有时候会遇到过以下情况:差异基因少而富集不出来感兴趣或相关的功能/通路,或者差异表达基因虽然很多,但是没有富集到感兴趣的通路或者GO功能。此时,可以试试GSEA分析

GSEA(Gene Set Enrichment Analysis),是一个计算的方法,用来确定是否一个预先定义的基因集,能在两个生物学状态中显示出显著的一致性的差异。

预先定义的基因集:首先它是一个基因集合,它包含的是感兴趣的基因,比如某个通路,某个GO term,或hall marker基因集两个生物学状态:即实验组和对照组,可以是癌症和正常,男和女一致性差异:也就是预定义的基因集中的基因在两个生物学状态中呈现出相似的差异状态;说白了就是某个通路/GO条目中的基因集在实验组和对照组中呈现出一致的上调或者下调趋势。

GSEA与常规富集分析的区别在哪里呢?

常规富集分析必须先做差异筛选,用筛选的基因(无论多少)进行功能富集,这种方式可能由于筛选参数的不合理导致漏掉一些关键信息。

而GSEA无需做差异分析,直接拿所有基因的表达量即可找到实验组和对照组有一致性差异的感兴趣的通路。好处就是,不经筛差异可以保留了这些关键信息,进而找到那些差异不很明显但是基因差异趋势很一致的功能基因集。

当然,常规富集分析和GSEA分析没有说哪个更好,实际应用中能解决问题即可,引用一句名言:黑猫白猫,能抓住老鼠的就是好猫。

常用的GSEA分析工具是一个Java软件。

此处再引用另一个博客关于GSEA的解读:

说到富集,富集是将基因根据一些先验的知识(也就是常见的注释)进行分类的过程。我们一般会想到最常见的是GO/KEGG富集,其思路是先筛选差异基因,然后确定这些差异基因的GO/KEGG注释,然后通过超几何分布计算出哪些通路富集到了,通常会选择一个阈值来卡一下,比如p值和FDR等。因此这会涉及到人为的阈值选择,具有一定的主观性,而且只能用于差异较大的基因,所以结果可能有一定的局限性。

根据上述情况,有了GSEA(Gene Set Enrichment Analysis),其思路是发表于2005年的Gene set enrichment analysis: a knowledge-based approach for interpreting genome-wide expression profiles,主要是要有两个概念:预先定义的基因集S(基于先验知识的基因注释信息)和待测基因集L(一般是表达矩阵);然后GSEA目的就是为了判断S基因集中的基因是随机分布于L(排序后的数据集),还是聚集分布在L的顶部或者底部(这也就是富集)。如果待测基因集中的某些基因显著富集在L的顶部或者底部,这说明这些基因的表达(因为其是根据表达谱数据)对你定义的分组(预先分组)的差异有显著影响(一致性),从而找到我们关注的基因集;在富集分析的理论中,GSEA可以认为是第二代,即Functional Class Scoring (FCS) Approaches。


首先是对每个样本里面的基因表达值在样本内部进行排序,这里可以理解为,实验组与对照组的差异基因进行排序。但是,这个差异如何量化,有多种方法,可以是Signal2noise,或者是T检验的值,或者是fold change的值,或者是logFC等。而GSEA默认的就是signal-to-noise metric来对基因进行排序。如果要想计算Signal2Noise ,每个group必须要有3个及以上的samples。

现在我们定义一下各种参数。

其中我们把自己测出来的差异基因的排序列表称为目标基因列表L,把根据先验知识预先定义的基因集称为功能基因集S(这个基因集可以是与免疫有关的,可以是与某个代谢通路有关的,也可以是与miRNA有关的,具体的看GSEA官网),把这个基因集中的成员称为s(前者是大写,后者是小写)。GSEA的运行原理就是判断功能基因集S里面的成员s在目标基因列表L里面是随机分布的,还是主要聚集在目标基因列表L的顶部或底部。如果我们研究的功能基因集S的成员显著聚集在目标基因列表L的顶部或底部,那么就说明此基因集成员对实验干预造成的结果有作用,就是我们要关注的基因集。


ssGSEA


基因集变异分析 GSVA

GSVA(Gene Set Variation Analysis),被称为基因集变异分析,是一种非参数的无监督分析方法,主要用来评估芯片核转录组的基因集富集结果。主要是通过将基因在不同样品间的表达量矩阵转化成基因集在样品间的表达量矩阵,从而来评估不同的代谢通路在不同样品间是否富集。其实就是研究这些感兴趣的基因集在不同样品间的差异,或者寻找比较重要的基因集,作为一种分析方法,主要是是为了从生物信息学的角度去解释导致表型差异的原因。它的主要输入文件为表达量的矩阵和基因集的文件,通过GSVA的方法就可以得出结果;既可以处理芯片的结果,也可以处理转录组的结果。

GSVA用得较少,之后酌情加入这个分析。这个有必要再仔细研究下。

常用的工具:GSVA的R包。

GSVA的使用

使用GSVA方法计算某基因集在各个样本的表现

GSEA与GSVA的对比。


加权共表达网络分析 WGCNA

WGCNA分析,简单全面的最新教程

加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis),是用来描述不同样品之间基因关联模式的系统生物学方法,可以用来鉴定高度协同变化的基因集,

并根据基因集的内连性和基因集与表型之间的关联鉴定候补生物标记基因或治疗靶点。

相比于只关注差异表达的基因,WGCNA利用数千或近万个变化最大的基因或全部基因的信息识别感兴趣的基因集,并与表型进行显著性关联分析。一是充分利用了信息,二是把数千个基因与表型的关联转换为数个基因集与表型的关联,免去了多重假设检验校正的问题。

相关代码操作可参考:WGCNA分析,简单全面的最新教程

这个排版好一点:WGCNA分析,简单全面的最新教程

其他资料:你距离SCI文章只差一个WGCNA分析

WGCNA新手入门笔记

这个讲解很不错,很推荐:jmzeng1314/my_WGCNA


另可参考:生信系列

未完,待续。

你可能感兴趣的:(转录组学数据挖掘基本方法)