Skip to content
/genome-variants/snp

SNP (Single Nucleotide Polymorphism)

A single-base position in the genome where different people carry different nucleotides, inherited from parents and typically reported as one of two alleles with a population frequency.

A SNP is a position in the genome where the base differs between people: one chromosome carries a C, another carries a T, and both versions are common enough in the population to be called variation rather than error. You have two copies of each autosome, so at any SNP your genotype is one of three states: homozygous reference, heterozygous, homozygous alternate.

How it works

A typical human genome differs from the GRCh38 reference at roughly 4 to 5 million sites. Most of those are single-nucleotide changes; the rest are short insertions and deletions, plus a few thousand larger structural events. Only around 10,000 to 12,000 of the single-nucleotide differences change a protein sequence, and a few hundred are predicted to knock out a gene entirely. The overwhelming majority sit in introns and intergenic space, where they may affect regulation, splicing, or nothing at all.

SNPs are inherited as blocks. Recombination breaks chromosomes at a limited number of places per meiosis, so nearby SNPs travel together in haplotypes, and knowing one allele tells you a lot about its neighbors. That structure is what the HapMap project mapped, and it is the reason a 700,000-marker genotyping array can stand in for millions of untyped sites.1 It is also the reason a single GWAS hit almost never points at the causal base: you get a tag SNP in linkage disequilibrium with whatever is doing the work.2

Allele frequencies vary between populations, sometimes because of drift and bottlenecks, sometimes because of selection. Genome-wide scans built on haplotype structure can identify regions where an allele rose in frequency recently and fast.3 Most SNPs are not under selection and are not tri-allelic. Sites with three segregating alleles do exist and are rare enough that a curated set of them is useful for identity panels.4

In your own data

Whole-genome sequencing gives you a VCF. Each SNP is a line: chr1 1158631 rs1140070 A G . PASS ... GT:AD:DP:GQ 0/1:22,19:41:99. The fields you care about are GT (0/0, 0/1, 1/1), DP (read depth at the site), GQ (phred-scaled confidence in the genotype), and AD (reads supporting each allele).

Start by separating SNVs from everything else and normalizing:

bcftools norm -m -any -f GRCh38.fa in.vcf.gz -Ou \
  | bcftools view -v snps -i 'FILTER="PASS" & GQ>=20 & DP>=10' -Oz -o snps.vcf.gz
bcftools index snps.vcf.gz

bcftools norm -m -any splits multi-allelic rows so each line carries one ALT. Skip it and any tool that assumes biallelic input will silently mis-parse your heterozygotes. To attach rs IDs, annotate against dbSNP rather than trusting the ID column you were given: bcftools annotate -a dbsnp.vcf.gz -c ID -o annotated.vcf.gz.

If your data is a consumer array export, the format is four columns: rsid, chromosome, position, genotype, usually on GRCh37 and reported on the reference forward strand. Two failure modes bite people here. First, build mismatch: GRCh37 and GRCh38 coordinates differ by megabases in places, so lift over with CrossMap or picard LiftoverVcf before joining to anything else, and expect a small percentage of sites to fail. Second, strand ambiguity: at A/T and C/G SNPs with allele frequency near 0.5, you cannot resolve strand from the alleles alone, and a flip turns your genotype into its complement without any error message.

The other frequent mistake is treating an absent line as homozygous reference. In a standard VCF, absence means “not called,” which lumps together reference-matching sites and sites with no coverage. If you need that distinction, work from the gVCF and check the <NON_REF> blocks.

Array data covers a fraction of common SNPs directly; the rest come from imputation against a reference panel, which infers untyped genotypes from haplotype sharing and returns a dosage plus a confidence score.5 Filter on that score (R2 or INFO above about 0.8) before you use imputed sites for anything, and do not impute rare variants and then reason about them as if they were observed.

Limitations

A SNP is a coordinate and two letters. It carries no mechanism. Common SNPs found by GWAS have small effects, typically odds ratios under 1.1, and most of their heritability is spread across thousands of loci rather than concentrated in the few that reach significance.2 Variation in an annotated functional gene is abundant even in immune pathways where you might expect strong constraint, so “this SNP is in an interesting gene” is not evidence of anything.6

Rare coding variants behave differently from common tag SNPs and need different handling. If a variant in your file is flagged pathogenic in a clinical database, that is a question for a genetic counselor or physician with a confirmatory clinical-grade test, not for a script.

Woolf Software builds longitudinal molecular profiles of individuals: whole-genome sequencing, RNA sequencing, proteomics, blood biomarkers, and continuous glucose data, integrated into one model of you. Build your profile.

Computational Angle

In your own data a SNP is one row of a VCF: a chromosome, a position, a reference and alternate allele, a genotype call, and a depth and quality that tell you how much to trust it.

Related Terms

References

  1. The International HapMap Consortium. A haplotype map of the human genome . Nature, 2005. DOI
  2. Peter M. Visscher, Naomi R. Wray, Qian Zhang, et al.. 10 Years of GWAS Discovery: Biology, Function, and Translation . The American Journal of Human Genetics, 2017. DOI
  3. Kun Tang, Kevin R Thornton, Mark Stoneking. A New Approach for Using Genome Scans to Detect Recent Positive Selection in the Human Genome . PLoS Biology, 2007. DOI
  4. C. Phillips, J. Amigo, A.O. Tillmar, et al.. A compilation of tri-allelic SNPs from 1000 Genomes and use of the most polymorphic loci for a large-scale human identification panel . Forensic Science International: Genetics, 2020. DOI
  5. Paul Scheet, Matthew Stephens. A Fast and Flexible Statistical Model for Large-Scale Population Genotype Data: Applications to Inferring Missing Genotypes and Haplotypic Phase . The American Journal of Human Genetics, 2006. DOI
  6. Ross Lazarus, Donata Vercelli, Lyle J. Palmer, et al.. Single nucleotide polymorphisms in innate immunity genes: abundant variation and potential role in complex human disease . Immunological Reviews, 2002. DOI