Contrast

How to read the interval on a Contrast difference

Every difference in the nights section comes with a 90% interval from a 1,000-iteration bootstrap. Read the width first: a wide interval means too few nights, and a narrow one straddling zero is a real finding of no difference. Contrast calls a result clear only when the interval excludes zero and the effect is big enough to matter.

Every difference in the nights section arrives with a range around it. That range is more informative than the number in front of it, and it is the thing to look at first.

What the range is

Contrast takes your nights, splits them into after-a-session and everything else, and computes the difference. Then it does something that sounds circular and is not: it draws a new sample of the same size from your own nights, with replacement, recomputes the difference, and repeats that a thousand times.

Those thousand answers spread out. The middle 90% of them is the interval you see. It answers the question if my luck with which nights happened to be session nights had gone differently, how different could this number have been?

The technique is a bootstrap, and the reason to use one here rather than a textbook formula is the shape of the data. Sleep stage minutes have a hard floor at zero and a long tail to the right. HRV is skewed. Sample sizes are in the dozens. A formula assuming a normal distribution would produce a confident-looking interval that was subtly the wrong width.

Read the width first

The width tells you how much data you have, before the position tells you anything about your body.

What you seeWhat it means
Wide interval, either side of zeroNot enough nights yet. Come back in a month.
Wide interval, entirely one side of zeroA large effect, loosely estimated. Real, size uncertain.
Narrow interval, straddling zeroA genuine finding of no meaningful difference.
Narrow interval, clear of zeroThe one case where both the direction and the size are established.

The third row is the one people misread. A narrow interval around zero is not a failure to find something; it is having measured its absence. “Between −1 and +2 ms, across 60 nights” is a much stronger statement than “between −12 and +19 ms, across 9 nights”, and it is the statement that says stop wondering.

Intervals narrow roughly with the square root of the sample size, so quadrupling your nights halves the width. Going from 10 to 40 nights is the single most effective thing you can do to make this section useful, and it takes time rather than effort.

Why 90% rather than 95%

Convention says 95%. Contrast uses 90%, and the reason is what the interval is for here.

A 95% interval is calibrated for a setting where a false positive is expensive — a drug trial, a publication. Nothing on this page licenses a decision of that weight. The question is whether a pattern in your own log is worth paying attention to, and a slightly narrower interval gives a more useful answer to that question without pretending to more rigour than the setting has.

It also makes the page honest about its own limits. A 90% interval that excludes zero is a weaker claim than a 95% one, and the app describes it as such: it says a difference is clear, not significant, and never attaches a p-value to anything.

Two conditions, not one

Excluding zero is necessary and not sufficient. Contrast calls a result clear only when the interval excludes zero and the effect is large enough to notice.

That second condition exists because the first one is easy to satisfy with enough data. Collect two years of nights and you can establish a 0.3 ms HRV difference with an interval that comfortably misses zero. The statistic is sound and the fact is useless — nobody’s day is different because of 0.3 ms.

Statistical detectability and practical size are separate questions, and reporting only the first is how a wellness app ends up telling someone that something has meaningfully changed when nothing has.

What the interval does not cover

This is the important limitation, and it is not a statistical one.

The interval describes sampling variability — how much the answer would wobble if the same process ran again. It says nothing about confounding, which is the real problem with this comparison.

Your session days are not random. They may be the days you also trained, or the days you were less stressed, or weekends. The bootstrap faithfully accounts for the luck of which nights landed where; it cannot account for the fact that session nights differ from other nights in ways that have nothing to do with the session.

So a narrow interval clear of zero establishes that something systematically distinguishes nights after a session from your other nights. It does not establish that the session is that something. The app says this on the metric page in one sentence — it shows what goes together for you, not what causes what — and the interval cannot upgrade that sentence.

A worked reading

Say the deep sleep card reads: +12 min, likely 3 to 21, across 28 nights after and 74 other nights.

The width is 18 minutes, which is wide relative to the 12-minute estimate. Twenty-eight nights is enough to have an opinion and not enough to have a firm one. The interval clears zero, so the direction is probably real. The size is anywhere from barely noticeable to substantial.

The right conclusion is: worth watching, probably positive, come back at sixty nights. The wrong conclusion is that sauna adds twelve minutes of deep sleep.

One thing worth knowing about resting heart rate specifically

Resting heart rate is seasonal — lowest in July and highest in January in one large study — and one person in five has at least one week that swings by 10 bpm or more for no apparent reason.

That baseline noise is exactly what the four-week median comparison is designed to absorb, and it is also why the resting heart rate card is usually the widest interval on the page. Treat it with more caution than the others.

Common questions

What is the range shown next to each difference?

A 90% bootstrap interval: the app resamples your own nights 1,000 times, recomputes the difference each time, and shows the middle 90% of those results. It is where the true difference probably sits.

What does it mean if the range crosses zero?

The data cannot rule out that there is no difference at all. Contrast will not call that result clear, whatever the headline number says.

Why is my interval so wide?

Almost always too few nights. An interval narrows roughly with the square root of the sample, so going from 10 nights to 40 halves it.

Is a narrow interval around zero a failed analysis?

No, it is the strongest kind of negative result. It says the difference is small enough that you have measured its absence rather than failed to find it.

Sources