Rounding and heaping of intraoperative crystalloid¶
Recorded intraoperative crystalloid is a mixture of 3 rounding modes (100 mL, 50 mL, 10 mL (base)); the model gives the true value's distribution for each record.
| Date | 2026-10-18 |
| Status | current |
| Methods | Rounding, heaping and value resolution |
| Variables | Intraoperative crystalloid |
Background¶
- Crystalloid volume (
intraop_crystalloid) is a hand-entered intraoperative total. - The first screen found 98% of values on multiples of 50 mL, which suggested bag sizes plus partial bags.
- In the end it is the simplest value variable so far.
Data¶
- 5,980 values; 408 missing (short cases, median 1.7 h against 3.1 h); no zeros; maximum 23,800 mL.
- Only 6 values are off the 10 mL grid, so the resolution is 10 mL.
- The fit uses 5,974 values on the 10 mL grid.
Method¶
- Log-spline latent with K = 6.
- Constant 100 and 50 mL propensities were compared with volume-dependent ones.
- 500 and 1,000 mL bag-size modes were added and tested.
Results¶
- Values are written to the nearest 100 mL about half the time and to the nearest 50 mL the other half, the same at every volume.
- Volume-dependent propensities fit no better than constant ones (BIC 47,384 against 47,374).
- Bag-size modes do not help (BIC 47,416). There is no special heaping at bag sizes.
- A recorded multiple of 100 mL is uncertain by about ±50 mL; any other multiple of 50 by about ±25 mL.
- Since vitaldb-resolution v0.6.0 (18 October; model version 2): anaesthesia duration is a covariate of the latent volume (BIC better by 6,254). Department on the rounding propensities made the fit worse (BIC +22) and is not used. Rounding to the nearest anchor beats floor rounding by BIC.
Discussion¶
- Crystalloid volume is very strongly tied to case duration (Spearman 0.82).
- Conditioning the latent on duration narrows the posteriors considerably; model version 2 does so (see results).
Model¶
Model file: …/models/intraop_crystalloid.model.json. Read from the pinned snapshot of vitaldb-resolution at commit bb03ddfc8a (2026-10-18).
How a true value becomes the recorded one. The rules are tried in order: a record not taken by an earlier rule is taken by this one with the probability shown (where its condition holds); the last rule takes the rest. With no conditions, the shares follow directly.
| Order | Rule | Rounds to | Probability if reached | Share of records |
|---|---|---|---|---|
| 1 | 100 mL | 100 mL (nearest) | 47.8 % | 47.8 % |
| 2 | 50 mL | 50 mL (nearest) | 96.1 % | 50.1 % |
| 3 | 10 mL (base) | 10 mL (nearest) | the rest | 2.1 % |
| Recorded resolution | 1 (modelled at 10) |
| True-value density | log_spline |
| Fitted on | 5,863 records (VitalDB clinical_data.csv (intraop_crystalloid), positive values on the 10 mL grid with a usable anaesthesia duration) |
| BIC | 40,379 |
| Fitted | 2026-10-18 |
- Only 6 of 5,980 values are not multiples of 10; flagged off_grid.
Worked examples¶
| Example | Side | Status | Summary |
|---|---|---|---|
| Intraoperative fluid balance as a distribution | value | draft | Fluids in minus fluids out, each a heaped charted volume, as a distribution per case: the recording alone makes a balance uncertain by about ±60 mL, and by ±190 mL when the blood loss was written as a round 500 mL. |
Code¶
Tags: generated, vitaldb-resolution