With advances in Cancer Genomics, Mutation Annotation Format (MAF) is being widely accepted and used to store somatic variants detected. The Cancer Genome Atlas Project has sequenced over 30 different cancers with sample size of each cancer type being over 200. Resulting data consisting of somatic variants are stored in the form of Mutation Annotation Format. This package attempts to summarize, analyze, annotate and visualize MAF files in an efficient manner from either TCGA sources or any in-house studies as long as the data is in MAF format.
If you find this tool useful, please cite:
Mayakonda A, Lin DC, Assenov Y, Plass C, Koeffler HP. 2018. Maftools: efficient and comprehensive analysis of somatic variants in cancer. Genome Resarch
MAF files contain many fields ranging from chromosome names to cosmic annotations. However most of the analysis in maftools uses following fields.
Mandatory fields: Hugo_Symbol, Chromosome, Start_Position, End_Position, Reference_Allele, Tumor_Seq_Allele2, Variant_Classification, Variant_Type and Tumor_Sample_Barcode.
Recommended optional fields: non MAF specific fields containing VAF (Variant Allele Frequecy) and amino acid change information.
Complete specification of MAF files can be found on NCI GDC documentation page.
This vignette demonstrates the usage and application of maftools on an example MAF file from TCGA LAML cohort 1.
maftools functions can be categorized into mainly Visualization and Analysis modules. Each of these functions and a short description is summarized as shown below. Usage is simple, just read your MAF file with read.maf
(along with copy-number data if available) and pass the resulting MAF object to the desired function for plotting or analysis.
Amp
or Del
).read.maf
function reads MAF files, summarizes it in various ways and stores it as an MAF object. Even though MAF file is alone enough, it is recommended to provide annotations associated with samples in MAF. One can also integrate copy number data if available.
#path to TCGA LAML MAF file
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.409s elapsed (1.075s cpu)
Summarized MAF file is stored as an MAF object. MAF object contains main maf file, summarized data and any associated sample annotations.
There are accessor methods to access the useful slots from MAF object.
## 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
## 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
## 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
## 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
## [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"
We can use plotmafSummary
to plot the summary of the maf file, which displays number of variants in each sample as a stacked barplot and variant types as a boxplot summarized by Variant_Classification. We can add either mean or median line to the stacked barplot to display average/median number of variants across the cohort.
Better representation of maf file can be shown as oncoplots, also known as waterfall plots. Side barplot and top barplots can be controlled by drawRowBar
and drawColBar
arguments respectively.
NOTE: Variants annotated as Multi_Hit
are those genes which are mutated more than once in the same sample.
For more details on customisation see the Customizing oncoplots vignette.
We can visualize any set of genes using oncostrip
function, which draws mutations in each sample similar to OncoPrinter tool on cBioPortal. oncostrip
can be used to draw any number of genes using top
or genes
arguments.
titv
function classifies SNPs into Transitions and Transversions and returns a list of summarized tables in various ways. Summarized data can also be visualized as a boxplot showing overall distribution of six different conversions and as a stacked barplot showing fraction of conversions in each sample.
Lollipop plots are simple and most effective way showing mutation spots on protein structure. Many oncogenes have a preferential sites which are mutated more often than any other locus. These spots are considered to be mutational hot-spots and lollipop plots can be used to display them along with rest of the mutations. We can draw such plots using the function lollipopPlot
. This function requires us to have amino acid changes information in the maf file. However MAF files have no clear guidelines on naming the field for amino acid changes, with different studies having different field (or column) names for amino acid changes. By default, lollipopPlot
looks for column AAChange
, and if its not found in the MAF file, it prints all available fields with a warning message. For below example, MAF file contains amino acid changes under a field/column name ‘Protein_Change’. We will manually specify this using argument AACol
. This function also returns the plot as a ggplot object, which user can later modify if needed.
#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)
## 3 transcripts available. Use arguments refSeqID or proteinID to manually specify tx name.
## 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
## Using longer transcript NM_175629 for now.
## Removed 3 mutations for which AA position was not available
Note that lollipopPlot
warns user on availability of different transcripts for the given gene. If we know the transcript id before hand, we can specify it as refSeqID
or proteinID
. By default lollipopPlot uses the longer isoform.
We can also label points on the lollipopPlot
using argument labelPos
. If labelPos
is set to ‘all’, all of the points are highlighted.
Cancer genomes, especially solid tumors are characterized by genomic loci with localized hyper-mutations 5. Such hyper mutated genomic regions can be visualized by plotting inter variant distance on a linear genomic scale. These plots generally called rainfall plots and we can draw such plots using rainfallPlot
. If detectChangePoints
is set to TRUE, rainfall
plot also highlights regions where potential changes in inter-event distances are located.
brca <- system.file("extdata", "brca.maf.gz", package = "maftools")
brca = read.maf(maf = brca, verbose = FALSE)
## Processing TCGA-A8-A08B..
## Kataegis detected at:
## 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” are defined as those genomic segments containing six or more consecutive mutations with an average inter-mutation distance of less than or equal to 1,00 bp 5.
TCGA contains over 30 different cancer cohorts and median mutation load across them varies from as low as 7 per exome (Pheochromocytoma and Paraganglioma arising from Adrenal Gland) to as high as 315 per exome (Skin Cutaneoys Melanoma). It is informative to see how mutation load in given maf stands against TCGA cohorts. This can can be achieved with the function tcgaComapre
which draws distribution of variants compiled from over 10,000 WXS samples across 33 TCGA landmark cohorts. Plot generated is similar to the one described in Alexandrov et al 5.
This function plots Variant Allele Frequencies as a boxplot which quickly helps to estimate clonal status of top mutated genes (clonal genes usually have mean allele frequency around ~50% assuming pure sample)
We can plot word cloud plot for mutated genes with the function geneCloud
. Size of each gene is proportional to the total number of samples in which it is mutated/altered.
We can summarize output files generated by GISTIC programme. As mentioned earlier, we need four files that are generated by GISTIC, i.e, all_lesions.conf_XX.txt, amp_genes.conf_XX.txt, del_genes.conf_XX.txt and scores.gistic, where XX is the confidence level. See GISTIC documentation for details.
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
## 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
Similar to MAF objects, there are methods available to access slots of GISTIC object - getSampleSummary
, getGeneSummary
and getCytoBandSummary
. Summarized results can be written to output files using function write.GisticSummary
.
There are three types of plots available to visualize gistic results.
This is similar to oncoplots except for copy number data. One can again sort the matrix according to annotations, if any. Below plot is the gistic results for LAML, sorted according to FAB classification. Plot shows that 7q deletions are virtually absent in M4 subtype where as it is widespread in other subtypes.
tcga.ab.009.seg <- system.file("extdata", "TCGA.AB.3009.hg19.seg.txt", package = "maftools")
plotCBSsegments(cbsFile = tcga.ab.009.seg)
## NULL
Many disease causing genes in cancer are co-occurring or show strong exclusiveness in their mutation pattern. Such mutually exclusive or co-occurring set of genes can be detected using somaticInteractions
function, which performs pair-wise Fisher’s Exact test to detect such significant pair of genes. somaticInteractions
function also uses cometExactTest
to identify potentially altered gene sets involving >2 two genes 6.
#exclusive/co-occurance event analysis on top 10 mutated genes.
somaticInteractions(maf = laml, top = 25, pvalue = c(0.05, 0.1))
## Checking for Gene sets
## ------------------
## genes: 5
## geneset size: 3
## 10 combinations
## $pairs
## 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
## 6: DNMT3A NPM1 0.0014582861 3.733141 128 16 17 32 Co_Occurence
## 7: IDH1 DNMT3A 0.0033807043 4.462201 137 10 38 8 Co_Occurence
## 8: ASXL1 TTN 0.0077607658 28.459418 184 2 4 3 Co_Occurence
## 9: PHF6 RUNX1 0.0081059811 12.967042 174 3 13 3 Co_Occurence
## 10: TTN RUNX1 0.0081059811 12.967042 174 3 13 3 Co_Occurence
## 11: FLT3 TP53 0.0125113481 0.000000 126 NA 15 52 Mutually_Exclusive
## 12: STAG2 PTPN11 0.0263964643 12.391225 180 2 7 4 Co_Occurence
## 13: IDH2 NPM1 0.0277733049 0.000000 140 NA 33 20 Mutually_Exclusive
## 14: IDH2 KRAS 0.0382620610 5.832674 168 3 5 17 Co_Occurence
## 15: WT1 PHF6 0.0463612252 8.623360 177 2 4 10 Co_Occurence
## 16: NPM1 PTPN11 0.0479288542 4.230142 155 4 5 29 Co_Occurence
## 17: IDH2 PLCE1 0.0540565743 9.280043 171 2 2 18 Co_Occurence
## 18: DNMT3A FLT3 0.0630630121 1.951476 111 18 34 30 Co_Occurence
## 19: NPM1 SMC1A 0.0635083207 5.167266 157 3 3 30 Co_Occurence
## 20: CEBPA NRAS 0.0678045968 4.149259 168 3 12 10 Co_Occurence
## 21: RUNX1 FLT3 0.0740850163 0.165692 126 1 51 15 Mutually_Exclusive
## 22: EZH2 FAM5C 0.0761095136 21.701827 186 1 4 2 Co_Occurence
## 23: TP53 NPM1 0.0785739379 0.000000 145 NA 33 15 Mutually_Exclusive
## 24: NPM1 RUNX1 0.0787933378 0.000000 144 NA 16 33 Mutually_Exclusive
## 25: RUNX1 STAG2 0.0795738073 6.066792 173 2 4 14 Co_Occurence
## 26: STAG2 TET2 0.0888875052 5.638415 172 2 15 4 Co_Occurence
## 27: IDH1 NPM1 0.0914621351 2.722302 148 6 27 12 Co_Occurence
## 28: RAD21 DNMT3A 0.0993846041 4.719039 143 3 45 2 Co_Occurence
## gene1 gene2 pValue oddsRatio 00 11 01 10 Event
##
## $gene_sets
## Empty data.table (0 rows and 2 cols): gene_set,pvalue
We can visualize the above results using oncostrip
. For example, in above analysis, gene set TP53, FLT3 and RUNX1 show a strong exclusiveness with each other a p-value of 4.8e-5.
maftools has a function oncodrive
which identifies cancer genes (driver) from a given MAF. oncodrive
is a based on algorithm oncodriveCLUST which was originally implemented in Python. Concept is based on the fact that most of the variants in cancer causing genes are enriched at few specific loci (aka hot-spots). This method takes advantage of such positions to identify cancer genes. If you use this function, please cite OncodriveCLUST article 7.
laml.sig = oncodrive(maf = laml, AACol = 'Protein_Change', minMut = 5, pvalMethod = 'zscore')
head(laml.sig)
We can plot the results using plotOncodrive
.
plotOncodrive
plots the results as scatter plot with size of the points proportional to the number of clusters found in the gene. X-axis shows number of mutations (or fraction of mutations) observed in these clusters. In the above example, IDH1 has a single cluster and all of the 18 mutations are accumulated within that cluster, giving it a cluster score of one. For details on oncodrive algorithm, please refer to OncodriveCLUST article 7.
maftools comes with the function pfamDomains
, which adds pfam domain information to the amino acid changes. pfamDomain
also summarizes amino acid changes according to the domains that are affected. This serves the purpose of knowing what domain in given cancer cohort, is most frequently affected. This function is inspired from Pfam annotation module from MuSic tool 8.
## 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 <NA>
## 1513: ZNF687 554 Missense_Mutation 1 2 0.5000000 <NA>
## 1514: ZNF687 363 Missense_Mutation 1 2 0.5000000 <NA>
## 1515: ZNF75D 5 Missense_Mutation 1 1 1.0000000 <NA>
## 1516: ZNF827 427 Frame_Shift_Del 1 1 1.0000000 <NA>
#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
Above plot and results shows AdoMet_MTases domain is frequently mutated, but number genes with this domain is just one (DNMT3A) compared to other domains such as 7tm_1 domain, which is mutated across 24 different genes. This shows the importance of mutations in methyl transfer domains in Leukemia.
Lawrence et al performed MutSigCV analysis on 21 cancer cohorts and identified over 200 genes to be significantly mutated which consists of previously un-subscribed novel genes 9. Their results show only few genes are mutated in multiple cohort while many of them are tissue/cohort specific. We can compare mutSig results against this pan-can list of significantly mutated genes to see genes specifically mutated in given cohort. This function requires MutSigCV results (usually named sig_genes.txt) as an input.
#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)
## Significantly mutated genes in LAML (q < 0.1): 23
## Significantly mutated genes in PanCan cohort (q <0.1): 114
## Significantly mutated genes exclusive to LAML (q < 0.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
Above results show genes such as CEBPa, TET2 and WT1 are specifically mutated in Leukemia.
Survival analysis is an essential part of cohort based sequencing projects. Function mafSurvive
performs survival analysis and draws kaplan meier curve by grouping samples based on mutation status of user defined gene(s) or manually provided samples those make up a group. This function requires input data to contain Tumor_Sample_Barcode (make sure they match to those in MAF file), binary event (1/0) and time to event.
Our annotation data already contains survival information and in case you have survival data stored in a separate table provide them via argument clinicalData
#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)
## Looking for clinical data in annoatation slot of MAF..
## Number of mutated samples for given genes:
## DNMT3A
## 48
## Median survival..
## Group medianTime N
## 1: Mutant 243 48
## 2: WT 366 145
Cancers differ from each other in terms of their mutation pattern. We can compare two different cohorts to detect such differentially mutated genes. For example, recent article by Madan et. al 9, have shown that patients with relapsed APL (Acute Promyelocytic Leukemia) tends to have mutations in PML and RARA genes, which were absent during primary stage of the disease. This difference between two cohorts (in this case primary and relapse APL) can be detected using function mafComapre
, which performs fisher test on all genes between two cohorts to detect differentially mutated genes.
#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)
#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
## 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
Above results show two genes PML and RARA which are highly mutated in Relapse APL compared to Primary APL. We can visualize these results as a forestplot.
Another alternative way of displaying above results is by plotting two oncoplots side by side. coOncoplot
function takes two maf objects and plots them side by side for better comparison.
Along with plots showing cohort wise differences, its also possible to show gene wise differences with lollipopPlot2
function.
clinicalEnrichment
is another function which takes any clinical feature associated with the samples and performs enrichment analysis. It performs various groupwise and pairwise comparisions to identify enriched mutations for every category within a clincila feature. Below is an example to identify mutations associated with FAB_classification.
## Sample size per factor in FAB_classification:
##
## M0 M1 M2 M3 M4 M5 M6 M7
## 19 44 44 21 39 19 3 3
#Results are returned as a list. Significant associations p-value < 0.05
fab.ce$groupwise_comparision[p_value < 0.05]
## Hugo_Symbol Group1 Group2 n_mutated_group1 n_mutated_group2
## 1: IDH1 M1 Rest 11 of 44 7 of 149
## 2: TP53 M7 Rest 3 of 3 12 of 190
## 3: DNMT3A M5 Rest 10 of 19 38 of 174
## 4: CEBPA M2 Rest 7 of 44 6 of 149
## 5: RUNX1 M0 Rest 5 of 19 11 of 174
## 6: NPM1 M5 Rest 7 of 19 26 of 174
## 7: CEBPA M1 Rest 6 of 44 7 of 149
## p_value OR_low OR_high fdr
## 1: 0.0002597371 0 0.3926994 0.0308575
## 2: 0.0003857187 0 0.1315271 0.0308575
## 3: 0.0057610493 0 0.6406007 0.3072560
## 4: 0.0117352110 0 0.6874270 0.3757978
## 5: 0.0117436825 0 0.6466787 0.3757978
## 6: 0.0248582372 0 0.8342897 0.6628863
## 7: 0.0478737468 0 0.9869971 1.0000000
Above results shows IDH1 mutations are enriched in M1 subtype of leukemia compared to rest of the cohort. Similarly DNMT3A is in M5, RUNX1 is in M0, and so on. These are well known results and this function effectively recaptures them. One can use any sort of clincial feature to perform such an analysis. There is also a small function - plotEnrichmentResults
which can be used to plot these results.
drugInteractions
function checks for drug–gene interactions and gene druggability information compiled from Drug Gene Interaction database.
Above plot shows potential druggable gene categories along with upto top 5 genes involved in them. One can also extract information on drug-gene interactions. For example below is the results for known/reported drugs to interact with DNMT3A.
## Number of claimed drugs for given genes:
## Gene N
## 1: DNMT3A 7
## Gene interaction_types drug_name drug_claim_name
## 1: DNMT3A N/A
## 2: DNMT3A DAUNORUBICIN Daunorubicin
## 3: DNMT3A DECITABINE Decitabine
## 4: DNMT3A IDARUBICIN IDARUBICIN
## 5: DNMT3A DECITABINE DECITABINE
## 6: DNMT3A inhibitor DECITABINE CHEMBL1201129
## 7: DNMT3A inhibitor AZACITIDINE CHEMBL1489
Please cite DGIdb article if you find this function useful 10.
Disclaimer: Resources used in this function are intended for purely research purposes. It should not be used for emergencies or medical or professional advice.
OncogenicPathways
function checks for enrichment of known Oncogenic Signaling Pathways in TCGA cohorts 11.
## Pathway alteration fractions
## Pathway N n_affected_genes fraction_affected
## 1: RTK-RAS 85 18 0.21176471
## 2: Hippo 38 7 0.18421053
## 3: NOTCH 71 6 0.08450704
## 4: MYC 13 3 0.23076923
## 5: WNT 68 3 0.04411765
## 6: TP53 6 2 0.33333333
## 7: NRF2 3 1 0.33333333
## 8: PI3K 29 1 0.03448276
## 9: Cell_Cycle 15 0 0.00000000
## 10: TGF-Beta 7 0 0.00000000
Its also possible to visualize complete pathway.
Tumor suppressor genes are in red, and oncogenes are in blue font.
Tumors are generally heterogeneous i.e, consist of multiple clones. This heterogeneity can be inferred by clustering variant allele frequencies. inferHeterogeneity
function uses vaf information to cluster variants (using mclust
), to infer clonality. By default, inferHeterogeneity
function looks for column t_vaf containing vaf information. However, if the field name is different from t_vaf, we can manually specify it using argument vafCol
. For example, in this case study vaf is stored under the field name i_TumorVAF_WU.
#Heterogeneity in sample TCGA.AB.2972
tcga.ab.2972.het = inferHeterogeneity(maf = laml, tsb = 'TCGA-AB-2972', vafCol = 'i_TumorVAF_WU')
## Processing TCGA-AB-2972..
## Tumor_Sample_Barcode cluster meanVaf
## 1: TCGA-AB-2972 2 0.4496571
## 2: TCGA-AB-2972 1 0.2454750
## 3: TCGA-AB-2972 outlier 0.3695000
Above figure shows clear separation of two clones clustered at mean variant allele frequencies of ~45% (major clone) and another minor clone at variant allele frequency of ~25%.
Although clustering of variant allele frequencies gives us a fair idea on heterogeneity, it is also possible to measure the extent of heterogeneity in terms of a numerical value. MATH score (mentioned as a subtitle in above plot) is a simple quantitative measure of intra-tumor heterogeneity, which calculates the width of the vaf distribution. Higher MATH scores are found to be associated with poor outcome. MATH score can also be used a proxy variable for survival analysis 11.
We can use copy number information to ignore variants located on copy-number altered regions. Copy number alterations results in abnormally high/low variant allele frequencies, which tends to affect clustering. Removing such variants improves clustering and density estimation while retaining biologically meaningful results. Copy number information can be provided as a segmented file generated from segmentation programmes, such as Circular Binary Segmentation from “DNACopy” Bioconductor package 6.
seg = system.file('extdata', 'TCGA.AB.3009.hg19.seg.txt', package = 'maftools')
tcga.ab.3009.het = inferHeterogeneity(maf = laml, tsb = 'TCGA-AB-3009', segFile = seg, vafCol = 'i_TumorVAF_WU')
## Processing TCGA-AB-3009..
## Removed 1 variants with no copy number data.
## Hugo_Symbol Chromosome Start_Position End_Position Tumor_Sample_Barcode
## 1: PHF6 23 133551224 133551224 TCGA-AB-3009
## t_vaf Segment_Start Segment_End Segment_Mean CN
## 1: 0.9349112 NA NA NA NA
## Copy number altered variants:
## Hugo_Symbol Chromosome Start_Position End_Position Tumor_Sample_Barcode
## 1: NF1 17 29562981 29562981 TCGA-AB-3009
## 2: SUZ12 17 30293198 30293198 TCGA-AB-3009
## t_vaf Segment_Start Segment_End Segment_Mean CN cluster
## 1: 0.8419000 29054355 30363868 -0.9157 1.060173 CN_altered
## 2: 0.8958333 29054355 30363868 -0.9157 1.060173 CN_altered
#Visualizing results. Highlighting those variants on copynumber altered variants.
plotClusters(clusters = tcga.ab.3009.het, genes = 'CN_altered', showCNvars = TRUE)
Above figure shows two genes NF1 and SUZ12 with high VAF’s, which is due to copy number alterations (deletion). Those two genes are ignored from analysis.
Every cancer, as it progresses leaves a signature characterized by specific pattern of nucleotide substitutions. Alexandrov et.al have shown such mutational signatures, derived from over 7000 cancer samples 5. Such signatures can be extracted by decomposing matrix of nucleotide substitutions, classified into 96 substitution classes based on immediate bases surrounding the mutated base. Extracted signatures can also be compared to those validated signatures.
First step in signature analysis is to obtain the adjacent bases surrounding the mutated base and form a mutation matrix. NOTE: Earlier versions of maftools required a fasta file as an input. But starting from 1.8.0, BSgenome objects are used for faster sequence extraction.
##
## Attaching package: 'S4Vectors'
## The following object is masked from 'package:base':
##
## expand.grid
##
## Attaching package: 'Biostrings'
## The following object is masked from 'package:base':
##
## strsplit
## Warning in trinucleotideMatrix(maf = laml, prefix = "chr", add = TRUE, ref_genome = "BSgenome.Hsapiens.UCSC.hg19"): Chromosome names in MAF must match chromosome names in reference genome.
## Ignorinig 101 single nucleotide variants from missing chromosomes chr23
## -Extracting 5' and 3' adjacent bases
## -Extracting +/- 20bp around mutated bases for background C>T estimation
## -Estimating APOBEC enrichment scores
## --Performing one-way Fisher's test for APOBEC enrichment
## ---APOBEC related mutations are enriched in 3.315 % of samples (APOBEC enrichment score > 2 ; 6 of 181 samples)
## -Creating mutation matrix
## --matrix of dimension 188x96
Above function performs two steps:
APOBEC induced mutations are more frequent in solid tumors and are mainly associated with C>T transition events occurring in TCW motif. APOBEC enrichment scores in the above command are estimated using the method described by Roberts et al 13. Briefly, enrichment of C>T mutations occurring within TCW motif over all of the C>T mutations in a given sample is compared to background Cytosines and TCWs occurring within 20bp of mutated bases.
\[\frac{n_{tCw} * background_C}{n_C * background_{TCW}}\]
One-sided fishers exact test is also performed to statistically evaluate the enrichment score, as described in original study by Roberts et al.
We can also analyze the differences in mutational patterns between APOBEC enriched and non-APOBEC enriched samples. plotApobecDiff
is a function which takes APOBEC enrichment scores estimated by trinucleotideMatrix
and classifies samples into APOBEC enriched and non-APOBEC enriched. Once stratified, it compares these two groups to identify differentially altered genes.
Note that, LAML with no APOBEC enrichments, is not an ideal cohort for this sort of analysis and hence below plot is only for demonstration purpose.
## $results
## Hugo_Symbol Enriched nonEnriched pval or ci.up
## 1: TP53 2 13 0.08175632 5.9976455 46.608861
## 2: TET2 1 16 0.45739351 1.9407002 18.983979
## 3: FLT3 2 45 0.65523131 1.4081851 10.211621
## 4: DNMT3A 1 47 1.00000000 0.5335362 4.949499
## 5: ADAM11 0 2 1.00000000 0.0000000 164.191472
## ---
## 132: WAC 0 2 1.00000000 0.0000000 164.191472
## 133: WT1 0 12 1.00000000 0.0000000 12.690862
## 134: ZBTB33 0 2 1.00000000 0.0000000 164.191472
## 135: ZC3H18 0 2 1.00000000 0.0000000 164.191472
## 136: ZNF687 0 2 1.00000000 0.0000000 164.191472
## ci.low adjPval
## 1: 0.49875432 1
## 2: 0.03882963 1
## 3: 0.12341748 1
## 4: 0.01101929 1
## 5: 0.00000000 1
## ---
## 132: 0.00000000 1
## 133: 0.00000000 1
## 134: 0.00000000 1
## 135: 0.00000000 1
## 136: 0.00000000 1
##
## $SampleSummary
## Cohort SampleSize Mean Median
## 1: Enriched 6 7.167 6.5
## 2: nonEnriched 172 9.715 9.0
extractSignatures
uses non-negative matrix factorization to decompose nx96 dimension matrix into r signatures, where n is the number of samples from input MAF 11. By default function runs nmf on 6 ranks and chooses the best possible value based on maximum cophenetic-correlation coefficient. It is also possible to manually specify r. Once decomposed, signatures are compared against known signatures derived from Alexandrov et.al, and cosine similarity is calculated to identify best match.
#Run main function with maximum 6 signatures.
library('NMF')
laml.sign = extractSignatures(mat = laml.tnm, nTry = 6, plotBestFitRes = FALSE)
## -Running NMF for factorization rank: 2
## -Comparing against COSMIC signatures
## ------------------------------------
## --Found Signature_1 most similar COSMIC Signature_1.
## Aetiology: spontaneous deamination of 5-methylcytosine [cosine-similarity: 0.919]
## --Found Signature_2 most similar COSMIC Signature_5.
## Aetiology: Unknown [cosine-similarity: 0.82]
## ------------------------------------
## -Finished in 3.631s elapsed (3.426s cpu)
extractSignatures
gives a warning that no mutations are found for class A[T>G]C conversions. This is possible when the number of samples are low or in tumors with low mutation rate, such as in this case of Leukemia. In this scenario, a small positive value is added to avoid computational difficulties. It also prints other statistics for range of values that was tried, and chooses the rank with highest cophenetic metric (for above example r=2). Above stats should give an estimate of range of best possible r values and in case the chosen r is overfitted/underfitted, it is also possible to be re-run extractSignatures
by manually specifying r.
Once decomposed, signatures are compared against known and validated signatures from Sanger 11. See here for list of validated signatures. In the above example, 2 signatures are derived, which are similar to validated Signature-1 and Signature-5. Signature_1 is a result of elevated rate of spontaneous deamination of 5-methyl-cytosine, resulting in C>T transitions and predominantly occurs at NpCpG trinucleotide, which is a most common process in AML 12.
Full table of cosine similarities against validated signatures are also returned, which can be further analysed. Below plot shows comparison of similarities of detected signatures against validated signatures.
library('pheatmap')
pheatmap::pheatmap(mat = laml.sign$coSineSimMat, cluster_rows = FALSE, main = "cosine similarity against validated signatures")
NOTE: Should you receive an error while running extractSignatures
complaining none of the packages are loaded
, please manually load the “NMF” library and re-run.
Signatures can further be assigned to samples and enrichment analysis can be performd using signatureEnrichment
funtion, which identifies mutations enriched in every signature identified.
## Running k-means for signature assignment..
## Performing pairwise and groupwise comparisions..
## Sample size per factor in Signature:
##
## Signature_1 Signature_2
## 80 108
## Estimating mutation load and signature exposures..
Above results can be visualzied similar to clinical enrichments.
We can also annotate variants using oncotator API 14. oncotate
function quires oncotator web api to annotate given set of variants and converts them into MAF format. Input should be a five column file with chr, start, end, ref_allele, alt_allele. However, it can contain other information such as sample names (Tumor_Sample_Barcode), read counts, vaf information and so on, but only first five columns will be used, rest of the columns will be attached at the end of the table.
var.file = system.file('extdata', 'variants.tsv', package = 'maftools')
#This is what input looks like
var = read.delim(var.file, sep = '\t')
head(var)
## chromsome start end ref alt Tumor_Sample_Barcode
## 1 chr4 55589774 55589774 A G fake_1
## 2 chr4 55599321 55599321 A T fake_2
## 3 chr4 55599332 55599332 G T fake_3
## 4 chr4 55599320 55599320 G T fake_4
## 5 chr15 41961117 41961123 TGGCTAA - fake_4
## 6 chr4 55599320 55599320 G T fake_5
NOTE: This is quite time consuming if input is big.
Annovar is one of the most widely used Variant Annotation tool in Genomics 17. Annovar output is generally in a tabular format with various annotation columns. This function converts such annovar output files into MAF. This function requires that annovar was run with gene based annotation as a first operation, before including any filter or region based annotations.
e.g,
annovarToMaf
mainly uses gene based annotations for processing, rest of the annotation columns from input file will be attached to the end of the resulting MAF.
As an example we will annotate the same file which was used above to run oncotate
function. We will annotate it using annovar with the following command. For simplicity, here we are including only gene based annotations but one can include as many annotations as they wish. But make sure the fist operation is always gene based annotation.
$perl table_annovar.pl variants.tsv ~/path/to/humandb/ -buildver hg19
-out variants --otherinfo -remove -protocol ensGene -operation g -nastring NA
Output generated is stored as a part of this package. We can convert this annovar output into MAF using annovarToMaf
.
var.annovar = system.file("extdata", "variants.hg19_multianno.txt", package = "maftools")
var.annovar.maf = annovarToMaf(annovar = var.annovar, Center = 'CSI-NUS', refBuild = 'hg19',
tsbCol = 'Tumor_Sample_Barcode', table = 'ensGene')
## -Reading annovar files
## -Processing Exonic variants
## --Adding Variant_Classification
## --Parsing aa-change
## -Processing Non-exonic variants
## --Adding Variant_Classification
## -Adding Variant_Type
## -Converting Ensemble Gene IDs into HGNC gene symbols
## Registered S3 method overwritten by 'R.oo':
## method from
## throw.default R.methodsS3
## --Done. Original ensemble gene IDs are preserved under field name ens_id
## Finished in 0.226s elapsed (0.533s cpu)
Annovar, when used with Ensemble as a gene annotation source, uses ensemble gene IDs as Gene names. In that case, use annovarToMaf
with argument table
set to ensGene
which converts ensemble gene IDs into HGNC symbols.
Just like TCGA, International Cancer Genome Consortium ICGC also makes its data publicly available. But the data are stored in Simpale Somatic Mutation Format, which is similar to MAF format in its structure. However field names and classification of variants is different from that of MAF. icgcSimpleMutationToMAF
is a function which reads ICGC data and converts them to MAF.
#Read sample ICGC data for ESCA
esca.icgc <- system.file("extdata", "simple_somatic_mutation.open.ESCA-CN.sample.tsv.gz", package = "maftools")
esca.maf <- icgcSimpleMutationToMAF(icgc = esca.icgc, addHugoSymbol = TRUE)
## Converting Ensemble Gene IDs into HGNC gene symbols.
## Done! Original ensemble gene IDs are preserved under field name ens_id
## --Removed 427 duplicated variants
## Hugo_Symbol Entrez_Gene_Id Center NCBI_Build Chromosome Start_Position
## 1: AC005237.4 NA NA GRCh37 2 241987787
## 2: AC061992.1 786 NA GRCh37 17 76425382
## 3: AC097467.2 NA NA GRCh37 4 156294567
## 4: ADAMTS12 NA NA GRCh37 5 33684019
## 5: AL589642.1 54801 NA GRCh37 9 32630154
## End_Position Strand Variant_Classification Variant_Type
## 1: 241987787 + Intron SNP
## 2: 76425382 + 3'Flank SNP
## 3: 156294567 + Intron SNP
## 4: 33684019 + Missense_Mutation SNP
## 5: 32630154 + RNA SNP
## Reference_Allele Tumor_Seq_Allele1 Tumor_Seq_Allele2 dbSNP_RS
## 1: C C T NA
## 2: C C T NA
## 3: A A G NA
## 4: A A C NA
## 5: T T C NA
## dbSNP_Val_Status Tumor_Sample_Barcode
## 1: NA SA514619
## 2: NA SA514619
## 3: NA SA514619
## 4: NA SA514619
## 5: NA SA514619
Note that by default Simple Somatic Mutation format contains all affected transcripts of a variant resulting in multiple entries of the same variant in same sample. It is hard to choose a single affected transcript based on annotations alone and by default this program removes repeated variants as duplicated entries. If you wish to keep all of them, set removeDuplicatedVariants
to FALSE. Another option is to convert input file to MAF by removing duplicates and then use scripts like vcf2maf to re-annotate and prioritize affected transcripts.
MutSig/MutSigCV is most widely used program for detecting driver genes 18. However, we have observed that covariates files (gene.covariates.txt and exome_full192.coverage.txt) which are bundled with MutSig have non-standard gene names (non Hugo_Symbols). This discrepancy between Hugo_Symbols in MAF and non-Hugo_symbols in covariates file causes MutSig program to ignore such genes. For example, KMT2D - a well known driver gene in Esophageal Carcinoma is represented as MLL2 in MutSig covariates. This causes KMT2D to be ignored from analysis and is represented as an insignificant gene in MutSig results. This function attempts to correct such gene symbols with a manually curated list of gene names compatible with MutSig covariates list.
We can also subset MAF using function subsetMaf
#Extract data for samples 'TCGA.AB.3009' and 'TCGA.AB.2933' (Printing just 5 rows for display convenience)
subsetMaf(maf = laml, tsb = c('TCGA-AB-3009', 'TCGA-AB-2933'), mafObj = FALSE)[1:5]
## Hugo_Symbol Entrez_Gene_Id Center NCBI_Build Chromosome
## 1: ABCB11 8647 genome.wustl.edu 37 2
## 2: ACSS3 79611 genome.wustl.edu 37 12
## 3: ANK3 288 genome.wustl.edu 37 10
## 4: AP1G2 8906 genome.wustl.edu 37 14
## 5: ARC 23237 genome.wustl.edu 37 8
## Start_Position End_Position Strand Variant_Classification Variant_Type
## 1: 169780250 169780250 + Missense_Mutation SNP
## 2: 81536902 81536902 + Missense_Mutation SNP
## 3: 61926581 61926581 + Splice_Site SNP
## 4: 24033309 24033309 + Missense_Mutation SNP
## 5: 143694874 143694874 + Missense_Mutation SNP
## Reference_Allele Tumor_Seq_Allele1 Tumor_Seq_Allele2
## 1: G G A
## 2: C C T
## 3: C C A
## 4: C C T
## 5: C C G
## Tumor_Sample_Barcode Protein_Change i_TumorVAF_WU i_transcript_name
## 1: TCGA-AB-3009 p.A1283V 46.97218 NM_003742.2
## 2: TCGA-AB-3009 p.A266V 47.32510 NM_024560.2
## 3: TCGA-AB-3009 43.99478 NM_020987.2
## 4: TCGA-AB-3009 p.R346Q 47.08000 NM_003917.2
## 5: TCGA-AB-3009 p.W253C 42.96435 NM_015193.3
##Same as above but return output as an MAF object (Default behaviour)
subsetMaf(maf = laml, tsb = c('TCGA-AB-3009', 'TCGA-AB-2933'))
## An object of class MAF
## ID summary Mean Median
## 1: NCBI_Build 37 NA NA
## 2: Center genome.wustl.edu NA NA
## 3: Samples 2 NA NA
## 4: nGenes 34 NA NA
## 5: Frame_Shift_Ins 5 2.5 2.5
## 6: In_Frame_Ins 1 0.5 0.5
## 7: Missense_Mutation 26 13.0 13.0
## 8: Nonsense_Mutation 2 1.0 1.0
## 9: Splice_Site 1 0.5 0.5
## 10: total 35 17.5 17.5
#Select all Splice_Site mutations from DNMT3A and NPM1
subsetMaf(maf = laml, genes = c('DNMT3A', 'NPM1'), mafObj = FALSE,query = "Variant_Classification == 'Splice_Site'")
## Hugo_Symbol Entrez_Gene_Id Center NCBI_Build Chromosome
## 1: DNMT3A 1788 genome.wustl.edu 37 2
## 2: DNMT3A 1788 genome.wustl.edu 37 2
## 3: DNMT3A 1788 genome.wustl.edu 37 2
## 4: DNMT3A 1788 genome.wustl.edu 37 2
## 5: DNMT3A 1788 genome.wustl.edu 37 2
## 6: DNMT3A 1788 genome.wustl.edu 37 2
## Start_Position End_Position Strand Variant_Classification Variant_Type
## 1: 25459874 25459874 + Splice_Site SNP
## 2: 25467208 25467208 + Splice_Site SNP
## 3: 25467022 25467022 + Splice_Site SNP
## 4: 25459803 25459803 + Splice_Site SNP
## 5: 25464576 25464576 + Splice_Site SNP
## 6: 25469029 25469029 + Splice_Site SNP
## Reference_Allele Tumor_Seq_Allele1 Tumor_Seq_Allele2
## 1: C C G
## 2: C C T
## 3: A A G
## 4: A A C
## 5: C C A
## 6: C C A
## Tumor_Sample_Barcode Protein_Change i_TumorVAF_WU i_transcript_name
## 1: TCGA-AB-2818 p.R803S 36.84 NM_022552.3
## 2: TCGA-AB-2822 62.96 NM_022552.3
## 3: TCGA-AB-2891 34.78 NM_022552.3
## 4: TCGA-AB-2898 46.43 NM_022552.3
## 5: TCGA-AB-2934 p.G646V 37.50 NM_022552.3
## 6: TCGA-AB-2968 p.E477* 40.00 NM_022552.3
#Same as above but include only 'i_transcript_name' column in the output
subsetMaf(maf = laml, genes = c('DNMT3A', 'NPM1'), mafObj = FALSE, query = "Variant_Classification == 'Splice_Site'", fields = 'i_transcript_name')
## Hugo_Symbol Chromosome Start_Position End_Position Reference_Allele
## 1: DNMT3A 2 25459874 25459874 C
## 2: DNMT3A 2 25467208 25467208 C
## 3: DNMT3A 2 25467022 25467022 A
## 4: DNMT3A 2 25459803 25459803 A
## 5: DNMT3A 2 25464576 25464576 C
## 6: DNMT3A 2 25469029 25469029 C
## Tumor_Seq_Allele2 Variant_Classification Variant_Type
## 1: G Splice_Site SNP
## 2: T Splice_Site SNP
## 3: G Splice_Site SNP
## 4: C Splice_Site SNP
## 5: A Splice_Site SNP
## 6: A Splice_Site SNP
## Tumor_Sample_Barcode i_transcript_name
## 1: TCGA-AB-2818 NM_022552.3
## 2: TCGA-AB-2822 NM_022552.3
## 3: TCGA-AB-2891 NM_022552.3
## 4: TCGA-AB-2898 NM_022552.3
## 5: TCGA-AB-2934 NM_022552.3
## 6: TCGA-AB-2968 NM_022552.3
There is also an R data package containing pre-compiled TCGA MAF objects from TCGA firehose and TCGA MC3 projects, particularly helpful for those working with TCGA mutation data. Every dataset is stored as an MAF object containing somatic mutations along with clinical information. Due to Bioconductor package size limits and other difficulties, this was not submitted to Bioconductor. However, you can still download TCGAmutations package from GitHub.
## R version 3.6.1 (2019-07-05)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.3 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.9-bioc/R/lib/libRblas.so
## LAPACK: /home/biocbuild/bbs-3.9-bioc/R/lib/libRlapack.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats4 parallel stats graphics grDevices utils datasets
## [8] methods base
##
## other attached packages:
## [1] pheatmap_1.0.12 NMF_0.21.0
## [3] cluster_2.1.0 rngtools_1.4
## [5] pkgmaker_0.27 registry_0.5-1
## [7] BSgenome.Hsapiens.UCSC.hg19_1.4.0 BSgenome_1.52.0
## [9] rtracklayer_1.44.2 Biostrings_2.52.0
## [11] XVector_0.24.0 GenomicRanges_1.36.0
## [13] GenomeInfoDb_1.20.0 IRanges_2.18.1
## [15] S4Vectors_0.22.0 maftools_2.0.16
## [17] bigmemory_4.5.33 Biobase_2.44.0
## [19] BiocGenerics_0.30.0
##
## loaded via a namespace (and not attached):
## [1] splines_3.6.1 foreach_1.4.7
## [3] R.utils_2.9.0 assertthat_0.2.1
## [5] GenomeInfoDbData_1.2.1 Rsamtools_2.0.0
## [7] yaml_2.2.0 pillar_1.4.2
## [9] lattice_0.20-38 glue_1.3.1
## [11] digest_0.6.20 RColorBrewer_1.1-2
## [13] colorspace_1.4-1 R.oo_1.22.0
## [15] htmltools_0.3.6 Matrix_1.2-17
## [17] plyr_1.8.4 XML_3.98-1.20
## [19] pkgconfig_2.0.2 bibtex_0.4.2
## [21] zlibbioc_1.30.0 purrr_0.3.2
## [23] xtable_1.8-4 scales_1.0.0
## [25] BiocParallel_1.18.1 tibble_2.1.3
## [27] ggplot2_3.2.1 withr_2.1.2
## [29] SummarizedExperiment_1.14.1 lazyeval_0.2.2
## [31] survival_2.44-1.1 magrittr_1.5
## [33] crayon_1.3.4 mclust_5.4.5
## [35] evaluate_0.14 R.methodsS3_1.7.1
## [37] doParallel_1.0.15 tools_3.6.1
## [39] data.table_1.12.2 matrixStats_0.54.0
## [41] gridBase_0.4-7 stringr_1.4.0
## [43] munsell_0.5.0 DelayedArray_0.10.0
## [45] compiler_3.6.1 rlang_0.4.0
## [47] grid_3.6.1 RCurl_1.95-4.12
## [49] iterators_1.0.12 bigmemory.sri_0.1.3
## [51] bitops_1.0-6 rmarkdown_1.14
## [53] gtable_0.3.0 codetools_0.2-16
## [55] reshape2_1.4.3 R6_2.4.0
## [57] GenomicAlignments_1.20.1 knitr_1.24
## [59] dplyr_0.8.3 cometExactTest_0.1.5
## [61] stringi_1.4.3 Rcpp_1.0.2
## [63] wordcloud_2.6 tidyselect_0.2.5
## [65] xfun_0.8
If you have any issues, bug reports or feature requests please feel free to raise an issue on GitHub page.
somaticInteractions
plot is inspired from the article Combining gene mutation with gene expression data improves outcome prediction in myelodysplastic syndromes. Thanks to authors for making source code available.