Implausible values in icu.chartevents and hosp.labevents, MIMIC-IV v3.1

Aperta Adatta ai principianti
#2,168 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
68/100
Tipo di issue
Documentazione
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
sql

Direzione di ricerca

Inizia individuando la documentazione di MIMIC-IV che copre icu/chartevents.csv.gz e hosp/labevents.csv.gz, quindi esamina la query SQL fornita e i risultati relativi agli intervalli. Il lavoro è completato quando viene aggiunta una nota concisa che spiega che gli utenti devono applicare intervalli di plausibilità prima delle statistiche riassuntive, includendo gli esempi osservati quando appropriato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Hello,

While building a sepsis early-warning cohort on MIMIC-IV v3.1 I ran a range
audit on 'icu/chartevents.csv.gz' and 'hosp/labevents.csv.gz' and found a small
number of implausible 'valuenum' entries. Volumes are tiny and I assume this is
expected in a near-raw release, but I wanted to flag it in case it's useful —
particularly as it's invisible to anyone who doesn't range-filter before
aggregating.

Heart rate (itemid 220045), counted directly from the raw table — 8,752,069
non-null 'valuenum' rows:

Range Rows Share
≤ 0 3,611 0.0413%
0–20 328 0.0037%
20–250 (plausible) 8,748,069 99.9543%
250–1,000 39 0.0004%
> 1,000 22 0.0003%

Every extreme row carries valueuom = 'bpm', so this isn't a unit-coding issue.
The largest values, each appearing once: 10,000,000 · 5,113,280 · 457,890 ·
152,143 · 118,107 · 102,115 · 102,102 · 86,101 · 11,710 · 11,337 · 10,109 ·
9,086.

Several look consistent with keystroke slips or concatenated digits (102102,
86101). The ≤ 0 group is ambiguous: asystole is a genuine chartable state, and a
disconnected monitor recorded as zero is another possibility — I haven't
established which dominates.

Reproducing the heart-rate figures:

SELECT COUNT(*) FILTER (WHERE valuenum <= 0)  AS nonpositive,
       COUNT(*) FILTER (WHERE valuenum > 250) AS above_250,
       COUNT(*)                               AS total
FROM chartevents WHERE itemid = 220045 AND valuenum IS NOT NULL;

Other variables. These come from a derived hourly grid (adult ICU stays ≥ 6 h,
median-in-bin), so they are not raw row counts and understate full-table
totals. Sources differ: respiratory rate, SpO₂ and temperature are
'icu.chartevents'; WBC, platelets, bilirubin, creatinine and pH are
'hosp.labevents'.

Clearly non-physiological:

  • Respiratory rate (220210): up to 7,000,400 /min
  • SpO₂ (220277): up to 9,765,430%, and negative values (−21, −8)
  • Temperature (223761 °F and 223762 °C, merged and converted to °C): −73.3 °C
    and 130,050 °C
  • pH (50820): 4.6 — arterial pH below roughly 6.8 is not survivable, so unlike
    the extremes below this one cannot be a genuine value

Outside the plausibility bounds we adopted, but plausibly genuine extremes
rather than errors — flagged only for completeness: WBC 479 and 572 ×10³/µL;
platelets 2,360 ×10³/µL; bilirubin 75.6 mg/dL; creatinine 41.5 mg/dL.

Why it may be worth a note in the documentation: The affected fraction is
negligible (~0.001% for HR), but a single 10,000,000 bpm reading is enough to
make a standard deviation meaningless — in our case it inflated the heart-rate
SD to 141 bpm, against an interquartile-based spread estimate of ~18 bpm, which
silently distorted a downstream analysis until we audited the raw values.
Median-based aggregation is robust to this and the 'mimic-code' concepts apply
range filters, so most users are protected. Anyone querying 'chartevents'
directly and computing moments is not.

Would a short "apply plausibility ranges before computing summary statistics"
note in the documentation be welcome? I'm happy to open a PR adding the observed
ranges if that's useful.

Thanks for maintaining the dataset.

Leo Shen
PI/Advisor: Dr. Larry Cheng of Penn State University

Lingua principale
Jupyter Notebook
Stelle
3.4k
Fork
1.7k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di MIT-LCP/mimic-code

Tutte le issue di MIT-LCP/mimic-code

Issue simili

Altre issue su Databases

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.