# Genomic context of the Horvath 2013 epigenetic clock

**Result:** The clock's CpGs have a distinctive annotation profile, but much of the apparent enrichment depends on the comparison background. CpG-shore enrichment persists against a development-compatible public proxy; island enrichment does not. This is an annotation study, not a replication of clock training or prediction.

## Data and scope

The clock is Horvath's 353-CpG, multi-tissue age predictor. The original article states that elastic-net selection used 21,369 probes shared by the Illumina 27K and 450K platforms, with fewer than 10 missing values across the data sets [1].

The analyzed site list is Biolearn's public `Horvath1.csv`; its model registry explicitly attributes it to Horvath 2013 [2]. All 353 IDs are unique, present in the annotation, and marked as 27K-shared. Direct equivalence to the publisher's original supplement was **not verified**, because access to that supplementary-file host was declined. No age predictions or methylation measurements were used.

Annotations come from `IlluminaHumanMethylation450kanno.ilmn12.hg19`, package version 0.6.0, based on Illumina manifest v1.2 and hg19 [3]. The four source tables have identical, unique probe indexes. Their 485,512 rows include 482,421 `cg########` CpGs; 3,091 other probes were excluded. The package documents that blank island-context values were converted to “OpenSea”; none of the resulting island annotations is missing. No genome-build conversion was performed.

| Comparison universe | CpGs including clock | Clock CpGs | Non-clock controls |
|---|---:|---:|---:|
| Full annotated 450K CpG assay | 482,421 | 353 | 482,068 |
| Manifest-marked 27K-shared CpGs | 25,978 | 353 | 25,625 |
| Full 450K, type II only | 346,945 | 331 | 346,614 |
| 27K-shared, type II only | 23,663 | 331 | 23,332 |
| Full 450K, type I only | 135,476 | 22 | 135,454 |
| 27K-shared, type I only | 2,315 | 22 | 2,293 |

The first two comparisons are primary; chemistry-specific comparisons are sensitivity analyses. The 25,978-site universe is a **proxy, not the original 21,369-site training universe**. The original missingness filter cannot be reconstructed from annotations alone. Although the article uses “Infinium type II assay” terminology, the 450K manifest assigns 22 clock probes to type I. We therefore do not equate a manifest type-II restriction with the original candidate set.

## Methods

Each probe is counted once. Clock probes are removed from every control set. For island context, north/south shores are combined, as are shelves, yielding four mutually exclusive categories: island, shore, shelf and open sea.

Gene-region labels are split on semicolons and deduplicated within each probe. TSS200, TSS1500, 5′UTR, first exon, body and 3′UTR are tested as separate binary features; a probe may belong to several because transcript annotations overlap. “Promoter” is operationally defined as TSS200 **or** TSS1500. An empty gene-region field is labeled “no gene-region annotation,” not assumed to prove an intergenic location or lack of function.

For each of 12 features, two-sided Fisher tests compare clock/non-clock by feature present/absent. Tables report conditional maximum-likelihood odds ratios (ORs) and exact conditional 95% confidence intervals. OR > 1 means enrichment. Benjamini–Hochberg correction is reported both across the 24 primary comparisons and across all 72 primary/sensitivity comparisons. Confidence intervals are not multiplicity-adjusted. No randomized analysis was used.

## Main findings

Background percentages below refer to non-clock controls. Every result, count, P value and adjusted P value is in the accompanying CSV.

| Feature | Clock | Full 450K controls | OR, full 450K (95% CI) | Shared controls | OR, shared (95% CI) |
|---|---:|---:|---|---:|---|
| CpG island | 135/353 (38.2%) | 31.1% | 1.37 (1.10–1.71) | 42.6% | 0.83 (0.67–1.04) |
| CpG shore | 147/353 (41.6%) | 23.2% | 2.36 (1.90–2.93) | 31.7% | 1.54 (1.23–1.91) |
| CpG shelf | 6/353 (1.7%) | 9.8% | 0.16 (0.06–0.35) | 2.2% | 0.77 (0.28–1.70) |
| Open sea | 65/353 (18.4%) | 35.9% | 0.40 (0.30–0.53) | 23.5% | 0.73 (0.55–0.97) |
| Promoter: TSS200 or TSS1500 | 214/353 (60.6%) | 29.0% | 3.77 (3.03–4.70) | 53.7% | 1.33 (1.07–1.66) |
| No gene-region annotation | 3/353 (0.8%) | 24.4% | 0.027 (0.005–0.078) | 0.8% | 1.02 (0.21–3.05) |

**Shore enrichment is the most consistent residual feature.** Against the shared-platform proxy its primary-adjusted q is 0.000258 (all-72 q = 0.000359). It persists among the 331 type-II clock probes: OR 1.50, CI 1.19–1.87, all-72 q = 0.00105. The type-I subset contains only 22 clock probes and gives an imprecise estimate.

**Island enrichment depends on the background.** It is supported against the full array (primary q = 0.00883), but the shared-platform estimate is below 1 with a CI spanning 1 (q = 0.139). This supports neither a background-independent island enrichment nor a confident island depletion.

**Promoter enrichment is substantially attenuated.** Its OR falls from 3.77 to 1.33 against shared probes (primary q = 0.0169; all-72 q = 0.0229). Among shared type-II probes the estimate remains positive, OR 1.27, CI 1.01–1.60, but all-72 q = 0.0742. The promoter result is weaker than the shore result under the full sensitivity analysis.

Several striking assay-wide differences largely disappear against shared probes, including shelf depletion, gene-body depletion and scarcity of unannotated gene regions. The 5′UTR estimate even changes from enrichment to modest depletion (OR 2.15 versus 0.76); the latter is borderline under primary correction and not supported under all-72 correction. Similarly, shared-background open-sea depletion has primary q = 0.0426 but all-72 q = 0.0532. These borderline findings should not carry the interpretation.

## What this tells us about the clock

The full-array comparison asks how clock sites differ from all CpGs annotated on the later assay. The shared-platform comparison better approximates the selection opportunities in a cross-platform clock. Its controls already concentrate near genes and promoters, explaining much of the apparent specificity obtained with the full array.

The remaining shore enrichment is consistent with selection of a particular subset of the available CpGs, but it cannot isolate the effect of elastic-net selection from the unrecovered training eligibility filter. It does not show that shores cause aging, that nearby genes regulate the clock, or that these sites are therapeutic targets. Probe annotations cannot establish clock accuracy, tissue generalizability, methylation-change direction or intervention effects. Regression coefficient signs were retained for inspection but were not interpreted as marginal age associations.

Additional limitations include old hg19 annotations, transcript-dependent labels, spatial dependence among CpGs, and the Fisher test's exchangeability assumption. These are descriptive selection contrasts; the P values are not subject-level biological replication. No cross-reactive/SNP-probe blacklist, training variance filter or tissue-specific regulatory annotation was applied. Generalization to EPIC arrays or all genomic CpGs is not warranted.

## Inspection and rerun

The ZIP contains raw annotation snapshots, normalized annotation inputs, the clock list, source URLs and SHA-256 checksums, software versions, full results, per-clock-site annotations, and scripts. Run `python analysis.py --root . --out rerun_results` after extraction in an environment with the recorded dependencies. This core rerun is offline. `rebuild_inputs.py` optionally regenerates normalized annotation inputs from the bundled R data objects using `rdata`.

Validation checks include unique IDs, all 353 joins, feature-label validity, exclusive island categories, clock exclusion from controls, denominator consistency, independent hypergeometric verification of four primary Fisher tests, and an offline rerun from serialized inputs. The audit describes what was checked; it is not external scientific validation.

## Sources

1. Horvath S. *DNA methylation age of human tissues and cell types.* Genome Biology 14, R115 (2013). [PubMed PMID 24138928](https://pubmed.ncbi.nlm.nih.gov/24138928/); [DOI: 10.1186/gb-2013-14-10-r115](https://doi.org/10.1186/gb-2013-14-10-r115). Open-access full text was retrieved via the PubMed/Europe PMC connector.
2. Biolearn: [public clock coefficients](https://raw.githubusercontent.com/bio-learn/biolearn/master/biolearn/data/Horvath1.csv) and [model registry](https://github.com/bio-learn/biolearn/blob/master/biolearn/model.py). URLs track a mutable branch; bundled bytes and SHA-256 hashes identify the analyzed snapshots.
3. Hansen KD. [IlluminaHumanMethylation450kanno.ilmn12.hg19 source repository](https://github.com/hansenlab/IlluminaHumanMethylation450kanno.ilmn12.hg19), version 0.6.0; [annotation documentation](https://github.com/hansenlab/IlluminaHumanMethylation450kanno.ilmn12.hg19/blob/master/man/IlluminaHumanMethylation450kanno.ilmn12.hg19.Rd). Package metadata declares Artistic-2.0. Upstream annotation contents are attributed to Illumina; redistribution of supplied source material remains subject to upstream terms.

Study performed 24 September 2026. No drug-discovery analysis was performed.
