← Back to Vitra

Methodology

Every metric in Vitra is a rule or a statistic — never a black-box score. This page lists, for each surface in the app, what's shown, how it's computed, and the published study it draws from.

No machine-learning model. No data leaves your computer. If we can't point to a paper for it, it isn't in the app.

Heart Rate Variability (HRV)

What you see in the app. A nightly HRV number, a personal-normal band on the chart, and trend flags when HRV is suppressed or destabilising.

How it's computed. Vitra reads the rMSSD value Oura computes from your overnight recording, builds a 60-day personal baseline (mean ± standard deviation), and flags readings that fall more than ~1 SD below that mean for two consecutive nights. Day-over-day coefficient of variation (CV) is tracked separately as an early-instability signal — the approach used in elite endurance monitoring.

Sources

Resting Heart Rate (RHR)

What you see in the app. Nightly lowest resting heart rate, your personal baseline band, and alerts when RHR climbs.

How it's computed. Vitra uses Oura's lowest-nightly resting heart rate, computes a 60-day rolling mean, and flags an elevation when today exceeds the baseline by approximately one standard deviation. Sustained elevation alongside other markers (temperature, low HRV) escalates to a compound illness/overreach flag.

Sources

Body Temperature Deviation

What you see in the app. Your nightly skin-temperature deviation from your personal mean, and an early-warning flag when it climbs.

How it's computed. Oura provides nightly skin-temperature deviation; Vitra surfaces it as-is and combines it with RHR elevation to flag possible illness onset 1–3 nights before symptoms appear, following the validation work below.

Sources

Sleep Duration & Debt

What you see in the app. Total sleep, a personalised optimal-sleep estimate, and a rolling sleep-debt number.

How it's computed. Optimal duration is inferred from your own best-performing nights (top-quartile readiness over a multi-month window). Sleep debt is the cumulative shortfall over the last 14 days, decayed daily — broadly mirroring the cumulative-cost model from the foundational Penn paper.

Sources

Deep & REM Sleep

What you see in the app. Time in deep and REM sleep, with low-night flags when either drops below your usual share.

How it's computed. Vitra inherits Oura's stage classification (accelerometer + PPG-derived stages) and applies your personal 30-day median as the reference point, not a population norm. Two consecutive low nights raise a flag rather than acting on a single outlier.

Sources

Sleep Timing & Regularity

What you see in the app. Bedtime drift, a sleep-regularity index, and a forward-looking wind-down window.

How it's computed. Regularity is computed as the average minute-to-minute agreement of sleep/wake state across recent 24-hour cycles — Phillips' Sleep Regularity Index (SRI). Bedtime drift uses a 14-day rolling median against your personal target.

Sources

Cardiorespiratory Fitness (VO₂ estimate)

What you see in the app. An estimated VO₂ trajectory and a fitness-trend flag.

How it's computed. Vitra uses Oura's VO₂ max estimate (derived from your sub-maximal heart-rate response to walking and pace data) as the raw input, and reports change relative to your 90-day baseline — never against a population percentile.

Sources

Training Load & Strain

What you see in the app. An acute-to-chronic workload ratio (ACWR) and an overreaching/under-loading flag.

How it's computed. Computed as 7-day exponentially-weighted load divided by 28-day exponentially-weighted load. Values above ~1.3 are flagged as overreaching risk, below ~0.8 as detraining — thresholds drawn from the Gabbett/Hulin sports-science literature.

Sources

Daily Movement (Steps & Active Minutes)

What you see in the app. Step count with a low-day flag and an active-minute trend.

How it's computed. Daily steps as reported by Oura, with a personal 30-day rolling target rather than a fixed 10,000-step heuristic.

Sources

Menstrual Cycle (Oura-derived)

What you see in the app. Phase context applied to HRV, temperature and sleep flags.

How it's computed. Vitra uses Oura's cycle-phase classification (follicular / ovulatory / luteal / menstrual) to widen the personal-normal band for metrics that are known to shift across the cycle — particularly skin temperature and HRV in the luteal phase.

Sources

Day-Tag Correlations (Alcohol, Caffeine, Travel, Stress …)

What you see in the app. Personal correlations between manual day-tags and your biometrics, surfaced only once the sample is large enough.

How it's computed. When you tag a day (e.g. ‘alcohol’, ‘late_eating’, ‘sauna’), Vitra waits for at least five tagged and five untagged days inside a 90-day window, then reports the mean delta in HRV, RHR, sleep and temperature. Below that threshold the result is hidden — Vitra never shows a correlation it can't defend.

Sources

Personal Baselines (the engine behind every flag)

What you see in the app. Every metric chart shows a shaded ‘normal-for-you’ band, not a population norm.

How it's computed. For each metric Vitra maintains a 60-day rolling mean and standard deviation. The band on the chart is ± 1 SD. Flags fire on direction-correct deviations, never on a single outlier, and back off automatically when you tell Vitra you're injured, sick or travelling.

Sources