MyAgeScore
Methodology
MyAgeScore estimates biological age from measurable health markers. This page documents the exact model that runs in your browser — every weight, threshold and data source below is read directly from the source code, so the documentation cannot drift away from the implementation.
Model version: NHANES 2017–2018 · 2026-08-29
1. The model
Each marker is converted into a matched age: the age at which your value would be typical for your sex, or the number of years that a deviation from a clinical target is worth. Your biological age is the weighted mean of those matched ages, plus a bounded lifestyle modifier for physical activity and sleep. The result is clamped to ±15 years around your chronological age and to the 18–80 range supported by the reference data.
matchedAge_i = clamp(age + z_i · dir_i · yearsPerSD_i, age ± 15, [18, 80])
z_i = (value_i − μ_i(age, sex)) / σ_i(age, sex)
optimalBand deviation = max(0, lo − value) + max(0, value − hi)
matchedAge_i = clamp(age + (deviation / σ_i) · yearsPerSD_i, age, age + 15)
optimalFloor matchedAge_i = age + max(0, threshold − value) / σ_i · yearsPerSD_i
BA_fit = Σ(w_i · matchedAge_i) / Σ w_i
BA = clamp(clamp(BA_fit + lifestyle, age ± 15), [18, 80])
delta = round1(BA − age) Σ factor.impact === delta2. Marker directions
Not every marker gets healthier in a straight line, and population averages are not health targets. Anchoring everything to the population mean would grade you on a sick curve — so markers whose average is distorted by age or treatment are anchored to clinical thresholds instead.
- higherWorse
- Higher is worse — the value is compared with the population mean for your age and sex.
- higherBetter
- Higher is better — same comparison, direction inverted.
- optimalBand
- Optimal band — deviation from a fixed clinical range in either direction ages you; inside the range is neutral and never makes you younger.
- optimalFloor
- Optimal floor — only values below a clinical threshold age you; at or above it is neutral.
3. Markers, weights and references
Weights reflect how informative each marker is about biological aging and are normalised across whatever you actually provide. Years per SD is the calibration coefficient: one standard deviation of deviation is worth this many years.
| Marker | Direction | Weight | Years / SD | Clinical reference |
|---|---|---|---|---|
| HbA1c (Blood Sugar Control) | higherWorse | 1.2 | 10 | Normal < 5.7%Levine et al., PhenoAge (Aging, 2018); ADA Standards of Care 2024 |
| Blood Glucose | higherWorse | 1.0 | 8 | Fasting 70–99 mg/dLLevine et al., PhenoAge (Aging, 2018); ADA Standards of Care 2024 |
| Waist-to-Height Ratio | optimalBand0.4 – 0.5 | 0.9 | 8 | Optimal 0.40–0.50Ashwell et al., meta-analysis (Obesity Reviews, 2012); NICE CG189 |
| Blood Pressure — Systolic | optimalBand90 – 120 | 0.9 | 7 | Normal < 120 mmHgWhelton et al., ACC/AHA Hypertension Guideline (2017); SPRINT trial (NEJM, 2015) |
| Inflammation (CRP) | higherWorse | 0.8 | 7 | Low risk < 1.0 mg/LRidker, hs-CRP and cardiovascular risk (Circulation, 2003) |
| Body Composition | optimalBand18.5 – 24.9 | 0.7 | 7 | Healthy 18.5–24.9 kg/m²WHO body mass index classification; Global BMI Mortality Collaboration (Lancet, 2016) |
| Total Cholesterol | higherWorse | 0.6 | 6 | Desirable < 200 mg/dLGrundy et al., ACC/AHA Cholesterol Guideline (2018) |
| Triglycerides | higherWorse | 0.6 | 5 | Normal < 150 mg/dLGrundy et al., ACC/AHA Cholesterol Guideline (2018) |
| Heart Rate | higherWorse | 0.5 | 5 | Resting 50–70 bpmZhang et al., resting heart rate and all-cause mortality (CMAJ, 2016) |
| Blood Pressure — Diastolic | optimalBand60 – 80 | 0.4 | 5 | Normal < 80 mmHgWhelton et al., ACC/AHA Hypertension Guideline (2017) |
| HDL Cholesterol | higherBetter | 0.3 | 5 | Optimal > 60 mg/dLGrundy et al., ACC/AHA Cholesterol Guideline (2018) |
| Vitamin D | optimalFloor30 – ∞ | 0.3 | 5 | Sufficient ≥ 30 ng/mLHolick et al., Endocrine Society Clinical Practice Guideline (2011) |
4. Attribution
Each factor card shows how many years that marker contributed. Contributions are distributed with largest-remainder rounding, so they always add up exactly to your total difference — no hidden residual.
5. Biological age vs optimal age
Biological age tells you where you stand relative to your peers. Optimal age tells you where you could stand: it recomputes the same weighted mean after neutralising every aging marker while keeping the advantages you already have. The gap between the two is the number of years the model considers recoverable.
6. Data sources
Population means, standard deviations and percentiles come from NHANES 2017–2018 (National Health and Nutrition Examination Survey, US CDC), restricted to adults aged 18–80 who completed both the interview and the physical examination, stratified into six age bands by sex. Values between band midpoints are linearly interpolated; outside the 24–75 range the nearest endpoint is used without extrapolation. Physical activity and sleep reference values come from published CDC estimates.
Age-band midpoints: 18-29 → 24 · 30-39 → 34.5 · 40-49 → 44.5 · 50-59 → 54.5 · 60-69 → 64.5 · 70-80 → 75
The dataset is rebuilt from the raw CDC files by scripts/process_nhanes.py and shipped as a static JSON file.
- NHANES 2017–2018, US Centers for Disease Control and Prevention
- WHO — Body mass index classification
- Whelton et al. — 2017 ACC/AHA Hypertension Clinical Practice Guideline
- Grundy et al. — 2018 ACC/AHA Cholesterol Clinical Practice Guideline
- Ashwell et al. — Waist-to-height ratio meta-analysis, Obesity Reviews 2012 · NICE CG189
- Holick et al. — Endocrine Society Vitamin D Clinical Practice Guideline, 2011
- Levine et al. — PhenoAge, Aging 2018
7. Limitations
This is a statistical estimate, not an epigenetic clock. It is calibrated on a US population sample and may fit other populations less well. Self-reported activity and sleep are noisy. The lifestyle modifier is deliberately capped at ±3 years so that questionnaire answers cannot outweigh measured markers. Nothing here is a diagnosis — abnormal values should be discussed with a healthcare professional.
Try it yourself
The calculation runs entirely in your browser. Nothing you enter is transmitted or stored.
Start the Test