💾

MIMIC 数据库教程

Medical Information Mart for Intensive Care IV(重症监护数据库)

MIMIC 概述

MIMIC-IV(MIT ICU 数据集)包含贝斯以色列狄肯尼斯医学中心 2008-2019 年 ICU 患者数据。 clinResearchKit 封装了 SQL 查询、队列构建和常见生存分析函数。

数据访问

需要预先安装 MIMIC-IV 本地数据库(PostgreSQL)或已提取的 CSV 数据。

适用场景

回顾性队列研究、ICU 死亡风险预测、住院时长分析。

数据合规:MIMIC 数据需完成 CITI 培训并签署数据使用协议后方可申请使用,禁止公开发布原始数据。

01 数据库连接(PostgreSQL)

library(clinResearchKit)

# 连接 MIMIC-IV 数据库
conn <- mimic_connect(
  host     = "localhost",
  port     = 5432,
  dbname   = "mimiciv",
  user     = "mimiciv",
  password = "your_password"
)

# 测试连接
mimic_ping(conn)

# 查询示例:30天内再入院患者数
mimic_query(conn, "
  SELECT COUNT(*) AS n_re admits
  FROM admissions
  WHERE hadm_id IN (
    SELECT hadm_id FROM admissions
    GROUP BY subject_id, hadm_id
    HAVING EXTRACT(DAY FROM outtime - admittime) < 30
  )
")

无 PostgreSQL?如果你只有 CSV 提取数据,可直接使用 CSV 加载方式(见下方"无数据库模式")。

02 队列构建

通过 ICD 编码、人口学信息和实验室指标构建研究队列。

# 构建心衰队列(ICD-10:I50.*)
cohort <- mimic_cohort(
  conn,
  icd_codes        = c("I50", "I11"),
  outcome_var      = "hospital_expire_flag",
  outcome_value    = 1,
  min_age          = 18,
  exclude_codes    = c("I26"),     # 排除肺栓塞
  min_los          = 1,              # 排除住院<1天
  extract_demographics = TRUE,
  extract_labs        = TRUE,
  extract_vitals       = TRUE
)

# 查看队列基本信息
str(cohort)
mimic_flowchart(cohort)

03 Table 1 与描述性分析

# 生成队列基线特征表(按出院结局分层)
tbl1 <- mimic_table1(
  cohort,
  strata    = "hospital_expire_flag",
  cat_vars   = c("sex", "insurance"),
  cont_vars  = c("age", "los", "sofa", "lactate"),
  export_path = "mimic_table1.xlsx"
)

# 人口学信息提取(单独调用)
demo <- mimic_extract_demographics(conn, hadm_ids = cohort$hadm_id)

04 KM 曲线与 Cox 回归

# Kaplan-Meier 生存曲线(住院死亡)
km_result <- mimic_km(
  cohort,
  time_var  = "los",             # 住院时长
  event_var = "hospital_expire_flag",
  strata    = "sex"               # 按性别分层
)

# 绘制 KM 曲线
mimic_km_plot(km_result, title = "ICU 住院死亡 KM 曲线")

# Cox 回归(30天死亡风险)
cox_result <- mimic_cox(
  cohort,
  time_var  = "los",
  event_var = "hospital_expire_flag",
  formula   = ~ age + sofa + lactate + sex
)

# 查看 HR
print_summary(cox_result)

05 无数据库模式(CSV 数据)

如果你没有部署 PostgreSQL,可以使用已提取的 CSV 数据。

# 加载已提取的 CSV 数据
cohort_csv <- data.table::fread("mimic_cohort.csv")

# 查看数据
head(cohort_csv)

# 使用 mimic_km(CSV 模式,自动识别非数据库输入)
km_csv <- mimic_km(
  cohort_csv,
  time_var  = "los",
  event_var = "hospital_expire_flag"
)

推荐:使用 CSV 模式更轻量,无需安装 PostgreSQL。 只需在 MIMIC 官方在线查询工具中导出 CSV 即可。