Health Monitor
Last night’s five vitals against your own normal ranges.
What goes in
- Resting heart rate
- Fitbit’s daily resting heart rate from Google, in bpm.
- Heart rate variability
- Fitbit’s nightly HRV, in ms.
- Respiratory rate
- Breaths per minute asleep, in rpm.
- SpO2
- Blood oxygen overnight, in %.
- Skin temperature
- Last night against Google’s skin-temperature baseline, in °C.
How it is weighted
Resting heart rate and HRV use Google’s personal ranges when Google gives them, and skin temperature uses ± 2 of Google’s 30-night standard deviation around its baseline. Otherwise, and always for respiratory rate and SpO2, a normal range is your baseline ± 2 of your usual night-to-night swings, built from earlier nights only. Pulse’s narrowest ranges are about ±5 bpm, ±12.5 ms, ±1.25 rpm, ±1.25 points of SpO2 and ±0.75 °C. SpO2 is one-sided: below 95% is always low, and a high value is never flagged.
The illness signal compares resting heart rate, HRV, skin temperature and respiratory rate with your 30 nights before. A vital fires at 2 standard deviations in the unwell direction and adds 22 points per extra deviation, up to 40. With at least 2 vitals firing, 25 points is mild and 50 is raised. If you logged alcohol, sauna or travel the day before, Pulse takes that as the likely cause instead.
What the bands mean
- Within range
- Inside your normal range.
- Elevated or Low
- Outside it; the chip names the bound you crossed.
- Below 95%
- SpO2 under 95%, whatever your range.
- Illness signal
- Several vitals moved together, a pattern often seen early in illness.
Limits
A range from Google is there as soon as Google sends one. Pulse’s own range needs 4 earlier nights and lapses after 14 nights without a value; without Google’s baseline, skin temperature needs Pulse’s own first, so it takes about 8 nights. The illness signal stays quiet until 14 of your last 30 nights have resting heart rate or HRV. A flagged vital is a prompt to notice, not a diagnosis.
Sources
The full specification, with formulas, constants and worked examples, is health-monitor.md on GitHub. The code is tested against those examples.
- noop: the open-source analytics engine Pulse's recovery, strain and sleep scoring is ported from
- Mishra T, et al. Pre-symptomatic detection of COVID-19 from smartwatch data. Nat Biomed Eng 2020;4:1208-20
- Natarajan A, Su HW, Heneghan C. Assessment of physiological signs associated with COVID-19 measured using wearable devices. npj Digit Med 2020;3:156