Skip to content

Commit 317068a

Browse files
committed
fix rounding errors causing slight mismatches in concepts
1 parent 824b421 commit 317068a

19 files changed

Lines changed: 141 additions & 100 deletions

File tree

mimic-iv/concepts/demographics/weight_durations.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ WITH wt_stg AS (
66
, c.charttime
77
, CASE WHEN c.itemid = 226512 THEN 'admit'
88
ELSE 'daily' END AS weight_type
9-
-- TODO: eliminate obvious outliers if there is a reasonable weight
10-
, c.valuenum AS weight
9+
, ROUND(CAST(c.valuenum AS NUMERIC), 3) AS weight
1110
FROM `physionet-data.mimiciv_icu.chartevents` c
1211
WHERE c.valuenum IS NOT NULL
1312
AND c.itemid IN
@@ -16,6 +15,7 @@ WITH wt_stg AS (
1615
, 224639 -- Daily Weight
1716
)
1817
AND c.valuenum > 0
18+
AND c.valuenum < 1500
1919
)
2020

2121
-- assign ascending row number

mimic-iv/concepts/measurement/bg.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ WITH bg AS (
148148
, stg2 AS (
149149
SELECT bg.*
150150
, ROW_NUMBER() OVER (
151-
PARTITION BY bg.subject_id, bg.charttime ORDER BY s1.charttime DESC
151+
PARTITION BY bg.specimen_id ORDER BY s1.charttime DESC
152152
) AS lastrowspo2
153153
, s1.spo2
154154
FROM bg
@@ -165,7 +165,7 @@ WITH bg AS (
165165
, stg3 AS (
166166
SELECT bg.*
167167
, ROW_NUMBER() OVER (
168-
PARTITION BY bg.subject_id, bg.charttime ORDER BY s2.charttime DESC
168+
PARTITION BY bg.specimen_id ORDER BY s2.charttime DESC
169169
) AS lastrowfio2
170170
, s2.fio2_chartevents
171171
FROM stg2 bg

mimic-iv/concepts/measurement/urine_output_rate.sql

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,22 @@ WITH tm AS (
4848
, SUM(CASE WHEN DATETIME_DIFF(io.charttime, iosum.charttime, HOUR) <= 5
4949
THEN iosum.urineoutput
5050
ELSE NULL END) AS urineoutput_6hr
51-
, SUM(CASE WHEN DATETIME_DIFF(io.charttime, iosum.charttime, HOUR) <= 5
52-
THEN iosum.tm_since_last_uo
53-
ELSE NULL END) / 60.0 AS uo_tm_6hr
51+
, ROUND(CAST(
52+
SUM(CASE WHEN DATETIME_DIFF(io.charttime, iosum.charttime, HOUR) <= 5
53+
THEN iosum.tm_since_last_uo
54+
ELSE NULL END) / 60.0 AS NUMERIC
55+
), 6) AS uo_tm_6hr
5456
, SUM(CASE WHEN DATETIME_DIFF(io.charttime, iosum.charttime, HOUR) <= 11
5557
THEN iosum.urineoutput
5658
ELSE NULL END) AS urineoutput_12hr
57-
, SUM(CASE WHEN DATETIME_DIFF(io.charttime, iosum.charttime, HOUR) <= 11
58-
THEN iosum.tm_since_last_uo
59-
ELSE NULL END) / 60.0 AS uo_tm_12hr
59+
, ROUND(CAST(
60+
SUM(CASE WHEN DATETIME_DIFF(io.charttime, iosum.charttime, HOUR) <= 11
61+
THEN iosum.tm_since_last_uo
62+
ELSE NULL END) / 60.0 AS NUMERIC
63+
), 6) AS uo_tm_12hr
6064
-- 24 hours
6165
, SUM(iosum.urineoutput) AS urineoutput_24hr
62-
, SUM(iosum.tm_since_last_uo) / 60.0 AS uo_tm_24hr
66+
, ROUND(CAST(SUM(iosum.tm_since_last_uo) / 60.0 AS NUMERIC), 6) AS uo_tm_24hr
6367

6468
FROM uo_tm io
6569
-- this join gives you all UO measurements over a 24 hour period

mimic-iv/concepts/organfailure/kdigo_uo.sql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,26 @@ WITH uo_stg1 AS (
4545

4646
-- repeat the summations using the hours_since_previous_row column
4747
-- this gives us the amount of time the UO was calculated over
48-
, SUM(hours_since_previous_row) OVER
48+
, ROUND(CAST(SUM(hours_since_previous_row) OVER
4949
(
5050
PARTITION BY stay_id
5151
ORDER BY seconds_since_admit
5252
RANGE BETWEEN 21600 PRECEDING AND CURRENT ROW
53-
) AS uo_tm_6hr
53+
) AS NUMERIC), 6) AS uo_tm_6hr
5454

55-
, SUM(hours_since_previous_row) OVER
55+
, ROUND(CAST(SUM(hours_since_previous_row) OVER
5656
(
5757
PARTITION BY stay_id
5858
ORDER BY seconds_since_admit
5959
RANGE BETWEEN 43200 PRECEDING AND CURRENT ROW
60-
) AS uo_tm_12hr
60+
) AS NUMERIC), 6) AS uo_tm_12hr
6161

62-
, SUM(hours_since_previous_row) OVER
62+
, ROUND(CAST(SUM(hours_since_previous_row) OVER
6363
(
6464
PARTITION BY stay_id
6565
ORDER BY seconds_since_admit
6666
RANGE BETWEEN 86400 PRECEDING AND CURRENT ROW
67-
) AS uo_tm_24hr
67+
) AS NUMERIC), 6) AS uo_tm_24hr
6868
FROM uo_stg1
6969
)
7070

mimic-iv/concepts_duckdb/demographics/weight_durations.sql

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ WITH wt_stg AS (
55
c.stay_id,
66
c.charttime,
77
CASE WHEN c.itemid = 226512 THEN 'admit' ELSE 'daily' END AS weight_type,
8-
c.valuenum AS weight
8+
ROUND(CAST(c.valuenum AS DECIMAL(38, 9)), 3) AS weight
99
FROM mimiciv_icu.chartevents AS c
1010
WHERE
11-
NOT c.valuenum IS NULL AND c.itemid IN (226512, 224639) AND c.valuenum > 0
11+
NOT c.valuenum IS NULL
12+
AND c.itemid IN (226512, 224639)
13+
AND c.valuenum > 0
14+
AND c.valuenum < 1500
1215
), wt_stg1 AS (
1316
SELECT
1417
stay_id,

mimic-iv/concepts_duckdb/measurement/bg.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ WITH bg AS (
110110
), stg2 AS (
111111
SELECT
112112
bg.*,
113-
ROW_NUMBER() OVER (PARTITION BY bg.subject_id, bg.charttime ORDER BY s1.charttime DESC) AS lastrowspo2,
113+
ROW_NUMBER() OVER (PARTITION BY bg.specimen_id ORDER BY s1.charttime DESC) AS lastrowspo2,
114114
s1.spo2
115115
FROM bg
116116
LEFT JOIN stg_spo2 AS s1
@@ -121,7 +121,7 @@ WITH bg AS (
121121
), stg3 AS (
122122
SELECT
123123
bg.*,
124-
ROW_NUMBER() OVER (PARTITION BY bg.subject_id, bg.charttime ORDER BY s2.charttime DESC) AS lastrowfio2,
124+
ROW_NUMBER() OVER (PARTITION BY bg.specimen_id ORDER BY s2.charttime DESC) AS lastrowfio2,
125125
s2.fio2_chartevents
126126
FROM stg2 AS bg
127127
LEFT JOIN stg_fio2 AS s2

mimic-iv/concepts_duckdb/measurement/urine_output_rate.sql

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,29 +39,35 @@ WITH tm AS (
3939
ELSE NULL
4040
END
4141
) AS urineoutput_6hr,
42-
SUM(
43-
CASE
44-
WHEN DATE_DIFF('HOUR', iosum.charttime, io.charttime) <= 5
45-
THEN iosum.tm_since_last_uo
46-
ELSE NULL
47-
END
48-
) / 60.0 AS uo_tm_6hr,
42+
ROUND(
43+
CAST(SUM(
44+
CASE
45+
WHEN DATE_DIFF('HOUR', iosum.charttime, io.charttime) <= 5
46+
THEN iosum.tm_since_last_uo
47+
ELSE NULL
48+
END
49+
) / 60.0 AS DECIMAL(38, 9)),
50+
6
51+
) AS uo_tm_6hr,
4952
SUM(
5053
CASE
5154
WHEN DATE_DIFF('HOUR', iosum.charttime, io.charttime) <= 11
5255
THEN iosum.urineoutput
5356
ELSE NULL
5457
END
5558
) AS urineoutput_12hr,
56-
SUM(
57-
CASE
58-
WHEN DATE_DIFF('HOUR', iosum.charttime, io.charttime) <= 11
59-
THEN iosum.tm_since_last_uo
60-
ELSE NULL
61-
END
62-
) / 60.0 AS uo_tm_12hr,
59+
ROUND(
60+
CAST(SUM(
61+
CASE
62+
WHEN DATE_DIFF('HOUR', iosum.charttime, io.charttime) <= 11
63+
THEN iosum.tm_since_last_uo
64+
ELSE NULL
65+
END
66+
) / 60.0 AS DECIMAL(38, 9)),
67+
6
68+
) AS uo_tm_12hr,
6369
SUM(iosum.urineoutput) AS urineoutput_24hr,
64-
SUM(iosum.tm_since_last_uo) / 60.0 AS uo_tm_24hr
70+
ROUND(CAST(SUM(iosum.tm_since_last_uo) / 60.0 AS DECIMAL(38, 9)), 6) AS uo_tm_24hr
6571
FROM uo_tm AS io
6672
LEFT JOIN uo_tm AS iosum
6773
ON io.stay_id = iosum.stay_id

mimic-iv/concepts_duckdb/organfailure/kdigo_uo.sql

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,29 @@ WITH uo_stg1 AS (
3838
ORDER BY seconds_since_admit NULLS FIRST
3939
RANGE BETWEEN 86400 PRECEDING AND CURRENT ROW
4040
) AS urineoutput_24hr,
41-
SUM(hours_since_previous_row) OVER (
42-
PARTITION BY stay_id
43-
ORDER BY seconds_since_admit NULLS FIRST
44-
RANGE BETWEEN 21600 PRECEDING AND CURRENT ROW
41+
ROUND(
42+
CAST(SUM(hours_since_previous_row) OVER (
43+
PARTITION BY stay_id
44+
ORDER BY seconds_since_admit NULLS FIRST
45+
RANGE BETWEEN 21600 PRECEDING AND CURRENT ROW
46+
) AS DECIMAL(38, 9)),
47+
6
4548
) AS uo_tm_6hr,
46-
SUM(hours_since_previous_row) OVER (
47-
PARTITION BY stay_id
48-
ORDER BY seconds_since_admit NULLS FIRST
49-
RANGE BETWEEN 43200 PRECEDING AND CURRENT ROW
49+
ROUND(
50+
CAST(SUM(hours_since_previous_row) OVER (
51+
PARTITION BY stay_id
52+
ORDER BY seconds_since_admit NULLS FIRST
53+
RANGE BETWEEN 43200 PRECEDING AND CURRENT ROW
54+
) AS DECIMAL(38, 9)),
55+
6
5056
) AS uo_tm_12hr,
51-
SUM(hours_since_previous_row) OVER (
52-
PARTITION BY stay_id
53-
ORDER BY seconds_since_admit NULLS FIRST
54-
RANGE BETWEEN 86400 PRECEDING AND CURRENT ROW
57+
ROUND(
58+
CAST(SUM(hours_since_previous_row) OVER (
59+
PARTITION BY stay_id
60+
ORDER BY seconds_since_admit NULLS FIRST
61+
RANGE BETWEEN 86400 PRECEDING AND CURRENT ROW
62+
) AS DECIMAL(38, 9)),
63+
6
5564
) AS uo_tm_24hr
5665
FROM uo_stg1
5766
)

mimic-iv/concepts_postgres/demographics/icustay_detail.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ SELECT
2121
ie.intime AS icu_intime,
2222
ie.outtime AS icu_outtime,
2323
ROUND(
24-
CAST(CAST(CAST(EXTRACT(EPOCH FROM DATE_TRUNC('hour', ie.outtime) - DATE_TRUNC('hour', ie.intime)) / 3600 AS BIGINT) AS DOUBLE PRECISION) / 24.0 AS DECIMAL),
24+
CAST(CAST(CAST(EXTRACT(EPOCH FROM DATE_TRUNC('hour', ie.outtime) - DATE_TRUNC('hour', ie.intime)) / 3600 AS BIGINT) AS DOUBLE PRECISION) / 24.0 AS DECIMAL(38, 9)),
2525
2
2626
) AS los_icu,
2727
DENSE_RANK() OVER (PARTITION BY ie.hadm_id ORDER BY ie.intime NULLS FIRST) AS icustay_seq, /* first ICU stay *for the current hospitalization* */

mimic-iv/concepts_postgres/demographics/weight_durations.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ WITH wt_stg AS (
55
SELECT
66
c.stay_id,
77
c.charttime,
8-
CASE WHEN c.itemid = 226512 THEN 'admit' ELSE 'daily' END AS weight_type, /* TODO: eliminate obvious outliers if there is a reasonable weight */
9-
c.valuenum AS weight
8+
CASE WHEN c.itemid = 226512 THEN 'admit' ELSE 'daily' END AS weight_type,
9+
ROUND(CAST(c.valuenum AS DECIMAL(38, 9)), 3) AS weight
1010
FROM mimiciv_icu.chartevents AS c
1111
WHERE
1212
NOT c.valuenum IS NULL
1313
AND c.itemid IN (226512, /* Admit Wt */224639 /* Daily Weight */)
1414
AND c.valuenum > 0
15+
AND c.valuenum < 1500
1516
), wt_stg1 /* assign ascending row number */ AS (
1617
SELECT
1718
stay_id,

0 commit comments

Comments
 (0)