Reproducing a Genetic Genie Methylation Report From Your Own Raw Data
By the end of this guide you will have a small, reproducible pipeline for raw genotype files. It accepts a 23andMe .txt, an AncestryDNA .txt, or a VCF from whole-genome sequencing. It pulls out the exact variants a Genetic Genie methylation report displays. It checks each call for strand orientation and genotyping confidence. It then writes a table you can hand to an analysis script or an AI agent. Along the way you will also understand the thing that trips up almost everyone who searches this term: the Genetic Genie methylation panel does not measure DNA methylation. It reads inherited DNA sequence variants in genes whose protein products participate in one-carbon metabolism. Measuring methylation itself is a different assay, and the last two sections cover how that works and what it costs you in coverage and money. To follow along you need a raw data file, a laptop with Python 3 and either bcftools or plink2 available, and about an hour.
1. Separate the two meanings of “methylation” before you interpret anything
The word is doing double duty in this field, and that ambiguity is the single largest reason these reports are misread. It is worth settling the distinction before any data comes out of a file.
Methylation as a genotype panel means looking at single nucleotide polymorphisms (SNPs, single-letter differences in your inherited DNA) in genes such as MTHFR, MTR, MTRR, CBS, and COMT. These genes encode enzymes in the folate and methionine cycles, which supply methyl groups to the cell. Your genotype at these positions is fixed at conception, identical in every tissue, and identical at age 5 and age 60.
Methylation as an epigenetic measurement means something quite different. It quantifies whether a cytosine followed by a guanine, a CpG dinucleotide, carries a methyl group at carbon 5. That measurement is made at a specific genomic position, in a specific tissue, at a specific moment. Roughly 70 to 80 percent of CpGs in the vertebrate genome are methylated, with the notable exception of CpG islands, the GC-rich clusters that sit at most promoters and stay largely unmethylated 12. When an island does become methylated, transcription of the associated gene is typically shut down, which is how promoter hypermethylation silences genes such as S100A2 in breast tumors 3. That is a measurement of cell state, and a Genetic Genie report contains none of it.
Both are legitimate objects of study, but only one of them is present in your 23andMe file. If you paid for a “genetic methylation test” and received a list of SNPs with color-coded heterozygous and homozygous labels, you received the first kind.
2. Get your raw file into a normalized form
The first practical step is turning a consumer export into something with coordinates you can join against other data. Consumer array exports are tab-separated, beginning with a header block of comment lines, followed by four columns (rsid, chromosome, position, genotype), with genotypes written as two concatenated bases on the reference forward strand of a specific genome build. 23andMe v5 files are on GRCh37, which they call build 37. Check the header rather than assuming:
head -25 genome_yourname_v5_Full_20240101.txt | grep '^#'
Once you know the build, convert the file into a form you can query. plink2 handles this cleanly:
plink2 --23file genome_yourname_v5.txt yourname \
--snps-only --make-pgen --out yourname_b37
If you have whole-genome sequencing instead of an array, you already have a VCF or gVCF (a text format listing variants relative to a reference genome, with per-site quality information) and you should use it in preference to an array export. An array interrogates a few hundred thousand to a million pre-chosen positions. Sequencing reads the positions that matter here directly, with a depth number attached, so you can distinguish a confident homozygous call from a call made on four reads. That distinction matters more than any interpretation layer sitting on top of it.
3. Build the variant table explicitly
It is tempting to let a web tool decide which positions to look at, but an auditable analysis needs the positions written down in your own code. These are the core variants a methylation panel reports, together with the coding-level names people use for them in conversation and in the literature:
| Gene | rsID | Common name | GRCh37 | GRCh38 |
|---|---|---|---|---|
| MTHFR | rs1801133 | C677T | chr1:11856378 | chr1:11796321 |
| MTHFR | rs1801131 | A1298C | chr1:11854476 | chr1:11794419 |
| MTR | rs1805087 | A2756G | chr1:236885200 | chr1:236721900 |
| MTRR | rs1801394 | A66G | chr5:7870860 | chr5:7870973 |
| CBS | rs234706 | C699T | chr21:44483184 | chr21:43063074 |
| COMT | rs4680 | V158M | chr22:19951271 | chr22:19963748 |
| SHMT1 | rs1979277 | L474F | chr17:18229959 | chr17:18326845 |
| TCN2 | rs1801198 | P259R | chr22:31019062 | chr22:30623073 |
| FUT2 | rs601338 | W143X (secretor) | chr19:49206674 | chr19:48703417 |
| VDR | rs1544410 | BsmI | chr12:48239835 | chr12:47846052 |
| VDR | rs731236 | TaqI | chr12:48238757 | chr12:47844974 |
Verify each coordinate against current dbSNP before you trust it in a script. Positions move between genome builds and occasionally between dbSNP releases, and a silent one-base offset will hand you a confident wrong answer. The simplest check is to query by rsID and confirm that the returned alleles match the table you are about to write.
4. Extract the calls
With the panel defined, extracting the genotypes is short work. Starting from a consumer genotype file, a small Python script is clearer than a chain of awk calls and leaves you something you can extend later:
import pandas as pd
PANEL = {
"rs1801133": ("MTHFR", "C677T", "G", "A"), # plus-strand ref, risk
"rs1801131": ("MTHFR", "A1298C", "T", "G"),
"rs1805087": ("MTR", "A2756G", "A", "G"),
"rs1801394": ("MTRR", "A66G", "A", "G"),
"rs234706": ("CBS", "C699T", "C", "T"),
"rs4680": ("COMT", "V158M", "G", "A"),
}
raw = pd.read_csv("genome_yourname_v5.txt", sep="\t", comment="#",
names=["rsid", "chrom", "pos", "genotype"], dtype=str)
rows = []
for rsid, (gene, name, ref, alt) in PANEL.items():
hit = raw.loc[raw.rsid == rsid]
if hit.empty:
rows.append((gene, name, rsid, "ABSENT", None)); continue
gt = hit.genotype.iloc[0]
dose = None if "-" in gt else sum(1 for b in gt if b == alt)
rows.append((gene, name, rsid, gt, dose))
print(pd.DataFrame(rows, columns=["gene", "variant", "rsid",
"genotype", "alt_dose"]))
Starting from a VCF, a single line does the same work and gives you read depth and genotype quality at no extra effort:
bcftools query -r chr1:11796321,chr1:11794419,chr22:19963748 \
-f '%CHROM\t%POS\t%ID\t%REF\t%ALT\t[%GT\t%DP\t%GQ]\n' yourname.vcf.gz
Treat any call with DP below about 10 as provisional, where DP is read depth at that site. Do the same for any call with GQ below 20, where GQ is genotype quality on a phred scale. On a 30x whole genome, meaning an average of 30 sequencing reads covering each base, most of these sites will come back at 25 to 40 reads with GQ 99. The few that do not are usually in a repetitive or GC-rich stretch and are worth inspecting in IGV.
5. Fix the strand problem before you read a single result
Strand orientation is the source of perhaps half the confusion in online methylation forums, and it is easy to resolve once you know to look. MTHFR is transcribed from the minus strand of chromosome 1, so the variant known clinically as 677C>T appears in your file as a G to A change on the reference plus strand. A file showing AA at rs1801133 is what the literature calls 677TT, and a file showing GG is 677CC. The same logic applies to rs1801131 (A1298C), which appears as T to G, so GG on the plus strand is 1298CC.
The reason this deserves an explicit check is that older AncestryDNA exports and some third-party conversions report certain SNPs on the opposite strand, which silently flips your homozygotes. The check itself is cheap. For a biallelic SNP, compare your observed alleles to the REF and ALT alleles recorded in dbSNP for the same build. If you see C/T where dbSNP says G/A, your file is on the other strand and you should complement the call before interpreting it. For A/T and C/G variants the comparison fails by construction, since complementing gives the same pair of letters, which is one more reason to prefer sequencing over arrays for anything you intend to act on with a clinician.
6. Interpret the genotypes with the right scope
What you now have is an accurate readout of six to twenty-odd positions in your genome, and the value of the exercise depends on being clear about how narrow that is. MTHFR 677TT is common, present in roughly 10 percent of many European-ancestry populations and higher in some East Asian and Hispanic populations, and it is associated with reduced enzyme activity in vitro and modestly higher plasma homocysteine. It is not a diagnosis. Large studies have repeatedly failed to find the clinical consequences that supplement marketing attaches to it, and several professional genetics bodies have recommended against routine MTHFR genotyping for this reason.
The useful move is to treat the genotype as a hypothesis and then go measure the phenotype. The one-carbon cycle has direct, inexpensive blood readouts: plasma total homocysteine, serum folate, red cell folate, serum B12, and methylmalonic acid. If your homocysteine sits in the normal range, your genotype at rs1801133 tells you very little about your current biochemistry. If it is elevated, that is a finding to bring to a physician, who will consider renal function, B12 status, thyroid, and medication history long before genotype. We would not change anything on the basis of the SNP panel alone, and any decision about supplementation belongs with a clinician who can see the labs.
That leads naturally to the reputability question people ask about Genetic Genie. The site is a rendering layer rather than a laboratory. It takes the file you upload and displays the genotypes it finds, and the extraction itself is generally correct. What it adds is framing: calling common polymorphisms “mutations”, grouping them into “methylation” and “detox” panels, and presenting a color-coded severity gradient that the underlying evidence does not support. The arithmetic is fine. The interpretation is where you should apply your own judgment, and the same caution applies to any commercially marketed methylation panel built on the same handful of rsIDs.
7. If you want to measure actual DNA methylation, choose the assay first
Suppose you want the epigenetic measurement after all: methylation state at CpG sites in a given tissue. There are three practical routes, and they differ by two orders of magnitude in both cost and coverage, so the choice of assay should come before any thought about analysis.
The Illumina Infinium MethylationEPIC v2 array interrogates roughly 935,000 CpG sites at fixed positions. Coverage is biased toward promoters, CpG islands, and enhancers. You receive two .idat files per sample, which you process in R with minfi or sesame: background correction, dye-bias equalization, detection p-value filtering (dropping probes with p > 0.01), and normalization to beta values between 0 and 1. It is the cheapest per-site option and the substrate for nearly every published epigenetic clock, including the original 353-CpG Horvath multi-tissue estimator, which you can compute from processed betas using the methylclock package.
Whole-genome bisulfite sequencing, or its enzymatic counterpart methyl-seq, covers all roughly 28 million CpGs in the genome. That includes the intergenic and repeat regions that arrays skip entirely. Enzymatic conversion (NEBNext EM-seq) has largely replaced sodium bisulfite in our work because bisulfite fragments DNA and skews coverage toward AT-rich regions, which hurts exactly the CpG-island promoters you care about 1. Align with bwa-meth or bismark, call with MethylDackel extract --mergeContext --minDepth 10, and expect a bedGraph of chromosome, start, end, percent methylation, methylated count, and unmethylated count. Budget 30x per-CpG coverage if you want per-site estimates you can compare across timepoints. At 10x, binomial sampling noise alone puts a wide interval around any single site, and most of the apparent change you see between two visits will be counting error.
Targeted amplicon bisulfite sequencing sits between the two and is the right choice when you have a short list of loci and want depth in the hundreds. The cell-free DNA field uses a variant of this logic: tumor-derived methylation patterns survive in plasma, and panels selected from tissue methylation differences can be ported to cell-free DNA for minimally invasive detection 4. That work is clinical and belongs with oncologists, but it is the clearest demonstration that methylation is a measurable, changing signal rather than a fixed genotype.
8. Wire the outputs together
Once you hold both kinds of data, keep them in separate tables with explicit provenance, because they answer different questions and mixing them produces nonsense. A genotype table carries rsID, build, plus-strand alleles, dosage, and a source field naming the assay and date. A methylation table carries chromosome, position, strand, coverage, beta, tissue, and collection date.
Join the two only when you have a specific hypothesis, for example asking whether a methylation quantitative trait locus near a gene of interest tracks with your genotype at a nearby SNP. Annotating CpG positions against gene models is straightforward with a current GENCODE GTF and bedtools intersect. The relationship between CpG islands, gene starts, and the broader compositional structure of the genome is well characterized enough to make that annotation meaningful 52.
Common problems
A handful of failure modes account for most of the trouble people run into with these pipelines. Each has a specific cause and a specific response.
The rsID is absent from your file. Arrays carry different probe sets by version, and a v3 23andMe chip does not contain everything a v5 chip does. Do not impute a missing genotype from an ancestry-matched reference panel and then treat the result as a personal fact, because imputation accuracy at a single low-frequency site is not good enough for that. Sequence the region or leave the cell blank.
Your genotype disagrees between two files. This is nearly always strand orientation or a build mismatch, in that order. Re-run the dbSNP allele comparison from step 5 on both files before you conclude that one laboratory made an error.
The report shows a “mutation” you cannot find in the literature. Many of the variants on these panels are common polymorphisms with minor allele frequencies above 20 percent, which makes the heterozygous state the ordinary human condition. Check the gnomAD frequency before spending time on any single call.
Your methylation betas shift between timepoints for reasons you did not intend. Blood methylation is strongly influenced by cell type composition, so a change in the neutrophil-to-lymphocyte ratio moves hundreds of thousands of probes at once. Estimate cell fractions from the array data itself, using the Houseman deconvolution implemented in minfi::estimateCellCounts2, and adjust before comparing visits. Without that adjustment, most longitudinal methylation findings in whole blood are cell-composition artifacts.
You want to act on a result. Genotype panels and methylation arrays sold direct to consumers are not diagnostic devices, and neither a beta value nor an rsID dosage is a clinical finding on its own. Bring the raw data and any abnormal blood chemistry to a physician or genetic counselor, who can order confirmatory testing in a clinical laboratory.
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.
Footnotes
-
Brahim Aïssani, Giorgio Bernardi. CpG islands, genes and isochores in the genomes of vertebrates. Gene, 1991. https://doi.org/10.1016/0378-1119(91)90198-k ↩ ↩2
-
Brahim Aïssani, Giorgio Bernardi. CpG islands: features and distribution in the genomes of vertebrates. Gene, 1991. https://doi.org/10.1016/0378-1119(91)90197-j ↩ ↩2
-
Roland Wicki, Cornelia Franz, Florence A. Scholl, et al. Repression of the candidate tumor suppressor gene S100A2 in breast cancer is mediated by site-specific hypermethylation. Cell Calcium, 1997. https://doi.org/10.1016/s0143-4160(97)90063-4 ↩
-
E. Post. 98P Translating cancer tissue methylation to cell-free DNA methylation for minimally invasive cancer detection. Annals of Oncology, 2024. https://doi.org/10.1016/j.annonc.2024.08.106 ↩
-
Ewan Birney, Alex Bateman, Michele E. Clamp, et al. Mining the draft human genome. Nature, 2001. https://doi.org/10.1038/35057004 ↩