2020-05-30 学习maftools : 可视化分析SNV

maftools : 总结、分析、可视化 MAF文件:

1 简介

随着肿瘤基因组学的发展,突变注释格式(MAF)正被广泛接受并用于存储检测到的体细胞变异。癌症基因组图谱项目已经对30多种不同的癌症进行了排序,每种癌症的样本量超过200。由体细胞变体组成的结果数据以突变注释格式存储。只要数据为MAF格式,此R包将尝试以高效的方式汇总、分析、注释和可视化来自TCGA来源或任何内部研究的MAF文件。

1.1 引用

如果你觉得这个软件有帮助到你,请用如下方法引用:

Mayakonda A, Lin DC, Assenov Y, Plass C, Koeffler HP. 2018. Maftools: efficient and comprehensive analysis of somatic variants in cancer. Genome Resarch PMID: 30341162

2 构建MAF文件

  • 对于VCF文件或简单的表格文件,简单的选择是使用vcf2maf软件,该软件将对VCF进行注释,确定记录的优先顺序,并生成MAF。
  • 如果您使用ANNOVAR 进行变异注释,maftools有一个很方便的函数annovarToMaf,用于将注释输出转换为MAF格式。

3 MAF field 要求

MAF文件包含从染色体名称到cosmic注释的许多字段。然而,maftools中的大多数分析使用以下字段。 - 必填字段: Hugo_Symbol, Chromosome, Start_Position, End_Position, Reference_Allele, Tumor_Seq_Allele2, Variant_Classification, Variant_Type and Tumor_Sample_Barcode. - 推荐的可选字段:包含VAF(变异等位基因频率)和氨基酸变化信息的非MAF特定字段。

有关MAF文件的完整规范,请参阅NCI GDC文档页面。 本教程在TCGA LAML队列1中的一个示例MAF文件上演示了maftools的用法和应用。

4 安装

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

5 该R包概览

maftools功能主要分为可视化模块和分析模块。下面总结了这些功能和简短的描述,如下所示。使用方法很简单,只需使用read.maf读取MAF文件(如果可用,还会附带copy-number数据),然后将生成的MAF对象传递给所需的函数进行绘图或分析。

image.png

6 读取并初步探索maf文件

6.1 Required input files

  • MAF文件-可以.gz压缩文件,必需输入文件。
  • 与MAF中的每个样本/Tumor_Sample_Barcode相关的可选但推荐的临床数据。
  • 可选的copy number数据(如果可用)。可以是GISTIC输出格式,也可以是包含sample names, gene names 和 copy-number status (Amp or Del)。

6.2 Reading MAF files.

read.maf函数读取MAF文件,以各种方式对其进行汇总,并将其存储为MAF对象。尽管MAF文件足够独立,建议您在MAF中提供与示例相关联的注释文件。如果可用,还可以集成拷贝数(copy number data)数据。

library(maftools)
#设置路径获取R包内置的 TCGA LAML MAF 文件
laml.maf = system.file('extdata', 'tcga_laml.maf.gz', package = 'maftools') 
#clinical information containing survival information and histology. This is optional
laml.clin = system.file('extdata', 'tcga_laml_annot.tsv', package = 'maftools') 

laml = read.maf(maf = laml.maf, clinicalData = laml.clin)
#> -Reading
#> -Validating
#> -Silent variants: 475 
#> -Summarizing
#> -Processing clinical data
#> -Finished in 0.236s elapsed (0.825s cpu)

6.3 MAF 对象

汇总MAF文件存储为MAF对象。MAF对象包含主MAF文件、汇总数据和任何关联的示例注释。 有一些访问器方法可以从MAF对象访问有用的slots。

#运行 laml 查看MAF的基本汇总信息.
laml
#> An object of class  MAF 
#>                    ID          summary  Mean Median
#>  1:        NCBI_Build               37    NA     NA
#>  2:            Center genome.wustl.edu    NA     NA
#>  3:           Samples              193    NA     NA
#>  4:            nGenes             1241    NA     NA
#>  5:   Frame_Shift_Del               52 0.271      0
#>  6:   Frame_Shift_Ins               91 0.474      0
#>  7:      In_Frame_Del               10 0.052      0
#>  8:      In_Frame_Ins               42 0.219      0
#>  9: Missense_Mutation             1342 6.990      7
#> 10: Nonsense_Mutation              103 0.536      0
#> 11:       Splice_Site               92 0.479      0
#> 12:             total             1732 9.021      9
#显示样本汇总信息
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
#>  ---                                                                  
#> 188:         TCGA-AB-2933               0               0            0
#> 189:         TCGA-AB-2942               0               0            0
#> 190:         TCGA-AB-2946               0               0            0
#> 191:         TCGA-AB-2954               0               0            0
#> 192:         TCGA-AB-2982               0               0            0
#>      In_Frame_Ins Missense_Mutation Nonsense_Mutation Splice_Site total
#>   1:            1                25                 2           1    34
#>   2:            0                16                 3           4    25
#>   3:            0                22                 0           1    23
#>   4:            0                15                 1           5    21
#>   5:            0                16                 1           2    20
#>  ---                                                                   
#> 188:            0                 1                 0           0     1
#> 189:            1                 0                 0           0     1
#> 190:            0                 1                 0           0     1
#> 191:            0                 1                 0           0     1
#> 192:            0                 1                 0           0     1
#显示基因汇总信息
getGeneSummary(laml)
#>       Hugo_Symbol Frame_Shift_Del Frame_Shift_Ins In_Frame_Del
#>    1:        FLT3               0               0            1
#>    2:      DNMT3A               4               0            0
#>    3:        NPM1               0              33            0
#>    4:        IDH2               0               0            0
#>    5:        IDH1               0               0            0
#>   ---                                                         
#> 1237:      ZNF689               0               0            0
#> 1238:      ZNF75D               0               0            0
#> 1239:      ZNF827               1               0            0
#> 1240:       ZNF99               0               0            0
#> 1241:        ZPBP               0               0            0
#>       In_Frame_Ins Missense_Mutation Nonsense_Mutation Splice_Site total
#>    1:           33                15                 0           3    52
#>    2:            0                39                 5           6    54
#>    3:            0                 1                 0           0    34
#>    4:            0                20                 0           0    20
#>    5:            0                18                 0           0    18
#>   ---                                                                   
#> 1237:            0                 1                 0           0     1
#> 1238:            0                 1                 0           0     1
#> 1239:            0                 0                 0           0     1
#> 1240:            0                 1                 0           0     1
#> 1241:            0                 1                 0           0     1
#>       MutatedSamples AlteredSamples
#>    1:             52             52
#>    2:             48             48
#>    3:             33             33
#>    4:             20             20
#>    5:             18             18
#>   ---                              
#> 1237:              1              1
#> 1238:              1              1
#> 1239:              1              1
#> 1240:              1              1
#> 1241:              1              1
#显示样本相关临床信息
getClinicalData(laml)
#>      Tumor_Sample_Barcode FAB_classification days_to_last_followup
#>   1:         TCGA-AB-2802                 M4                   365
#>   2:         TCGA-AB-2803                 M3                   792
#>   3:         TCGA-AB-2804                 M3                  2557
#>   4:         TCGA-AB-2805                 M0                   577
#>   5:         TCGA-AB-2806                 M1                   945
#>  ---                                                              
#> 189:         TCGA-AB-3007                 M3                  1581
#> 190:         TCGA-AB-3008                 M1                   822
#> 191:         TCGA-AB-3009                 M4                   577
#> 192:         TCGA-AB-3011                 M1                  1885
#> 193:         TCGA-AB-3012                 M3                  1887
#>      Overall_Survival_Status
#>   1:                       1
#>   2:                       1
#>   3:                       0
#>   4:                       1
#>   5:                       1
#>  ---                        
#> 189:                       0
#> 190:                       1
#> 191:                       1
#> 192:                       0
#> 193:                       0
#显示MAF对象的所有字段信息
getFields(laml)
#>  [1] "Hugo_Symbol"            "Entrez_Gene_Id"        
#>  [3] "Center"                 "NCBI_Build"            
#>  [5] "Chromosome"             "Start_Position"        
#>  [7] "End_Position"           "Strand"                
#>  [9] "Variant_Classification" "Variant_Type"          
#> [11] "Reference_Allele"       "Tumor_Seq_Allele1"     
#> [13] "Tumor_Seq_Allele2"      "Tumor_Sample_Barcode"  
#> [15] "Protein_Change"         "i_TumorVAF_WU"         
#> [17] "i_transcript_name"
#将maf汇总信息写入一个名为laml的输出文件。
write.mafSummary(maf = laml, basename = 'laml')

7 可视化

7.1 Plotting MAF summary.

我们可以使用plotmafSummary来绘制maf文件的摘要,该文件将每个样本中的变体数量显示为堆叠的条形图,将变量类型显示为由Variant_Classification分类汇总的箱形图。我们可以将平均值或中值线添加到堆叠条形图中,以显示队列中的平均/中位数变量。

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

7.2 Oncoplots瀑布图

7.2.1 Drawing oncoplots

可以将maf文件更好地表示为附图,也称为瀑布图。侧方条形图和顶部条形图可以分别由draRowBardraColBar参数控制。

#oncoplot for top ten mutated genes.
oncoplot(maf = laml, top = 10)
image.png

注:标记为Multi_Hit的变异是指在同一样本中发生多次突变的基因。 有关自定义的更多详细信息,请参阅自定义专题图小节。

7.3 Oncostrip

我们可以使用oncostrip函数可视化任何一组基因,该函数在每个样本中绘制突变,类似于cBioPortal上的OncoPrinter工具。oncostrip可用于使用topgene参数绘制任意数量的基因。

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

7.4转换和颠倒

titv 函数将SNP分类为 Transitions and Transversions ,并以各种方式返回汇总表的列表。汇总的数据还可以可视化为显示六个不同转换的总体分布的boxplot图,以及显示每个样本中的转换分数的堆叠条形图。

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

7.5 Lollipop plots for amino acid changes

棒糖图是显示蛋白质结构突变点的简单有效的方法。许多癌基因都有一个优先位点,其突变频率比其他任何位点都要高。这些点被认为是突变热点,棒棒糖曲线图可以用来显示它们和其他突变。我们可以使用函数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)
#>      HGNC refseq.ID protein.ID aa.length
#> 1: DNMT3A NM_175629  NP_783328       912
#> 2: DNMT3A NM_022552  NP_072046       912
#> 3: DNMT3A NM_153759  NP_715640       723
image.png

请注意,lollipopPlot警告用户针对给定基因的不同转录本的可用性。如果我们事先知道转录本ID,我们可以将其指定为refSeqIDprotein ID。默认情况下,lollipopPlot使用较长的转录本。

7.5.1 Labelling points.

我们还可以使用参数labelPos标记lollipopPlot上的点。如果labelPos设置为all,则所有点都会高亮显示。

lollipopPlot(maf = laml, gene = 'KIT', AACol = 'Protein_Change', labelPos = 816, refSeqID = 'NM_000222')
image.png

7.6 Rainfall plots

肿瘤基因组,特别是实体瘤的特征是基因组位点具有局部性的超突变 5.这种超突变的基因组区域可以通过在线性基因组尺度上绘制变异间距离图来可视化。这些地块通常被称为rainfallPlot,我们可以使用rainfallPlot来绘制这样的地块。如果detectChangePoints设置为TRUE,则rainfall plot还会亮显事件间距离的潜在更改所在的区域。

brca <- system.file("extdata", "brca.maf.gz", package = "maftools")
brca = read.maf(maf = brca, verbose = FALSE)
rainfallPlot(maf = brca, detectChangePoints = TRUE, pointSize = 0.6)
#>    Chromosome Start_Position End_Position nMuts Avg_intermutation_dist
#> 1:          8       98129391     98133560     6               833.8000
#> 2:          8       98398603     98403536     8               704.7143
#> 3:          8       98453111     98456466     8               479.2857
#> 4:          8      124090506    124096810    21               315.2000
#> 5:         12       97437934     97439705     6               354.2000
#> 6:         17       29332130     29336153     7               670.5000
#>    Size Tumor_Sample_Barcode C>G C>T
#> 1: 4169         TCGA-A8-A08B   4   2
#> 2: 4933         TCGA-A8-A08B   1   7
#> 3: 3355         TCGA-A8-A08B  NA   8
#> 4: 6304         TCGA-A8-A08B   1  20
#> 5: 1771         TCGA-A8-A08B   3   3
#> 6: 4023         TCGA-A8-A08B   4   3
image.png

“Kataegis”被定义为包含6个或更多连续突变、平均突变间距离小于或等于100bp的基因组片段5。

7.7将突变载量与TCGA队列进行比较

TCGA包含30多个不同的癌症队列,它们之间的中位突变载量从低至7个外显子(嗜铬细胞瘤和肾上腺副神经节瘤)到高达315个外显子(皮肤黑色素瘤)不等。看看给定MAF中的突变负荷如何与TCGA队列相抗衡,这是很有意义的。这可以通过函数tcgaComapre来实现,该函数绘制从33个TCGA地标队列中的10000多个WXS样本编译而成的变异的分布。生成的图类似于Alexandrov等人5的描述。

laml.mutload = tcgaCompare(maf = laml, cohortName = 'Example-LAML')
image.png

7.8 Plotting VAF

此函数将不同的等位基因频率绘制为箱式图,这有助于快速估计顶级突变基因的克隆状态(假设纯样本,克隆基因的平均等位基因频率通常在~50%左右)。

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

7.9 Genecloud

我们可以用geneCloud函数绘制突变基因的文字云图。每个基因的大小与其突变/变异的样本总数成正比。

geneCloud(input = laml, minMut = 3)
image.png

8 处理拷贝数数据。

8.1.读取并汇总gistic输出文件。

我们可以汇总GISTIC程序生成的输出文件。如前所述,我们需要GISTIC生成的四个文件,即all_lesions.conf_XX.txtamp_genes.conf_XX.txtdel_genes.conf_XX.txtscores.gistic,其中XX为置信度。详情见GISTIC documentation]。

all.lesions <- system.file("extdata", "all_lesions.conf_99.txt", package = "maftools")
amp.genes <- system.file("extdata", "amp_genes.conf_99.txt", package = "maftools")
del.genes <- system.file("extdata", "del_genes.conf_99.txt", package = "maftools")
scores.gis <- system.file("extdata", "scores.gistic", package = "maftools")

laml.gistic = readGistic(gisticAllLesionsFile = all.lesions, gisticAmpGenesFile = amp.genes, gisticDelGenesFile = del.genes, gisticScoresFile = scores.gis, isTCGA = TRUE)
#> -Processing Gistic files..
#> --Processing amp_genes.conf_99.txt
#> --Processing del_genes.conf_99.txt
#> --Processing scores.gistic
#> --Summarizing by samples
#GISTIC object
laml.gistic
#> An object of class  GISTIC 
#>           ID summary
#> 1:   Samples     191
#> 2:    nGenes    2622
#> 3: cytoBands      16
#> 4:       Amp     388
#> 5:       Del   26481
#> 6:     total   26869

与MAF对象类似,访问GISTIC对象slots的方法有getSampleSummarygetGeneSummarygetCytoBandSummary。可以使用write.Gistic Summary函数将汇总结果写入输出文件。 ### 8.2可视化GISTIC结果。 有三种类型的曲线图可用于可视化GISTIC结果。 #### 8.2.1基因组图

gisticChromPlot(gistic = laml.gistic, markBands = "all")
image.png

8.2.2 Bubble plot

gisticBubblePlot(gistic = laml.gistic)
image.png

8.2.3 oncoplot

除了拷贝数数据外,与oncoplots类似。如果有注释,可以再次根据注释对矩阵进行排序。下图是LAML的GISTIC结果,根据FAB分类排序。结果表明,7q缺失在M4亚型中几乎不存在,而在其他亚型中普遍存在。

gisticOncoPlot(gistic = laml.gistic, clinicalData = getClinicalData(x = laml), clinicalFeatures = 'FAB_classification', sortByAnnotation = TRUE, top = 10)
image.png

8.2.4 Visualizing CBS segments

tcga.ab.009.seg <- system.file("extdata", "TCGA.AB.3009.hg19.seg.txt", package = "maftools")
plotCBSsegments(cbsFile = tcga.ab.009.seg)
#> NULL
image.png

9 数据分析。

9.1 体细胞突变互动。

许多癌症致病基因在其突变模式中是共生的或表现出很强的排他性。这种互斥或共现的基因组可以使用somaticInteractions函数来检测,该函数执行成对的费舍尔精确测试来检测这种重要的基因对。somaticInteractions函数还使用cometExactTest来识别涉及6中>2 个基因的潜在改变的基因组。

#exclusive/co-occurance event analysis on top 10 mutated genes. 
somaticInteractions(maf = laml, top = 25, pvalue = c(0.05, 0.1))
image.png
#>      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
#>  ---                                                                    
#> 296: PLCE1  ASXL1 1.0000000000  0.000000 184  0  5  4 Mutually_Exclusive
#> 297: RAD21  FAM5C 1.0000000000  0.000000 183  0  5  5 Mutually_Exclusive
#> 298: PLCE1  FAM5C 1.0000000000  0.000000 184  0  5  4 Mutually_Exclusive
#> 299: PLCE1  RAD21 1.0000000000  0.000000 184  0  5  4 Mutually_Exclusive
#> 300:  EZH2  PLCE1 1.0000000000  0.000000 186  0  4  3 Mutually_Exclusive
#>              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/7

9.2 基于位置聚类的癌症驱动基因检测。

maftools有一个名为oncodrive的函数,它可以从给定的MAF中识别癌症基因(driver gene)。oncodrive是一个基于oncodriveCLUST算法的函数,最初是用Python语言实现的。这一概念是基于这样一个事实,即致癌基因中的大多数变异在少数几个特定的位点(也就是热点)上富集。这种方法利用这些位置来识别癌症基因。如果您使用此函数,请注明OncodriveCLUST article 7引用。

laml.sig = oncodrive(maf = laml, AACol = 'Protein_Change', minMut = 5, pvalMethod = 'zscore')
#> 
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |===                                                              |   4%
  |                                                                       
  |======                                                           |   9%
  |                                                                       
  |========                                                         |  13%
  |                                                                       
  |===========                                                      |  17%
  |                                                                       
  |==============                                                   |  22%
  |                                                                       
  |=================                                                |  26%
  |                                                                       
  |====================                                             |  30%
  |                                                                       
  |=======================                                          |  35%
  |                                                                       
  |=========================                                        |  39%
  |                                                                       
  |============================                                     |  43%
  |                                                                       
  |===============================                                  |  48%
  |                                                                       
  |==================================                               |  52%
  |                                                                       
  |=====================================                            |  57%
  |                                                                       
  |========================================                         |  61%
  |                                                                       
  |==========================================                       |  65%
  |                                                                       
  |=============================================                    |  70%
  |                                                                       
  |================================================                 |  74%
  |                                                                       
  |===================================================              |  78%
  |                                                                       
  |======================================================           |  83%
  |                                                                       
  |=========================================================        |  87%
  |                                                                       
  |===========================================================      |  91%
  |                                                                       
  |==============================================================   |  96%
  |                                                                       
  |=================================================================| 100%
head(laml.sig)
#>    Hugo_Symbol Frame_Shift_Del Frame_Shift_Ins In_Frame_Del In_Frame_Ins
#> 1:        IDH1               0               0            0            0
#> 2:        IDH2               0               0            0            0
#> 3:        NPM1               0              33            0            0
#> 4:        NRAS               0               0            0            0
#> 5:       U2AF1               0               0            0            0
#> 6:         KIT               1               1            0            1
#>    Missense_Mutation Nonsense_Mutation Splice_Site total MutatedSamples
#> 1:                18                 0           0    18             18
#> 2:                20                 0           0    20             20
#> 3:                 1                 0           0    34             33
#> 4:                15                 0           0    15             15
#> 5:                 8                 0           0     8              8
#> 6:                 7                 0           0    10              8
#>    AlteredSamples clusters muts_in_clusters clusterScores protLen   zscore
#> 1:             18        1               18     1.0000000     414 5.546154
#> 2:             20        2               20     1.0000000     452 5.546154
#> 3:             33        2               32     0.9411765     294 5.093665
#> 4:             15        2               15     0.9218951     189 4.945347
#> 5:              8        1                7     0.8750000     240 4.584615
#> 6:              8        2                9     0.8500000     976 4.392308
#>            pval          fdr fract_muts_in_clusters
#> 1: 1.460110e-08 1.022077e-07              1.0000000
#> 2: 1.460110e-08 1.022077e-07              1.0000000
#> 3: 1.756034e-07 8.194826e-07              0.9411765
#> 4: 3.800413e-07 1.330144e-06              1.0000000
#> 5: 2.274114e-06 6.367520e-06              0.8750000
#> 6: 5.607691e-06 1.308461e-05              0.9000000

可以用plotOncodrive来绘制这些结果.

plotOncodrive(res = laml.sig, fdrCutOff = 0.1, useFraction = TRUE)
image.png

9.3 Adding and summarizing pfam domains

maftools附带了函数pfamDomains,该函数将pfam结构域信息添加到氨基酸变化中。pnamDomain还根据受影响的结构域汇总氨基酸变化。这是为了知道在给定的癌症队列中,哪个结构域最容易受到影响。该函数的灵感来自于MuSic tool 8中的PFAM注释模块。

laml.pfam = pfamDomains(maf = laml, AACol = 'Protein_Change', top = 10)
#> Warning in pfamDomains(maf = laml, AACol = "Protein_Change", top = 10):
#> Removed 50 mutations for which AA position was not available
image.png
#Protein summary (Printing first 7 columns for display convenience)
laml.pfam$proteinSummary[,1:7, with = FALSE]
#>         HGNC AAPos Variant_Classification  N total  fraction   DomainLabel
#>    1: DNMT3A   882      Missense_Mutation 27    54 0.5000000 AdoMet_MTases
#>    2:   IDH1   132      Missense_Mutation 18    18 1.0000000      PTZ00435
#>    3:   IDH2   140      Missense_Mutation 17    20 0.8500000      PTZ00435
#>    4:   FLT3   835      Missense_Mutation 14    52 0.2692308      PKc_like
#>    5:   FLT3   599           In_Frame_Ins 10    52 0.1923077      PKc_like
#>   ---                                                                     
#> 1512: ZNF646   875      Missense_Mutation  1     1 1.0000000          
#> 1513: ZNF687   554      Missense_Mutation  1     2 0.5000000          
#> 1514: ZNF687   363      Missense_Mutation  1     2 0.5000000          
#> 1515: ZNF75D     5      Missense_Mutation  1     1 1.0000000          
#> 1516: ZNF827   427        Frame_Shift_Del  1     1 1.0000000          
#Domain summary (Printing first 3 columns for display convenience)
laml.pfam$domainSummary[,1:3, with = FALSE]
#>        DomainLabel nMuts nGenes
#>   1:      PKc_like    55      5
#>   2:      PTZ00435    38      2
#>   3: AdoMet_MTases    33      1
#>   4:         7tm_1    24     24
#>   5:       COG5048    17     17
#>  ---                           
#> 499:    ribokinase     1      1
#> 500:   rim_protein     1      1
#> 501: sigpep_I_bact     1      1
#> 502:           trp     1      1
#> 503:        zf-BED     1      1

上面的图和结果表明,AdoMet_MTases结构域经常发生突变,但与7tm_1结构域等其他结构域相比,含有该结构域的基因只有一个(DNMT3A),后者在24个不同的基因中发生了突变。这表明了甲基转移结构域突变在白血病中的重要性。

9.4 Pan-Cancer comparison

Lawrence等人对21个癌症队列进行了MutSigCV分析,确定了200多个显著突变的基因,其中包括以前未订阅的新基因9。他们的结果表明,只有少数基因在多个队列中发生突变,而其中许多基因是组织/队列特异性的。我们可以将mutSig结果与这个泛癌显著突变基因列表进行比较,以查看特定队列中特定突变的基因。此函数需要MutSigCV结果(通常名为sig_genes.txt)作为输入。

#MutsigCV results for TCGA-AML
laml.mutsig <- system.file("extdata", "LAML_sig_genes.txt.gz", package = "maftools")
pancanComparison(mutsigResults = laml.mutsig, qval = 0.1, cohortName = 'LAML', inputSampleSize = 200, label = 1)
#>       gene pancan            q nMut log_q_pancan     log_q
#>  1:  CEBPA  1.000 3.500301e-12   13   0.00000000 11.455895
#>  2:   EZH2  1.000 7.463546e-05    3   0.00000000  4.127055
#>  3: GIGYF2  1.000 6.378338e-03    2   0.00000000  2.195292
#>  4:    KIT  0.509 1.137517e-05    8   0.29328222  4.944042
#>  5:   PHF6  0.783 6.457555e-09    6   0.10623824  8.189932
#>  6: PTPN11  0.286 7.664584e-03    9   0.54363397  2.115511
#>  7:  RAD21  0.929 1.137517e-05    5   0.03198429  4.944042
#>  8:  SMC1A  0.801 2.961696e-03    6   0.09636748  2.528460
#>  9:   TET2  0.907 2.281625e-13   17   0.04239271 12.641756
#> 10:    WT1  1.000 2.281625e-13   12   0.00000000 12.641756
image.png
#>          gene   pancan            q nMut log_q_pancan    log_q
#>   1:   ACVR1B 6.11e-02 1.000000e+00    0     1.213959  0.00000
#>   2:     AKT1 2.68e-10 1.000000e+00    0     9.571865  0.00000
#>   3:      APC 1.36e-13 1.000000e+00    0    12.866461  0.00000
#>   4:    APOL2 7.96e-03 1.000000e+00    0     2.099087  0.00000
#>   5: ARHGAP35 2.32e-12 1.000000e+00    1    11.634512  0.00000
#>  ---                                                          
#> 120:    U2AF1 4.07e-08 4.503311e-13    8     7.390406 12.34647
#> 121:      VHL 2.32e-12 1.000000e+00    0    11.634512  0.00000
#> 122:      WT1 1.00e+00 2.281625e-13   12     0.000000 12.64176
#> 123:   ZNF180 8.60e-02 1.000000e+00    0     1.065502  0.00000
#> 124:   ZNF483 2.37e-02 1.000000e+00    0     1.625252  0.00000

9.5生存分析

生存分析是基于队列的测序项目的重要组成部分。函数mafSurvive根据用户定义基因的突变状态或手动提供的组成一组的样本进行分组,进行生存分析并绘制Kaplan Meier曲线。此函数要求输入数据包含TOMOR_SAMPLE_BARCODE(请确保与MAF文件中的匹配)、二进制事件(1/0)和到达事件的时间。 我们的注释数据已经包含生存信息,如果您将生存数据存储在单独的表中,请通过参数clinicalData #### 9.5.1在任何给定基因中突变来提供这些数据

#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)
#> DNMT3A 
#>     48 
#>     Group medianTime   N
#> 1: Mutant        245  45
#> 2:     WT        396 137
image.png

9.5.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

以上结果显示与生存不良相关的基因组合(N=2)(P < 0.05)。利用函数mafSurvGroup可以绘制上述结果的KM曲线

mafSurvGroup(maf = laml, geneSet = c("DNMT3A", "FLT3"), time = "days_to_last_followup", Status = "Overall_Survival_Status")
#>     Group medianTime   N
#> 1: Mutant      242.5  18
#> 2:     WT      379.5 164
image.png

9.6.对比两个队列(MAF)。

癌症在突变模式方面各不相同。我们可以比较两个不同的队列来检测这种差异突变的基因。例如,Madan et. al 9的研究表明,复发的急性早幼粒细胞白血病(APL)患者往往存在PML和RAR基因突变,而这两种基因在疾病的初发期是不存在的。可以使用函数mafComapre来检测两个队列(在这种情况下是原发性和复发性APL)之间的这种差异,该函数对两个队列之间的所有基因执行Fisher测试,以检测差异突变的基因。

#Primary APL MAF
primary.apl = system.file("extdata", "APL_primary.maf.gz", package = "maftools")
primary.apl = read.maf(maf = primary.apl)
#> -Reading
#> -Validating
#> --Non MAF specific values in Variant_Classification column:
#>   ITD
#> -Silent variants: 45 
#> -Summarizing
#> -Processing clinical data
#> --Missing clinical data
#> -Finished in 0.053s elapsed (0.199s cpu)
#Relapse APL MAF
relapse.apl = system.file("extdata", "APL_relapse.maf.gz", package = "maftools")
relapse.apl = read.maf(maf = relapse.apl)
#> -Reading
#> -Validating
#> --Non MAF specific values in Variant_Classification column:
#>   ITD
#> -Silent variants: 19 
#> -Summarizing
#> -Processing clinical data
#> --Missing clinical data
#> -Finished in 0.041s elapsed (0.157s cpu)
#只考虑其中一个队列中至少5个样本中发生突变的基因,以避免因单个样本中的基因突变而产生的偏差。
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
#> 1:         PML       1      11 1.529935e-05 0.03537381   0.2552937
#> 2:        RARA       0       7 2.574810e-04 0.00000000   0.3006159
#> 3:       RUNX1       1       5 1.310500e-02 0.08740567   0.8076265
#> 4:        FLT3      26       4 1.812779e-02 3.56086275  14.7701728
#> 5:      ARID1B       5       8 2.758396e-02 0.26480490   0.9698686
#> 6:         WT1      20      14 2.229087e-01 0.60619329   1.4223101
#> 7:        KRAS       6       1 4.334067e-01 2.88486293 135.5393108
#> 8:        NRAS      15       4 4.353567e-01 1.85209500   8.0373994
#> 9:      ARID1A       7       4 7.457274e-01 0.80869223   3.9297309
#>         ci.low      adjPval
#> 1: 0.000806034 0.0001376942
#> 2: 0.000000000 0.0011586643
#> 3: 0.001813280 0.0393149868
#> 4: 1.149009169 0.0407875250
#> 5: 0.064804160 0.0496511201
#> 6: 0.263440988 0.3343630535
#> 7: 0.337679367 0.4897762916
#> 8: 0.553883512 0.4897762916
#> 9: 0.195710173 0.7457273717
#> 
#> $SampleSummary
#>     Cohort SampleSize
#> 1: Primary        124
#> 2: Relapse         58

9.6.1 Forest plots 森林图

以上结果显示两个基因PML和RARA在复发性APL中较原发性APL高度突变。我们可以将这些结果可视化为 forestplot森林图。

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

9.6.2 Co-onco plots

显示上述结果的另一种替代方式是并排绘制两个oncoplots。coOncoplot函数获取两个maf对象并并排打印,以便更好地进行比较。

genes = c("PML", "RARA", "RUNX1", "ARID1B", "FLT3")
coOncoplot(m1 = primary.apl, m2 = relapse.apl, m1Name = 'PrimaryAPL', m2Name = 'RelapseAPL', genes = genes, removeNonMutated = TRUE)
image.png

9.6.3 Lollipop plot-2棒棒糖图

以及显示队列差异的曲线图,也可以用lollipopPlot2函数显示基因差异。

lollipopPlot2(m1 = primary.apl, m2 = relapse.apl, gene = "PML", AACol1 = "amino_acid_change", AACol2 = "amino_acid_change", m1_name = "Primary", m2_name = "Relapse")
#>    HGNC refseq.ID protein.ID aa.length
#> 1:  PML NM_033238  NP_150241       882
#> 2:  PML NM_002675  NP_002666       633
#> 3:  PML NM_033249  NP_150252       585
#> 4:  PML NM_033247  NP_150250       435
#> 5:  PML NM_033239  NP_150242       829
#> 6:  PML NM_033250  NP_150253       781
#> 7:  PML NM_033240  NP_150243       611
#> 8:  PML NM_033244  NP_150247       560
#> 9:  PML NM_033246  NP_150249       423
#>    HGNC refseq.ID protein.ID aa.length
#> 1:  PML NM_033238  NP_150241       882
#> 2:  PML NM_002675  NP_002666       633
#> 3:  PML NM_033249  NP_150252       585
#> 4:  PML NM_033247  NP_150250       435
#> 5:  PML NM_033239  NP_150242       829
#> 6:  PML NM_033250  NP_150253       781
#> 7:  PML NM_033240  NP_150243       611
#> 8:  PML NM_033244  NP_150247       560
#> 9:  PML NM_033246  NP_150249       423
image.png

参考学习资料:http://127.0.0.1:25995/library/maftools/doc/maftools.html
昨天只学习了前9节,其实第9节还没能学习完,9.7 Clinical enrichment analysis小节开始出现报错还没解决。
不过这次主要还是实验改进Rmarkdown报表的。表头做如下修改:

---
title: "maftools_1"
author: "clp"
date: "`r format(Sys.time(), '%d %B, %Y')`"
output: 
  html_document: 
    highlight: haddock
    toc: yes
    toc_depth: 6
    toc_float: yes
---
image.png
image.png

最近在跟着生信技能树的曾老师的免费公开课学习百度李教授的那篇3000万的papper的图表复现,有兴趣的朋友记得来一起听课​:

“跟着百度李彦宏学习肿瘤基因测序数据分析”群的钉钉群号: 33122139
进群以后可以先看下周四的文献解读录播课,然后正式的图表复现从今天晚上(2020-05-30)开始哦!​

你可能感兴趣的:(2020-05-30 学习maftools : 可视化分析SNV)