CriticalDatathon / data-prep

Data Preparation Repository: code to curate ICU Pulse Oximetry data
MIT License
2 stars 1 forks source link

Check SaO2 values in eICU #3

Open joamats opened 1 year ago

joamats commented 1 year ago

In eICU, SaO2 comes from "O2 Sat %", which does not clearly state whether it's venous or arterial. We may need to clamp some of the lowest values to make sure we're only considering SaO2 and not SvO2.

mirkompcr commented 1 year ago

Normal venous/SvO2 range is 60-70% Normal arterial/SaO2 range is 95-100%

Studies on SaO2 are hard to come by. But most people seem to be above 86%. As we have more than enough SaO2-SpO2 pairs, I would go for a very specific cut-off, accepting a low sensitivity. As such I would discard all SaO2 values < 80% because they could be venous.

References:

https://journals.physiology.org/doi/full/10.1152/japplphysiol.00394.2016?rfr_dat=cr_pub++0pubmed&url_ver=Z39.88-2003&rfr_id=ori%3Arid%3Acrossref.org

https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0250740#sec012

https://bmjopenrespres.bmj.com/content/bmjresp/8/1/e000939.full.pdf

mirkompcr commented 1 year ago

Identifying patients with arterial lines

Use pivoted tables first:

pivoted vital https://github.com/MIT-LCP/eicu-code/blob/master/concepts/pivoted/pivoted-vital.sql

pivoted infusion -> all medications in there are vasopressors (except heparin) and are usually used with arterial catheters https://github.com/MIT-LCP/eicu-code/blob/master/concepts/pivoted/pivoted-infusion.sql

Then use original tables: infusiondrug -> see above nursecharting -> everyone with an invasive blood pressure SELECT distinct nursingchartcelltypevallabel, count(*) FROM physionet-data.eicu_crd.nursecharting where lower(nursingchartcelltypevallabel) like "%arter%" group by nursingchartcelltypevallabel order by nursingchartcelltypevallabel

medication --> SELECT distinct routeadmin, count(*) FROM physionet-data.eicu_crd.medication where lower(routeadmin) like "%arterial%" group by routeadmin order by routeadmin

vital aperiodic table SELECT distinct cardiacoutput, count(*) FROM physionet-data.eicu_crd.vitalaperiodic where cardiacoutput is not NULL AND cardiacoutput >0.8 group by cardiacoutput order by cardiacoutput vital periodic table SELECT patientunitstayid, observationoffset, systemicmean, pamean FROM physionet-data.eicu_crd.vitalperiodic where (systemicmean is not NULL and systemicmean > 0) OR (pamean is not NULL and pamean > 0)

joamats commented 1 year ago

Shared by "Barros, Andrew J (ajb5d)" ajb5d@virginia.edu Paper: https://doi.org/10.1016/j.chest.2021.01.038 Code: https://github.com/ajb5d/ArterialLineBacteremia Doesn't seem to be as exhaustive as Tristan's approach though

joamats commented 1 year ago

If we exclude patients without arterial line, we're excluding roughly 25% of the pairs. However, this may not make sense because we're not sure if the arterial line information is accurate and may be missing for some patients/hospitals. Further, a patient with an arterial line can have a "O2 Sat %" value that is actually venous. If arterial_line == 0 OR arterial_line == 1 -> Mean SaO2 = 93.96% If arterial_line == 0 -> Mean SaO2 = 94.13% If arterial_line == 1 -> Mean SaO2 = 93.91% The arterial line information does not seem to subset the data to a cohort where SaO2 values are higher. I'd discard this approach. We can simply consider SaO2 values over 80%