The approach in one paragraph
We don't predict mortality. We predict physiological age — the age at which someone with median health metrics would carry the same readings you do. Each of 13 domains emits a "years older or younger than chronological" signal grounded in a published cohort study. Domains compose additively, with safety clamps so no single signal can dominate, and a confidence score so a sparse-data user knows their estimate is provisional. Day-to-day stability is enforced by an exponential moving average (α = 0.35) that's regression-tested to keep variance under 0.5 years on realistic noisy input.
This page is the public version of our internal methodology document. It's published — rather than kept internal — because the alternative is a black-box bio-age number, and health-tech apps that hide their math should not be trusted.
1 · Fitness
VO₂ max — the strongest single signal
Predicted VO₂ max for your age, sex, and weight uses the Jackson non-exercise estimate. Years delta is then −1.61 · (measured − expected) / 3.5, clamped to ±6 years.
Mandsager K et al. Association of Cardiorespiratory Fitness with Long-term Mortality Among Adults Undergoing Exercise Treadmill Testing. JAMA Network Open 2018;1(6):e183605.
A 1-MET (3.5 ml/kg/min) advantage over expected mapped to ~12% lower all-cause mortality; converted to ~1.6 years of physiological-age equivalent.
Steps and active minutes
Step thresholds are split by age 60. Older-adult bands: <2,500 / <4,000 / <6,000 / 6,000–8,000 / >8,000. Younger adults shift up by ~1,000 at each band.
Saint-Maurice PF et al. Association of Daily Step Count and Step Intensity with Mortality Among US Adults. JAMA 2020;323(12):1151-1160.
Cumulative fitness — capacity + behavior
VO₂ measures cardiorespiratory capacity (peak aerobic potential); steps and active minutes measure behavior (habitual movement). They have meaningfully independent contributions.
Stamatakis E et al. Joint associations of objectively-assessed physical activity and cardiorespiratory fitness with all-cause and cardiovascular mortality. BMJ 2019;366:l4570.
Combined high-fitness + high-activity stratum had the largest mortality reduction (HR ≈ 0.45 vs sedentary low-fit). "High-fit / low-active" was substantially worse than "high-fit / high-active".
The engine combines:
| Driver | Range | When it fires |
|---|---|---|
| VO₂ max | ±6y | Always preferred when present |
| Cycling FTP | ±6y | Only when VO₂ absent |
| Steps + active-min | ±2.5y full / ±1.25y discounted | Always when data present |
| Self-reported activity | ±2y | Only when neither capacity nor behavior fires |
| Zone 2 minutes bonus | −0.4y additive | When any primary path fired |
When both capacity and behavior are present, behavior is discounted by min(0.5, |capacityDelta| / 6.0) — Stamatakis 2019's ~50% overlap. The combined sum is clamped at ±7y.
2 · Cardiovascular & autonomic
Blood pressure
Bands match the ACC/AHA 2017 hypertension guideline. The protective athletic-low band (90–114 / 60–74) was added on the back of the SPRINT trial.
| Reading | Years delta |
|---|---|
| 90–114 / 60–74 (athletic-low) | −0.3 |
| <120/80 (normal) | 0 |
| 120–129 / <80 (elevated) | +0.5 |
| ≥130/80 (Stage 1) | +1.5 |
| ≥140/90 (Stage 2) | +3.0 |
| >180/120 (severe) | +4.5 |
Whelton PK et al. 2017 ACC/AHA Guideline for High Blood Pressure in Adults. JACC 2018;71:e127-e248.
Resting heart rate
Bands progress from −1.0y at ≤55 bpm to +3.3y at ~100 bpm.
Saxena A et al. Resting Heart Rate and Mortality. Eur Heart J 2013 — pooled analysis: hazard ratio ~1.09 per 10 bpm above 65.
Heart rate variability (RMSSD)
Hillebrand S et al. Heart Rate Variability and First Cardiovascular Event in Populations Without Known Cardiovascular Disease: meta-analysis and dose-response. Europace 2013;15:742-749.
3 · Sleep & recovery
Sleep duration uses an inverted-U curve peaking at 7–9h, with bands grounded in:
Yin J et al. Relationship of Sleep Duration With All-Cause Mortality and Cardiovascular Events: A Systematic Review and Dose-Response Meta-Analysis of Prospective Cohort Studies. J Am Heart Assoc 2017;6:e005947.
Sleep efficiency (% of time-in-bed actually asleep), bedtime regularity, and time-in-deep-sleep + REM each contribute additional small deltas, capped per-driver and clamped collectively at ±4y.
4 · Body composition
BMI uses the standard underweight / normal / overweight / obese / Stage II / Stage III bands, but with the protective recognition that BMI 25–27 in older adults is associated with lower all-cause mortality. Body fat % bands are sex-specific. Waist-to-height ratio > 0.5 is treated as a separate metabolic risk signal.
Flegal KM et al. Association of all-cause mortality with overweight and obesity using standard BMI categories: a systematic review and meta-analysis. JAMA 2013;309(1):71-82.
5 · Cognitive
The in-app cognitive battery (reaction time, word recall, spatial memory, symbol match) emits a small (±2y) bonus or penalty, weighted by how much the user's score deviates from age-matched norms. This is a deliberately modest contribution — single-session cognitive scores have high variance.
6 · Physical function
Grip strength, sit-to-stand reps, and balance time. Each is a strong independent predictor of mortality in older adults; in younger users they're smaller signals.
Leong DP et al. Prognostic value of grip strength: findings from the Prospective Urban Rural Epidemiology (PURE) study. Lancet 2015;386(9990):266-273.
Each 5kg decrement in grip strength was associated with a 16% increase in all-cause mortality.
7 · Lab biomarkers (AI-aggregated)
When users upload a lab report (PDF or photo), an AI vision pass extracts the values and routes each to its named coefficient (see §9). When the report is unparseable, a fallback "labs flag" reads the user's self-reported summary and emits a small penalty.
8 · Inflammation (hsCRP)
High-sensitivity CRP is the single inflammation marker in the model.
Ridker PM. A Test in Context: High-Sensitivity C-Reactive Protein. JACC 2016;67(6):712-723.
hsCRP <1 mg/L low risk; 1–3 mg/L average; >3 mg/L elevated; >10 mg/L acute-process flag (excluded from chronic-disease estimation).
9 · Lab markers — structured per-marker
Each lab marker has its own threshold table. Below: the highest-leverage signals.
ApoB
Sniderman AD et al. Apolipoprotein B Particles and Cardiovascular Disease: A Narrative Review. JAMA Cardiol 2019;4(12):1287-1295.
ApoB outperforms LDL-C as a CV-risk predictor; targets <80 mg/dL standard, <60 mg/dL aggressive.
HbA1c
Selvin E et al. Glycated Hemoglobin, Diabetes, and Cardiovascular Risk in Nondiabetic Adults. NEJM 2010;362:800-811.
Lp(a)
Genetic, single-test. >50 mg/dL adds +1.5y; >100 mg/dL +3y. Tsimikas S et al. A Test in Context: Lipoprotein(a). JACC 2017;69(6):692-711.
Vitamin D, fasting glucose, GGT, eGFR, ALT/AST, ferritin
Each has its own band table, each with the citation inline in the engine source.
10 · Genetic (APOE ε4)
When a user uploads 23andMe / AncestryDNA raw data, the engine reads APOE ε4 status. e3/e3 baseline; e3/e4 +0.6y; e4/e4 +1.8y. This is a small, capped contribution — APOE is correlative, not deterministic.
Liu C-C et al. Apolipoprotein E and Alzheimer disease: risk, mechanisms and therapy. Nat Rev Neurol 2013;9:106-118.
11 · Family history (parental longevity)
Self-reported parental ages of death. Each parent who lived >85 contributes −0.4y; each who died <60 contributes +0.5y. Capped at ±2y.
Sebastiani P et al. Families enriched for exceptional longevity also have increased health-span. Front Public Health 2013;1:38.
12 · Mental health
PHQ-9 (depression), GAD-7 (anxiety), and PSS-10 (perceived stress) — each user-administered in-app. Major depression is associated with ~+1.7y physiological age; severe anxiety adds another small layer; high perceived stress is a separate signal.
Han LKM et al. Contributing factors to advanced brain aging in depression and anxiety disorders. Translational Psychiatry 2021;11:402.
13 · Clinical flags
Smoking (active +5y; quit-3y +2y; quit-5y +0.5y), Type 2 diabetes (+3y), CVD (+4y), and severe BP (>180/120) each surface as clinical flags with a "seek prompt review" message — at these levels, the algorithm should not silently average the data into a score.
Composite, caps, and smoothing
Domains compose additively, with two safety mechanisms:
- Per-domain caps. No single domain can move bio age more than ±6–8 years (varies by domain). Prevents one outlier signal from dominating.
- Total clamp. Final delta clamped to ±18 years off chronological. Beyond that, the model is reporting noise.
Day-to-day stability is enforced by an exponential moving average (α = 0.35) that's regression-tested on noisy realistic input. The smoother lives in BioAgeSmoother.swift and is mirrored on the server as a Postgres RPC for cross-platform parity.
Confidence & uncertainty
Every reading carries a confidence score (0–1) computed from how many domains had data. Sparse-data users see a "provisional" badge on their bio age until enough domains light up. The confidence breakdown is visible in the in-app Bio Age Breakdown sheet, alongside the per-domain contribution chart.
What this isn't
- Not a mortality prediction. Mortality models (e.g. Klemera-Doubal, PhenoAge) train on death-event data; we don't.
- Not a methylation clock. Methylation clocks (Horvath, GrimAge) measure DNA methylation directly. This model uses behavioral, physiological, and biomarker proxies.
- Not a disease diagnosis. A high bio age doesn't mean you have a condition; it means signals are pointing in a direction worth understanding.
- Not personalised therapy. Recommendations are population-level. For anything clinically significant, see a doctor.
Methodology v1.3, last revised 2026-05-08. The full document — every coefficient, every Swift line anchor, every citation — is published in the Thier repository.