突变分析神器: 有一堆基因变异位点SNP,你可以分析点什么

如果你做了全基因组、全外显子组或者targeted sequencing,拿到了一堆基因变异位点(SNP),下一步你该分析点什么

如果还没有头绪,你可以认识一下这个神器:maftools,不仅马上有了分析思路,还能收获一堆结果~

1 总体分析框架

这是一个R包,先来看一下这个包都能干点什么:

image

具体用法可以看官网说明书:
http://bioconductor.org/packages/release/bioc/manuals/maftools/man/maftools.pdf

这个包好在哪里呢?

首先,MAF是非常常见的描述基因突变的文件形式,只要拿到这么一个文件,就可以做一系列的突变分析

第二,最基本的和稍微进阶一点的突变分析套路,maftools已经给你安排的明明白白的了,这些结果也够研究一阵的了。

那么什么是MAF(Mutation Annotation Format ),可以看下这个链接https://docs.gdc.cancer.gov/Data/File_Formats/MAF_Format/,里面除了说了什么MAF外,还对MAF格式的每个列名做了解释说明,一般来说我们从TCGA下载是突变文件都是MAF格式的。

如果是VCF格式的突变分析结果,那么可以用vcf2maf工具从vcf转化为MAF格式,至于为什么我想说要转为MAF格式呢,因为有个maftools这个R包,其基础MAF格式可以做很多分析以及可视化工作,特别方便!

2 安装包、加载包

在R中安装maftools包

if (!require("BiocManager"))
    install.packages("BiocManager")
BiocManager::install("maftools")

3 读入MAF文件

有了包,下一步就是读入数据开始分析啦~

先看看你需要给它什么样的数据?

必须给的文件包括(Required input files)

  • MAF文件 - 可以将MAF压缩成 .gz结尾的文件作为input,也可以不压缩。

  • 如果你还需要临床分析,再给一个临床数据文件(可选)。

  • 如果有拷贝数数据也可以给,maftools接受GISTIC的输出文件(这一类文件也可选)。

读入MAF文件

library(maftools)

这里我用一个示例数据,这个示例数据只要值安装了maftools就可以用,读入文件用** read.maf**这个函数

#从示例中载入MAF文件的路径
laml.maf = system.file('extdata', 'tcga_laml.maf.gz', package = 'maftools') 
#从示例中载入临床数据文件的路径,包括生存数据、病理数据。此文件不是必须文件。
laml.clin = system.file('extdata', 'tcga_laml_annot.tsv', package = 'maftools')
#读入MAF文件
laml = read.maf(maf = laml.maf, clinicalData = laml.clin)

读入MAF后,可以总结一下这个文件中样本(samples)的情况:

# Shows sample summary.
getSampleSummary(laml)
# 结果为每个样本的变异类型总结
Tumor_Sample_Barcode Frame_Shift_Del Frame_Shift_Ins In_Frame_Del
##   1:         TCGA-AB-3009               0               5            0
##   2:         TCGA-AB-2807               1               0            1
##   3:         TCGA-AB-2959               0               0            0
##   4:         TCGA-AB-3002               0               0            0
##   5:         TCGA-AB-2849               0               1            0

总结一下这个文件中基因(Gene)的情况:

# Shows gene summary.
getGeneSummary(laml)
# 结果为每个基因的变异类型总结:
##       Hugo_Symbol Frame_Shift_Del Frame_Shift_Ins In_Frame_Del In_Frame_Ins
##    1:        FLT3               0               0            1           33
##    2:      DNMT3A               4               0            0            0
##    3:        NPM1               0              33            0            0
##    4:        IDH2               0               0            0            0
##    5:        IDH1               0               0            0            0

对MAF还不是很了解的同学,可以看看这里,这个命令展示了MAF文件中所有列的名称。可以了解一下MAF都包含哪些内容。

# 展示一下MAF所有列都是什么
# Shows all fields in MAF
getFields(laml)
##  [1] "Hugo_Symbol"            "Entrez_Gene_Id"         "Center"
##  [4] "NCBI_Build"             "Chromosome"             "Start_Position"
##  [7] "End_Position"           "Strand"                 "Variant_Classification"
## [10] "Variant_Type"           "Reference_Allele"       "Tumor_Seq_Allele1"
## [13] "Tumor_Seq_Allele2"      "Tumor_Sample_Barcode"   "Protein_Change"
## [16] "i_TumorVAF_WU"          "i_transcript_name"

如果有临床信息,可以看一下临床信息什么样子:

# shows clinical data associated with samples
getClinicalData(laml)

4 数据可视化

4.1 MAF概览

plotmafSummary函数将每个样本中的变体数显示为堆积条形图,将变体类型显示为 Variant_Classification 汇总的箱形图。我们可以在堆积的条形图中添加平均线或中线,以显示整个群组中变体的平均值/中值数。

plotmafSummary(maf = laml, rmOutlier = TRUE, addStat = 'median', dashboard = TRUE, titvRaw = FALSE)
image

4.2 突变全景图(Oncoplots)

这个图是一个必备图了,推荐大家都要掌握。现在基本全部有关基因突变的文章,第一张可视化的图就是这个了。 这个图的目的是展示所有样本的变异情况,比如哪些基因突变频率较高,那种类型变异比较多,所有样本突变呈现什么样的pattern等。

#这里只展示了突变检出率top10的基因。参数可以自己调整
#oncoplot for top ten mutated genes.
oncoplot(maf = laml, top = 10)
image

如果只想挑几个感兴趣的基因看突变谱也可以:

oncostrip(maf = laml, genes = c('DNMT3A','NPM1', 'RUNX1'))
image

4.3 Transition and Transversions.

titv函数将SNP分类为转换和颠换,并以各种方式返回汇总表的列表。汇总数据也可以显示为一个箱线图,显示六种不同转换的总体分布,并作为堆积条形图显示每个样本中的转换比例。

laml.titv = titv(maf = laml, plot = FALSE, useSyn = TRUE)
#plot titv summary
plotTiTv(res = laml.titv)
image

4.4 氨基酸改变的棒棒糖图

棒棒糖图显示了蛋白质结构上的突变点。许多癌基因,某些位点比其他位点更容易突变,变异频率更高,这些位置被认为是突变热点(hot-spots)。棒棒糖图可以用于显示它们以及其他突变。我们可以使用函数lollipopPlot绘制这样的图。这个功能要求我们在maf文件中有氨基酸改变信息。然而,MAF文件没有关于命名氨基酸变化字段的明确指南,不同的研究具有不同的氨基酸变化的字段(或列)名称。默认情况下,lollipopPlot查找列AAChange,如果在MAF文件中找不到它,则会打印所有可用字段并显示警告消息。对于以下示例,MAF文件包含字段/列名称“Protein_Change”下的氨基酸变化。我们将使用参数AACol手动指定它。此函数还将绘图作为ggplot对象返回,如果需要,用户稍后可以修改该对象。

#lollipop plot for DNMT3A, which is one of the most frequent mutated gene in Leukemia.
lollipopPlot(maf = laml, gene = 'DNMT3A', AACol = 'Protein_Change', showMutationRate = TRUE)
image

4.5 瀑布图(Rainfall plots

癌症基因组,特别是实体瘤会有些位点存在超突变(hyper-mutations)。rainfallPlot 这个函数可以将这一现象通过瀑布图体现出来。

# 读入示例数据
brca <- system.file("extdata", "brca.maf.gz", package = "maftools")
brca = read.maf(maf = brca, verbose = FALSE)
# 画图
rainfallPlot(maf = brca, detectChangePoints = TRUE, pointSize = 0.6)
image

4.6 Plotting VAF

如果你的MAF文件有VAF信息的话,可以简单画个箱线图看看所有样本在不同gene上的VAF分布,vafCol就是指定MAF列中的VAF的列名。

plotVaf(maf = laml, vafCol = 'i_TumorVAF_WU')
image

5 数据分析

前面show了那么多图,然而只算得上现成的数据做了用图形的形式展示了出来,也就是可视化。 下面才开始针对数据的分析,可以说功能很强大了

5.1 基因之间的伴发互斥关系

癌症中的许多引起疾病的基因共同发生或在其突变模式中显示出强烈的互斥性。这个分析有什么意义呢?比如,有研究发现肺癌患者存在EGFR(L858R/R832H)和ALK(E13; A20/A19; E14)共突变。而共突变较单驱动突变在用药选择、疗效上就会有不同,需注意。可以使用somaticInteractions函数检测这种相互排斥或共同发生的基因组,其执行成对的Fisher's Exact检验以检测这种显着的基因对。somaticInteractions函数还使用cometExactTest来识别涉及> 2个基因的潜在改变的基因集。

#exclusive/co-occurance event analysis on top 10 mutated genes. 
somaticInteractions(maf = laml, top = 25, pvalue = c(0.05, 0.1))
image

深绿色的为样本中倾向共同发生突变的基因;而深黄色为互斥基因,也就是在一个样本中,“有我没他,有他没我”的基因。

##      gene1  gene2       pValue oddsRatio  00 11 01 10              Event
##   1: ASXL1  RUNX1 0.0001541586 55.215541 176  4 12  1       Co_Occurence
##   2:  IDH2  RUNX1 0.0002809928  9.590877 164  7  9 13       Co_Occurence
##   3:  IDH2  ASXL1 0.0004030636 41.077327 172  4  1 16       Co_Occurence
##   4:  FLT3   NPM1 0.0009929836  3.763161 125 17 16 35       Co_Occurence
##   5:  SMC3 DNMT3A 0.0010451985 20.177713 144  6 42  1       Co_Occurence

##              pair event_ratio
##   1: ASXL1, RUNX1        4/13
##   2:  IDH2, RUNX1        7/22
##   3:  ASXL1, IDH2        4/17
##   4:   FLT3, NPM1       17/51
##   5: DNMT3A, SMC3        6/43
##  ---
## 296: ASXL1, PLCE1         0/9
## 297: FAM5C, RAD21        0/10
## 298: FAM5C, PLCE1         0/9
## 299: PLCE1, RAD21         0/9
## 300:  EZH2, PLCE1         0/

5.2 生存分析 (Survival analysis)

  1. Mutation in any given genes

用DNMT3A这个基因来做个例子,比较一下DNMT3A野生型和DNMT3A突变型的样本,在生存时间上是不是有明显区别。所以genes = 'DNMT3A'

#Survival analysis based on grouping of DNMT3A mutation status
mafSurvival(maf = laml, genes = 'DNMT3A', time = 'days_to_last_followup', Status = 'Overall_Survival_Status', isTCGA = TRUE)
image

2)Predict genesets associated with survival

鉴别引起更差生存的基因集

#Using top 20 mutated genes to identify a set of genes (of size 2) to predict poor prognostic groups
prog_geneset = survGroup(maf = laml, top = 20, geneSetSize = 2, time = "days_to_last_followup", Status = "Overall_Survival_Status", verbose = FALSE)

print(prog_geneset)
##     Gene_combination P_value    hr  WT Mutant
##  1:      FLT3_DNMT3A 0.00104 2.510 164     18
##  2:      DNMT3A_SMC3 0.04880 2.220 176      6
##  3:      DNMT3A_NPM1 0.07190 1.720 166     16
##  4:      DNMT3A_TET2 0.19600 1.780 176      6
##  5:        FLT3_TET2 0.20700 1.860 177      5
##  6:        NPM1_IDH1 0.21900 0.495 176      6
##  7:      DNMT3A_IDH1 0.29300 1.500 173      9
##  8:       IDH2_RUNX1 0.31800 1.580 176      6
##  9:        FLT3_NPM1 0.53600 1.210 165     17
## 10:      DNMT3A_IDH2 0.68000 0.747 178      4
## 11:      DNMT3A_NRAS 0.99200 0.986 178      4

Above results show a combination (N = 2) of genes which are associated with poor survival (P < 0.05). We can draw KM curve for above results with the function mafSurvGroup

mafSurvGroup(maf = laml, geneSet = c("DNMT3A", "FLT3"), time = "days_to_last_followup", Status = "Overall_Survival_Status")
image

5.3 两个队列的比较

不同癌症的突变谱是不同的,我们可以通过比较两个队列来鉴别不同的突变基因。比如,Madan et. al 文章中显示,复发的急性早幼粒细胞白血病(relapsed APL)有PML和RARA突变的趋势,而原发急性早幼粒细胞白血病(primary APL)则没有。

这种两个队列间的差异可以用mafCompare函数来鉴别,函数在两个队列多有基因中用fisher test鉴别差异化突变基因。

#读入Primary APL MAF
primary.apl = system.file("extdata", "APL_primary.maf.gz", package = "maftools")
primary.apl = read.maf(maf = primary.apl)
#读入Relapse APL MAF
relapse.apl = system.file("extdata", "APL_relapse.maf.gz", package = "maftools")
relapse.apl = read.maf(maf = relapse.apl)
#两个MAF比较
#Considering only genes which are mutated in at-least in 5 samples in one of the cohort to avoid bias due to genes mutated in single sample.
pt.vs.rt <- mafCompare(m1 = primary.apl, m2 = relapse.apl, m1Name = 'Primary', m2Name = 'Relapse', minMut = 5)
print(pt.vs.rt)
## $results
##    Hugo_Symbol Primary Relapse         pval         or       ci.up      ci.low
## 1:         PML       1      11 1.529935e-05 0.03537381   0.2552937 0.000806034
## 2:        RARA       0       7 2.574810e-04 0.00000000   0.3006159 0.000000000
## 3:       RUNX1       1       5 1.310500e-02 0.08740567   0.8076265 0.001813280
## 4:        FLT3      26       4 1.812779e-02 3.56086275  14.7701728 1.149009169
## 5:      ARID1B       5       8 2.758396e-02 0.26480490   0.9698686 0.064804160
## 6:         WT1      20      14 2.229087e-01 0.60619329   1.4223101 0.263440988
## 7:        KRAS       6       1 4.334067e-01 2.88486293 135.5393108 0.337679367
## 8:        NRAS      15       4 4.353567e-01 1.85209500   8.0373994 0.553883512
## 9:      ARID1A       7       4 7.457274e-01 0.80869223   3.9297309 0.195710173
##         adjPval
## 1: 0.0001376942
## 2: 0.0011586643
## 3: 0.0393149868
## 4: 0.0407875250
## 5: 0.0496511201
## 6: 0.3343630535
## 7: 0.4897762916
## 8: 0.4897762916
## 9: 0.7457273717
##
## $SampleSummary
##     Cohort SampleSize
## 1: Primary        124
## 2: Relapse         58

5.3.1 Forest plots
上面分析结果显示了PML和RARA在复发APL中突变比原发APL更多。下面,将这个结果可视化一下。一般会用到森林图。

forestPlot(mafCompareRes = pt.vs.rt, pVal = 0.1, color = c('royalblue', 'maroon'), geneFontSize = 0.8)
image

5.3.2 Co-onco plots

另外一种可视化办法,就是将基因在两个不同队列中的oncoplot并排画出来。可以同时比对同一基因在不同队列中的突变频率、突变类型的不同。

不得不说,这个包做的挺全面的,实在是太贴心了。

#给一组基因
genes = c("PML", "RARA", "RUNX1", "ARID1B", "FLT3")
#画基因在两个队列中的oncoplot
coOncoplot(m1 = primary.apl, m2 = relapse.apl, m1Name = 'PrimaryAPL', m2Name = 'RelapseAPL', genes = genes, removeNonMutated = TRUE)
image

5.3.3 Lollipop plot-2

还记得第一部分可视化里面介绍的棒棒糖图吗?

这里有了两个队列,还可以来一个两个状态比较的棒棒糖图

lollipopPlot2(m1 = primary.apl, m2 = relapse.apl, gene = "PML", AACol1 = "amino_acid_change", AACol2 = "amino_acid_change", m1_name = "Primary", m2_name = "Relapse")
image

上半部分展示了原发中PML蛋白变异位点,下半部分展示了复发中PML蛋白变异位点。

maftools包很强大,还有很多功能可以开发,有兴趣的同学可以去官网自己研究下。https://bioconductor.org/packages/release/bioc/vignettes/maftools/inst/doc/maftools.html#1_introduction
还有什么想了解的问题就给我留言吧~
喜欢就转发下

了解更多,请关注公主:生信频道

生信频道:bioinfo-c

你可能感兴趣的:(突变分析神器: 有一堆基因变异位点SNP,你可以分析点什么)