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对象传递给所需的函数进行绘图或分析。
6 读取并初步探索maf文件
6.1 Required input files
- MAF文件-可以
.gz
压缩文件,必需输入文件。 - 与MAF中的
每个样本/Tumor_Sample_Barcode
相关的可选但推荐的临床数据。 - 可选的copy number数据(如果可用)。可以是
GISTIC
输出格式,也可以是包含sample names, gene names 和 copy-number status (Amp
orDel
)。
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)
7.2 Oncoplots瀑布图
7.2.1 Drawing oncoplots
可以将maf文件更好地表示为附图,也称为瀑布图。侧方条形图和顶部条形图可以分别由draRowBar
和draColBar
参数控制。
#oncoplot for top ten mutated genes.
oncoplot(maf = laml, top = 10)
注:标记为
Multi_Hit
的变异是指在同一样本中发生多次突变的基因。 有关自定义的更多详细信息,请参阅自定义专题图小节。
7.3 Oncostrip
我们可以使用oncostrip
函数可视化任何一组基因,该函数在每个样本中绘制突变,类似于cBioPortal上的OncoPrinter工具。oncostrip
可用于使用top
或gene
参数绘制任意数量的基因。
oncostrip(maf = laml, genes = c('DNMT3A','NPM1', 'RUNX1'))
7.4转换和颠倒
titv
函数将SNP分类为 Transitions and Transversions ,并以各种方式返回汇总表的列表。汇总的数据还可以可视化为显示六个不同转换的总体分布的boxplot图,以及显示每个样本中的转换分数的堆叠条形图。
laml.titv = titv(maf = laml, plot = FALSE, useSyn = TRUE)
#plot titv summary
plotTiTv(res = laml.titv)
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
请注意,
lollipopPlot
警告用户针对给定基因的不同转录本的可用性。如果我们事先知道转录本ID,我们可以将其指定为refSeqID
或protein ID
。默认情况下,lollipopPlot
使用较长的转录本。
7.5.1 Labelling points.
我们还可以使用参数labelPos
标记lollipopPlot
上的点。如果labelPos
设置为all
,则所有点都会高亮显示。
lollipopPlot(maf = laml, gene = 'KIT', AACol = 'Protein_Change', labelPos = 816, refSeqID = 'NM_000222')
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
“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')
7.8 Plotting VAF
此函数将不同的等位基因频率绘制为箱式图,这有助于快速估计顶级突变基因的克隆状态(假设纯样本,克隆基因的平均等位基因频率通常在~50%左右)。
plotVaf(maf = laml, vafCol = 'i_TumorVAF_WU')
7.9 Genecloud
我们可以用geneCloud
函数绘制突变基因的文字云图。每个基因的大小与其突变/变异的样本总数成正比。
geneCloud(input = laml, minMut = 3)
8 处理拷贝数数据。
8.1.读取并汇总gistic
输出文件。
我们可以汇总GISTIC
程序生成的输出文件。如前所述,我们需要GISTIC
生成的四个文件,即all_lesions.conf_XX.txt
、amp_genes.conf_XX.txt
、del_genes.conf_XX.txt
和scores.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的方法有getSampleSummary
、getGeneSummary
和getCytoBandSummary
。可以使用write.Gistic Summary
函数将汇总结果写入输出文件。 ### 8.2可视化GISTIC结果。 有三种类型的曲线图可用于可视化GISTIC结果。 #### 8.2.1基因组图
gisticChromPlot(gistic = laml.gistic, markBands = "all")
8.2.2 Bubble plot
gisticBubblePlot(gistic = laml.gistic)
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)
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
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))
#> 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)
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
#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
#> 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
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
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)
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)
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
参考学习资料: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
---
最近在跟着生信技能树的曾老师的免费公开课学习百度李教授的那篇3000万的papper的图表复现,有兴趣的朋友记得来一起听课:
“跟着百度李彦宏学习肿瘤基因测序数据分析”群的钉钉群号: 33122139
进群以后可以先看下周四的文献解读录播课,然后正式的图表复现从今天晚上(2020-05-30)开始哦!