MIMIC数据库,如何查询住院病人尿素氮(BUN)值的分布?
BUN一般指尿素氮。尿素氮又称血尿素氮,是机体蛋白质的代谢终末产物,是一项检测肾小球的滤过功能的指标,一般在肾功能不全的失代偿期时或氮质血症时,血尿素氮会明显升高。进行该项指标的测定,主要用于诊断各种原发性和继发性肾小球肾炎、肾肿瘤、多囊肾等导致的慢性肾衰竭,急性肾衰竭等疾病,还可以作为肾衰竭时透析的评估充分性指标。
正常指标 成人正常值是3.2~7.1mmol/L,婴儿、儿童正常值是1.8~6.5mmol/L。需要注意的是,由于仪器精度不同、实验方法不同、实验室不同等因素的影响,不同医疗机构出具的化验单参考值可能存在差异。
MIMIC数据库中, 住院病人信息主要存储在admissions表 , 实验室指标信息主要存储在labevents表, 我们从这两个表入手查询
一,获取患者的真实年龄
mimiciv数据库为了保护患者的隐私,并没有直接记录患者的真实年龄,patients表中记录了两个关于年龄的字段:
anchor_age:患者相对anchor_year的相对年龄。
anchor_year:计算患者年龄的基准年份。
anchor_age并不是患者的入院时的真实年龄,而是根据anchor_year做了偏移,真实年龄的计算公式是:
患者的真实年龄=anchor_age+患者的入院时间-anchor_year
上图中的ROUND函数是将年龄转为2位小数。
上图小编使用到了DATETIME_DIFF函数,该函数为mimiciv官方函数,作用是求两个时间的差,这个函数小编是安装在mimiciv_derived模块中,如果大家不是安装在这个模块中,请把函数前缀替换成自己的模块名哈。
SELECT ad.subject_id, -- 患者表中记录的是年龄是脱敏数据,是一个相对年龄,必须经过转换才可得出患者的真实年龄 -- 年龄计算公式为 患者相对年龄+患者入院时间年份-偏移年份 MAX(ROUND(pa.anchor_age + mimiciv_derived.DATETIME_DIFF(ad.admittime, mimiciv_derived.DATETIME(pa.anchor_year, 1, 1, 0, 0, 0), 'YEAR'),2)) AS age
FROM admissions ad, patients pa
WHERE ad.subject_id = pa.subject_id
GROUP BY
ad.subject_id
二、 查询血尿素氮
我们知道血尿素氮在labevents表, 我们需要从中获取到itemid 是51006
实验室生物检测结果实验室检测事件数据,记录了与患者实验室检测结果相关的信息,如检测时间、检验指标、结果值等。 实验室事件表存储对单个患者进行的所有实验室测量的结果。其中包括血液学测量、血气、化学检测以及基因检测等不太常见的测试。 |
此表包含了病患的实验室生物检测结果,包括各种生化、血液和其他类型的检测结果
- labevent_id:实验室检查记录的唯一标识符。
- subject_id:患者的唯一标识符。
- hadm_id:入院号,指患者的住院标识符。
- specimen_id:样本的唯一标识符。
- itemid:检查项目的唯一标识符。
- order_provider_id:检查申请提供者的唯一标识符。
- charttime:记录时间,指实验室检查记录的时间。
- storetime:存储时间,指实验室检查记录被存储的时间。
- value:检查结果值。
- valuenum:检查结果数值。
- valueuom:检查结果单位。
- ref_range_lower:参考范围下限。
- ref_range_upper:参考范围上限。
- flag:检查结果标记,指示该结果是否异常。
- priority:检查优先级。
- comments:注释,包含有关实验室检查结果的其他信息
WITH agetbl AS
(
SELECT ad.subject_id,
-- 患者表中记录的是年龄是脱敏数据,是一个相对年龄,必须经过转换才可得出患者的真实年龄
-- 年龄计算公式为 患者相对年龄+患者入院时间年份-偏移年份
MAX(ROUND(p.anchor_age + mimiciv_derived.DATETIME_DIFF(ad.admittime,
mimiciv_derived.DATETIME(p.anchor_year, 1, 1, 0, 0, 0), 'YEAR'),2)) AS age
FROM mimiciv_hosp.admissions ad
INNER JOIN mimiciv_hosp.patients p
ON ad.subject_id = p.subject_id
-- WHERE
-- filter to only adults
-- mimiciv_derived.DATETIME_DIFF( p.dod, ad.admittime, 'YEAR') > 15
-- group by subject_id to ensure there is only 1 subject_id per row
group by ad.subject_id
)
, bun as
(
SELECT width_bucket(valuenum, 0, 280, 280) AS bucket, *
FROM mimiciv_hosp.labevents le
INNER JOIN agetbl
ON le.subject_id = agetbl.subject_id
WHERE itemid IN (51006) -- 血尿素氮 BUN
AND age > 15 -- 一般认为15岁以上区别儿童比较有研究意义
)
SELECT bucket as blood_urea_nitrogen, count(*), age
FROM bun
GROUP BY bucket,age
ORDER BY bucket, age;
mimic数据库使用介绍:
MIMIC数据库提取教程-提取某种疾病下的患者人口统计学指标
MIMIC-IV数据库衍生表格mimic_derived配置和使用
MIMIC-IV数据分析 - 使用Python进行心脏病案例分析
MIMIC-IV数据分析 - 使用Python进行心脏病案例分析(二)
MIMIC-IV数据分析 - 使用R语言探索icustay_detail视图
MIMIC数据提取教程 - 如何提取患者入ICU后第一个WBC和SpO2值
MIMIC数据提取教程 - 提取入住ICU第一天生命体征(血氧饱和度、血压、呼吸、体温)
MIMIC数据提取教程 - 提取血管紧张素受体阻滞剂(ARB)药物
MIMIC-IV-ED适合科研小白的安装方法(提供数据集下载)
MIMIC数据库, 使用Python研究万古霉素的剂量 (一)