Annotation and the MAF file
The VCF from FilterMutectCalls only says that a C became a T at some position on some chromosome. Knowing which gene it hits and which amino acid it changes takes annotation. The annotated calls are then collected into a MAF, a table with one mutation per row, and every cohort analysis that follows starts from it.
From a position to the protein: what a variant does
In a coding exon every three bases form a codon for one amino acid. A variant can:
- swap in a different amino acid: missense;
- create a stop codon and cut the protein short: nonsense;
- leave the amino acid unchanged: silent;
- insert or delete a number of bases that is not a multiple of three, shifting the reading frame downstream: frameshift; a multiple of three gives an in-frame insertion or deletion;
- hit the splice donor or acceptor site at an exon boundary and disturb splicing: splice site.
VEP reports each variant’s consequence on every transcript, and can add annotations such as population frequency. Many genes have several transcripts, and one variant can have different protein coordinates on each. vcf2maf runs VEP and picks one transcript per variant (by default favouring the canonical one) for the MAF.
A MAF table
A MAF (Mutation Annotation Format) is tab-separated text with one variant in one sample per row. The widget above loads the real TCGA-LAML MAF shipped with maftools, and you can filter it by gene and type. Start with these columns:
| Column | Meaning |
|---|---|
| Hugo_Symbol | Gene |
| Chromosome, Start_Position | Position (GRCh37 in this dataset) |
| Reference_Allele, Tumor_Seq_Allele2 | Reference base and the variant base in the tumour |
| Variant_Classification | Consequence, e.g. Missense_Mutation, Frame_Shift_Ins |
| Variant_Type | SNP, INS, DEL… |
| Tumor_Sample_Barcode | Sample ID |
Column names differ between sources: GDC MAFs record the protein change in HGVSp_Short and read counts in t_ref_count / t_alt_count, while this older LAML MAF keeps the protein change in Protein_Change and the VAF in i_TumorVAF_WU.
From the MAF to a maftools object
maftools’ read.maf loads the MAF and summarises it by sample and gene. By default it counts 9 protein-altering classes as non-synonymous: missense, nonsense, frameshift insertions and deletions, in-frame insertions and deletions, splice site, translation start site and nonstop. Silent, UTR, intronic and other classes are kept aside and stay out of the oncoplot and TMB. The clinical table is attached here too, for the enrichment and survival analyses later on.
In LAML the MAF holds 193 samples and the clinical table 200 rows. A MAF lists only samples with mutation records, so the extra rows are not “missing data”; chapter 11 explains how to count them in survival analysis.
Common pitfalls
- Mixing protein coordinates from different transcripts. When the same mutation sits at different positions in two papers, the transcripts usually differ, not the mutations.
- Inconsistent definitions of non-synonymous. Counting Silent, or dropping splice sites, changes mutation frequencies and TMB; check the definition before comparing studies.
- Assuming the MAF holds every sequenced sample. Sequenced samples with no mutation are absent from the MAF; keep the sample count from a sample sheet or the clinical table.