Skip to content

Draft

Worked through on a few cases; numbers may change.

Urine output in mL/kg/h as a distribution

Intraoperative urine output per kilogram per hour, from three rounded inputs, as a probability distribution per case: one case in ten cannot be placed confidently on either side of 0.5 mL/kg/h.

Side value
Status draft
Variables Intraoperative urine output, Weight, Anaesthesia duration
Studies Rounding and heaping of intraoperative urine output, Rounding and heaping of weight, How the anesthesia start time was charted, How the anesthesia end time was charted, Bias in charted intervals

The question

Was this patient's urine output below 0.5 mL/kg/h during the operation?

Inputs

Each input links to its measurement page: how it is timed, how its value was recorded, and how uncertain both are.

Input Unit What it is
Intraoperative urine output mL Intraoperative urine output (clinical table).
Weight kg Weight (clinical table).
Anaesthesia duration min Anaesthesia duration (derived table).

Why the atlas changes the answer

The answer is a ratio of three recorded numbers, each rounded in its own way: urine output heaped on 50 and 100 mL (Rounding and heaping of intraoperative urine output), weight on whole kilograms or a scale's 0.1 or 0.05 kg (Rounding and heaping of weight), and the anaesthesia start and end on 5- and 10-minute marks (Bias in charted intervals). Computed from the recorded numbers, the rate is one number; the true rate can lie on either side of a threshold.

Data

The 3,645 cases with a positive urine output, a weight and both anaesthesia times (39 more with a positive urine output lack one of the others or have no distribution for it). Recorded zeros are left out until the zero rule is in the library.

Steps

  1. For each case, draw 4,000 true values of urine output, weight and anaesthesia duration from the pinned vitaldb-resolution library (v0.6.0, model version 2: urine output conditioned on the case's anaesthesia duration and department; Registry.case_distribution).
  2. Form urine output / weight / duration in hours for each draw.
  3. Summarise each case by its median, a 95% interval and P(rate < 0.5 mL/kg/h); class it as confidently below (P > 0.95), confidently above (P < 0.05) or uncertain.
  4. Compare with the single rate computed from the recorded numbers.

Results

Four cases. The distributions differ in width as much as in position. case 5111 (100 mL, 66 kg, 190 min) sits on the threshold with a wide distribution, because a recorded 100 mL may be anything from about 50 to 150 mL: P(below 0.5) = 0.62, 95% interval 0.32 to 0.63 mL/kg/h. case 111 is close to the threshold but confidently below; case 113, with 320 mL (written to the nearest 10), is narrow and confidently above.

Four histograms of urine output rate; the second one is centred on the 0.5 line, the first lies just below it, the last two above it.
Urine output rate as a distribution in four cases: the distribution (blue), the rate from the recorded numbers (dashed) and 0.5 mL/kg/h (orange). case 5111 straddles the threshold; case 111 is close to it but confidently below; case 113 and case 305 are above.

The cohort. Of 3,645 cases, 1,086 are confidently below 0.5 mL/kg/h, 2,178 confidently above, and 381 (10%) uncertain. Nearly all the uncertain ones (365) have a recorded rate between 0.35 and 0.7, where they are a third of the cases. Of the 1,276 cases the recorded numbers put below 0.5, 190 are not confidently below; of those they put above, 191 are not confidently above. The 95% interval is 14% of the rate in the median case (4% to 73%, 10th to 90th percentile); the widest are cases with a round urine output of 50 or 100 mL.

A scatter that falls from 1 to 0 across 0.5 with a band of grey points around it, and a histogram of relative widths with peaks near 0.1, 0.25 and 0.75.
3,645 cases. Left: P(true rate below 0.5 mL/kg/h) against the rate from the recorded numbers; grey cases are uncertain. Right: width of the 95% interval relative to the median.

Population and individual

Random: cancels over a cohort.

The cohort The rounding adds spread but almost no bias: the median of the distributions sits within a hair of the recorded rate.
Each patient 381 of 3,645 patients (10%) cannot be placed confidently on either side of 0.5 mL/kg/h; with a round 50 or 100 mL, many more.

Takeaways

  • A threshold on a derived rate misclassifies cases near it in a way the recorded numbers cannot show. Report the share that is uncertain, or carry P(below) into the analysis instead of a yes or no.
  • Most of the uncertainty comes from urine output recorded as a round 50 or 100 mL; weight and duration add little.

Limitations

  • The three inputs are drawn independently; the duration's two ends share the anaesthesia record's clock.
  • Recorded zeros (23 cases) are left out; the library's zero rule (v0.6.0) gives them a point mass and a flag, not a rate.

Studies it relies on

Study Date Status Summary
Rounding and heaping of intraoperative urine output 2026-10-18 current Recorded intraoperative urine output is a mixture of 4 rounding modes (100 mL, 50 mL, 10 mL, 5 mL (base)); the model gives the true value's distribution for each record.
How the anesthesia start time was charted 2026-10-18 current The charted anesthesia start time is a mixture of 5 ways of writing a clock time (nominal_0740, nominal_0730, nearest_10min, nearest_5min, clock_minute), modelled as an offset from a device time.
How the anesthesia end time was charted 2026-10-18 current The charted anesthesia end time is a mixture of 4 ways of writing a clock time (ceiling_30min, ceiling_10min, ceiling_5min, clock_minute), modelled as an offset from a device time.
Rounding and heaping of weight 2026-10-13 current Recorded weight is a mixture of 3 rounding modes (whole_kg, scale_0.1, scale_0.05); the model gives the true value's distribution for each record.
Bias in charted intervals 2026-10-13 current Charted intervals are biased because each end is rounded with a different anchor, and their per-case uncertainty is large relative to short intervals.

Reproduce it

python examples/urine_output_rate.py --resolution <vitaldb-resolution at the pinned commit> \
    --root <VitalDB release> --out out/uo --figure 5111 111 113 305