一根动脉线的因果难题 — MIMIC-II 导管临床表

1,776 人 / 46 个变量 / 单表 CSV

来源 https://physionet.org/content/mimic2-iaccd/1.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 8
一根动脉线的因果难题 — MIMIC-II 导管临床表

信息速览

数据集名称一根动脉线的因果难题 — MIMIC-II 导管临床表
数据类型结构化表格,队列数据,衍生数据集,开放许可
规模1776名患者,46个变量
接入方式https://physionet.org/content/mimic2-iaccd/1.0/
AI 就绪度

重症监护里最难回答的问题,往往不是某项指标高不高,而是一项操作到底救了人还是害了人。动脉留置导管(indwelling arterial catheter,IAC)正是这样一个例子:它让血压可以被逐搏读取、让血气分析不必反复穿刺,同时也带来血流感染、血栓与血管并发症的风险。要判断它对死亡的影响,随机对照试验几乎做不成,原因有两层:伦理上很难把危重病人随机分到"不监测"的一侧,操作上又几乎没有医生愿意在入组后放弃自己习惯的监测手段。于是所有证据都只能来自观察性数据,而观察性数据里,插管与死亡之间的相关性从头到尾混着病情本身。

2015 年,Hsu 等人在 Chest 上发表了一项倾向评分分析,把问题收窄到一个相对干净的切口:机械通气、且不需要升压药的循环稳定患者。2016 年,MIT 计算生理学实验室的 Jesse Raffa 把这项研究的队列整理成一张 1,776 人的宽表,作为 Springer 教科书《Secondary Analysis of Electronic Health Records》第 16 章的案例数据放上 PhysioNet。这就是 IACCD。

它很小,小到不像一个"数据集":一个 CSV、四十六列、一份文本字典、一个装着 SQL 与 R 代码的压缩包。它也不完整,没有患者编号,没有时间序列,没有波形。但它把一条完整的因果推断链——从数据库里捞人、定义暴露、定义结局、匹配、检验、写结论——压缩成一份人人可复现的教具,而这恰好是绝大多数重症公开库不愿承担的那部分工作。下面这张 MIMIC-II 导管临床表值不值得用,取决于你要的是"跑得动"还是"算得准";两者在这份数据上的答案恰好相反。

一屏速览

维度 内容
全名 Clinical data from the MIMIC-II database for a case study on indwelling arterial catheters
常用简称 IACCD(Indwelling Arterial Catheter Clinical dataset)
发布平台 PhysioNet,RRID:SCR_007345
贡献者 Jesse Raffa,MIT 计算生理学实验室(Laboratory for Computational Physiology)
首次发布 2016 年 10 月 28 日,版本 1.0(也是唯一版本)
版本与 DOI v1.0 对应 10.13026/C2NC7F;最新版 DOI 为 10.13026/1r5h-4p36
规模 1,776 名患者
变量数 46 个,官方 Methods 段与数据字典逐条对应
行粒度 一人一行(首次成人 ICU 住院),文件行数未在官方页明写
暴露 aline_flg,是否使用动脉留置导管,0/1
主结局 day_28_flg,28 天内死亡,0/1
时间窗 入 ICU 首日观察值 + 28 天结局 + 住院与 ICU 天数
文件构成 full_cohort_data.csv、data_dictionary.txt、aline-mimic-ii-master.zip
数据许可 Open Data Commons Attribution License v1.0(ODC-BY 1.0)
代码许可 配套 GitHub 仓库为 MIT License,与数据许可不同
典型用途 倾向评分与匹配教学、死亡结局建模基线、重症表格数据管线演示

§1 它要解决的具体麻烦

1.1 一根导管的两面:临床争议与因果陷阱

动脉留置导管在重症监护单元里几乎是"标配"的一部分。它的直接价值很实在:连续血压波形让血管活性药物的滴定有据可依,动脉血气可以随时抽,不必每次都做一次穿刺。它的风险同样实在:导管相关血流感染、血栓、假性动脉瘤、穿刺部位出血,在凝血功能差的病人身上都不是小概率事件。

于是临床上一直有一个没有定论的问题:插管带来的监测收益,能不能盖过它带来的风险?这个问题之所以难,不在于数据少,而在于插管这个动作本身携带着病情信息。医生不会给一个平稳的病人插动脉线,也不会给一个濒危的病人不插。所以"插管组死亡率更高"这句话,既可能是导管有害,也可能只是"插管组本来就更重"。这就是典型的适应证混杂(confounding by indication)。

Hsu 等人 2015 年在 Chest 上的做法是收窄人群:只取机械通气、且不需要升压药支持的循环稳定患者。在这个人群里,插管与否更多取决于科室习惯与监测偏好,而不是病情轻重,混杂因此被压小。再用倾向评分把两组的基线拉到可比,估计插管与死亡的关联。

IACCD 就是这项研究的数据快照。它不是在 MIMIC-II 上新采的一批数据,而是把当年那套抽取逻辑固化下来,配上教科书第 16 章的逐步讲解,让任何一个人都能把这条链从头走一遍。

1.2 三条常见的错误期待

第一条,期待它是"MIMIC-II 的缩小版"。 它不是。MIMIC-II 是包含床边监护、检验、用药、病程记录的多表数据库,而这张表只有 46 列汇总值,没有任何时间序列,也没有任何一张可以回连 MIMIC-II 的外键。想拿它去研究液体复苏曲线、研究用药时序,一步都走不动。

第二条,期待它带波形或血气原始值。 表里与血气有关的只有三列:abg_count(动脉血气检测次数)、po2_first、pco2_first。后两者是首日单点值,不是序列,也不是完整血气报告,没有 pH、没有碱剩余、没有乳酸。

第三条,期待它可以直接当脓毒症数据集。 字典里确实有一列 sepsis_flg,但官方在其后的括号里写得很清楚:absent (0) for all——这一列在全部行里恒为 0。原因不是记录缺失,而是入组时就把脓毒症患者排除了(§2.4 的建表条件里有 sepsis_flg=0 这一条)。它是一列被保留下来却没有任何信息量的字段,把它当特征喂进模型只会多出一列常数。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
倾向评分匹配的完整教学案例 暴露、结局、十余个基线协变量齐全,原著代码可下载 够,这是它被造出来的唯一理由
28 天死亡率的基线模型 1,776 行、46 列,二分类结局明确 够做基线,不够做结论
重症表格数据的清洗练习 有拼写错误、有常数列、有反向编码的标志位 够,而且比干净数据更有教学价值
时序建模(生命体征轨迹) 只有首日单点值 不够,一列一条轨迹都做不出
波形或信号分析 无 不够,一条波形都没有
与 MIMIC-II 原始记录回连 无患者编号、无住院号 不够,这是它最硬的限制
脓毒症亚组分析 sepsis_flg 全为 0 不够
多中心外部验证 单一来源、单一中心 不够
药物或干预的剂量-反应分析 无用药记录 不够

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你要教一群临床医生读倾向评分,缺一个能当场跑完的例子 数据只有一张表,读入内存不超过一秒,匹配与检验可以现场演示 直接用官方 R 代码,把匹配前后的基线表并排投出来
你在写重症预测模型,需要一个"小而干净"的冒烟测试集 46 列、二分类结局、编码规则明确 只用它验证管线通不通,不要用它报性能
你在做观察性研究的因果方法比较(PSM、IPTW、双稳健估计) 同一份暴露与结局,可反复换方法对照 固定随机种子与匹配半径,比较点估计与置信区间
你想复现一篇已发表的重症研究 原著论文、教科书章节、抽取 SQL、分析代码四件套齐全 注意版本差异:复现的是 2016 年快照,不是 2015 年论文的原始分析集
你在教数据工程,想讲"派生数据集为什么会失真" 抽取脚本与字典的每一处不一致都可现场指认 把 §2.2 的字段表与字典原文对照讲
你要论证"公开数据也需要读文档" 三处拼写或语义瑕疵都在官方页面上白纸黑字 用「常见误读」表当讲义

1.5 一句话判断

它不是用来训练模型的,是用来训练判断的:一张四十六列的表,把"观察性数据能说到哪一步"这件事讲得比很多方法学教材都具体。

1.6 不适合谁:四条边界

不适合拿来做规模训练。 1,776 行、46 列,任何梯度提升树在几分钟内就能把它背下来。用它报一个很高的 AUC 并不困难,但那个数字说明不了任何问题,因为样本量与特征量之比太低,交叉验证的方差会吞掉大部分差异。

不适合拿来做任何时间维度的研究。 所有临床观察值都锚定在"入 ICU 首日"这一个点上,mort_day_censored 是唯一带时间语义的列,而且它只记录到死亡或删失那一天。没有逐日轨迹,就没有轨迹建模。

不适合当成 MIMIC-II 的入口。 表里没有 subject_id、hadm_id、icustay_id 中的任何一个。这意味着你无法把这些行映射回原始数据库,也就无法补充波形、用药、护理记录。想要原始数据,必须单独申请 MIMIC-II 或改用 MIMIC-III/IV。

不适合做外部验证的"外部"。 它来自单一医学中心的单一时间段,人群被限制在机械通气且循环稳定的患者。把它当外部集去检验一个多中心模型,得到的差异里既有分布偏移,也有入组条件差异,两者无法拆开。

§2 数据构成与规格

2.1 三个文件,装下一整个研究

官方 Data Description 段点名的文件只有三个,没有任何子目录,没有分卷,也没有按年份或中心拆分的批次:

文件 形态 内容 使用位置
full_cohort_data.csv 逗号分隔文本,首行为变量名 1,776 名患者的 46 个汇总变量 分析的唯一数据来源
data_dictionary.txt 纯文本 46 个字段的逐条释义,官方页面原样转载 建数据字典、写代码本
aline-mimic-ii-master.zip 压缩包 从 MIMIC-II 抽取数据所用的 SQL,以及 R 与 Stata 的分析脚本 复现抽取逻辑与统计流程

值得注意的是官方把这三样东西的定位写得很清楚:CSV 是数据,字典是语义,压缩包是可复现性。三者缺一,这个数据集就退化成"一堆不知道含义的数字"。而绝大多数人下载时只会拿走第一个。

另一个容易被忽略的细节:压缩包里的代码是从 GitHub 仓库 MIT-LCP/aline-mimic-ii 打包的,仓库创建于 2014 年 7 月,最后一次推送在 2017 年 10 月。也就是说,PhysioNet 上的数据是一次性冻结的快照,而代码仓库在发布之后还有过改动。两者之间存在时间差,这是复现时第一个要对齐的地方。

2.2 四十六个字段的完整字典

下面按用途把 46 个字段分成五组列出。左列是变量名(与 CSV 表头逐字一致),第二列是官方字典的原始释义,第三列是取值与单位,第四列是使用时真正要留意的地方。

第一组:入组场景与暴露(6 个)

字段 字典原文 取值与单位 注意
aline_flg IAC used (binary, 1 = year, 0 = no) 0 / 1 官方把 yes 误写成 year,是拼写错误;另注意入组已剔除首小时就有导管者
service_unit type of service unit 字符:FICU、MICU、SICU 三个科室,不是三个病区编号
service_num service as a numeric (binary: 0 = MICU or FICU, 1 = SICU) 0 / 1 把 FICU 与 MICU 合并成一类,是二值化后的版本
day_icu_intime day of week of ICU admission 字符,星期 入 ICU 的星期几,不是日期
day_icu_intime_num day of week of ICU admission (numeric, corresponds with day_icu_intime) 数值,与字符列一一对应 与上一列信息重复,建模时二选一
hour_icu_intime hour of ICU admission (numeric, hour of admission using 24hr clock) 0–23 24 小时制,可当"夜间入院"的代理变量

第二组:结局与时长(7 个)

字段 字典原文 取值与单位 注意
day_28_flg death within 28 days 0 / 1 官方明示的主结局
hosp_exp_flg death in hospital 0 / 1 院内死亡,随访窗比 28 天长
icu_exp_flg death in ICU 0 / 1 ICU 内死亡,是最窄的一个结局
mort_day_censored day post ICU admission of censoring or death 天,数值 时间变量,锚点是入 ICU 当天
censor_flg censored or death (binary: 0 = death, 1 = censored) 0 / 1 编码方向与直觉相反:0 才是死亡
icu_los_day length of stay in ICU 天,数值 与死亡结局高度耦合,不能当普通协变量
hospital_los_day length of stay in hospital 天,数值 同上,且包含 ICU 之外的时间

第三组:人口学与严重度评分(6 个)

字段 字典原文 取值与单位 注意
age age at baseline 岁,数值 抽取脚本对超过 120 岁的记录统一改写为 91.4,见 §2.4
gender_num patient gender (1 = male; 0=female) 0 / 1 没有留缺失档位
weight_first first weight kg,数值 首个体重记录,可能来自床秤或估算
bmi patient BMI 数值,无单位标注 由身高体重算出,身高来源未说明
sapsi_first first SAPS I score 分值,数值 简化急性生理评分第一版,不是 SAPS II
sofa_first first SOFA score 分值,数值 序贯器官衰竭评分,首日值

第四组:十个合并症标志(10 个)

字段 字典原文 取值 注意
sepsis_flg sepsis present (binary: 0 = no, 1 = yes – absent (0) for all) 0 / 1 全部为 0 是入组时排除脓毒症的结果,见 §2.4
chf_flg Congestive heart failure 0 / 1 充血性心力衰竭
afib_flg Atrial fibrillation 0 / 1 心房颤动
renal_flg Chronic renal disease 0 / 1 慢性肾病
liver_flg Liver Disease 0 / 1 肝病
copd_flg Chronic obstructive pulmonary disease 0 / 1 慢性阻塞性肺疾病
cad_flg Coronary artery disease 0 / 1 冠心病
stroke_flg Stroke 0 / 1 卒中
mal_flg Malignancy 0 / 1 恶性肿瘤
resp_flg Respiratory disease (non-COPD) 0 / 1 非慢阻肺的呼吸系统疾病

第五组:首日生理、化验与入量(17 个)

字段 字典原文 取值与单位 注意
map_1st Mean arterial pressure mmHg,数值 平均动脉压,首日
hr_1st Heart Rate 数值,字典未标单位 心率,按惯例为次/分
temp_1st Temperature 华氏度(F),数值 华氏,不是摄氏,直接当摄氏用会得到荒唐值
spo2_1st S_pO_2 %,数值 脉搏血氧饱和度
abg_count arterial blood gas count 次数,数值 首日动脉血气检测次数,是"监测强度"的代理
wbc_first first White blood cell count K/uL,数值 白细胞
hgb_first first Hemoglobin g/dL,数值 血红蛋白
platelet_first first Platelets K/u(字典写作 K/u, numericL) 单位与类型标注均有笔误
sodium_first first Sodium mEq/L,数值 钠
potassium_first first Potassium mEq/L,数值 钾
tco2_first first Bicarbonate mEq/L,数值 碳酸氢根,不是总二氧化碳分压
chloride_first first Chloride mEq/L,数值 氯
bun_first first Blood urea nitrogen mg/dL,数值 尿素氮
creatinine_first first Creatinine mg/dL,数值 肌酐
po2_first first PaO_2 mmHg,数值 动脉氧分压
pco2_first first PaCO_2 mmHg,数值 动脉二氧化碳分压
iv_day_1 input fluids by IV on day 1 mL,数值 首日静脉入量,唯一一个"治疗"类变量

把五组加起来是 6 + 7 + 6 + 10 + 17 = 46,与官方 Methods 段声明的变量数一致。这个核对不是文字游戏:字典里任何一个字段被漏抄,都会让下游的"46 列"对不上,而复现别人的分析时,第一件要确认的事就是列数对不对。

2.3 一行数据的解剖

这张表没有病例号,所以"一行"只能靠字段之间的关系来读。把一行摊开,它讲的是这样一个故事:某位成人患者在某天某个钟点被收进某个 ICU(service_unit、day_icu_intime、hour_icu_intime),入科首个 24 小时里量到一组生命体征(map_1st、hr_1st、temp_1st、spo2_1st)、一组化验(九项常规加两项血气)、做过若干次血气(abg_count)、输过若干毫升液体(iv_day_1),既往带着若干合并症(十个标志位),病情严重度用两个评分概括(sapsi_first、sofa_first),期间有没有插动脉线(aline_flg),最后的结局落在那四个死亡标志与两个住院天数上。

读入这一行只需要两行代码:

import pandas as pd

#-- 一个文件就是全部数据;没有表间连接,没有主键
df = pd.read_csv('full_cohort_data.csv')

print(df.shape)                      #-- 行数 x 46
print(df.columns.tolist())           #-- 46 个列名,顺序不保证与字典一致
print(df.dtypes.value_counts())      #-- 数值列与字符列各占多少

shape 的第二维应当正好是 46。如果读出来是 47 或更多,多半是 CSV 里多了一个行索引列(pandas 在导出时默认写入 Unnamed: 0),需要 index_col=0 处理。这个坑在派生数据集里极其常见,而官方页不会提醒,因为它描述的是原始文件而不是你手上的副本。

2.4 行粒度、主键与"没有 ID"这件事

抽取脚本 mimic_aline_cohort.sql 的起点是一段带三条过滤的查询:取 SUBJECT_ICUSTAY_SEQ=1(每名患者的首次 ICU 住院)、ICUSTAY_AGE_GROUP='adult'(成人)、hadm_id 非空。第一条尤其关键——它保证了同一个患者在一次住院里只会出现一行,行与行之间在患者层面互相独立。

问题在于,这三条限制体现在 SQL 里,却没有体现在发布出来的 CSV 里:

信息 抽取脚本里有 发布 CSV 里有 后果
患者编号 subject_id 有,是查询的起点 无 无法回连 MIMIC-II
住院号 hadm_id 有 无 无法与账单、诊断表对接
ICU 住院号 icustay_id 有 无 无法接波形与护理记录
首次住院标记 有(SUBJECT_ICUSTAY_SEQ=1) 无 只能信官方"一人一行"的说明
入组条件(通气、无升压药、非脓毒症) 有,在最终建表语句的 where 里 无 只能读 SQL 才知道人群怎么来的

最后一行是核验过程中最有价值的一处发现。mimic_aline_data.sql 的末段有一句建表语句,把中间表裁成最终分析集,条件是五个并用:

#-- 摘自 aline-mimic-ii-master.zip 的 mimic_aline_data.sql 末段
create table aline_cohort_data_june15 as
select a.*, coalesce(m.treated, -1) as matched_flg
from aline_mimic_data_april15 a
left join aline_match m on m.icustay_id = a.icustay_id
where initial_aline_flg = 0      #-- 入科首小时没有动脉线
  and vent_1st_24hr   = 1        #-- 首日 24 小时内上过呼吸机
  and sepsis_flg      = 0        #-- 排除脓毒症
  and vaso_flg        = 0        #-- 排除用过升压药
  and service_num     <= 1;      #-- 排除 CCU 与 CSRU

五条条件解释了三件在别处看不懂的事:为什么字典里的 sepsis_flg 注明"全部为 0"(因为脓毒症患者在入组时就被排掉了);为什么 service_num 只剩 0 与 1 两档(因为 CCU 记为 2、CSRU 记为 3,都被 <=1 排除);以及为什么暴露的语义是"后来插的管"而不是"有没有插管"(因为 initial_aline_flg=0 已经把入科首小时就有导管的患者剔除)。

这五条也带来一个新的麻烦:最终表里多出一列 matched_flg(-1 表示未进入匹配),而发布的 46 列字典里没有它。合理的解释是发布前又做了一次列裁剪,但页面没有说明裁剪规则。想逐列对齐 CSV 与字典,必须拿到文件本体;这一步在本次核验中因 403 无法完成。

2.5 宽表与长表:与 MIMIC 原生结构的差别

MIMIC 系列的原生结构是长表:chartevents 一行一次测量,labevents 一行一个检验结果,一个患者可能有上万行。IACCD 走的是完全相反的路——把每个患者的多条记录折叠成一行,每个概念只保留"首个"或"首日汇总"。

维度 MIMIC 原生长表 IACCD 宽表
行单位 一次测量、一次检验 一名患者
时间分辨率 精确到分钟 只有"首日"一个锚点
变量数 数千个 itemid 46 列
缺失表达 没有那一行 该单元格留空
关联方式 靠 ID 多表连接 无 ID,无法连接
分析门槛 需要写复杂的抽取 SQL 一行 read_csv 即可
典型用途 可复现研究、模型训练 教学、快速基线、方法对照

这张对照表解释了两类数据集为什么不能互相替代。长表保留了全部信息,也把清洗成本转嫁给了使用者;宽表把清洗成本前置到作者身上,代价是丢掉一切无法折叠成单值的东西。教学场景需要后者,研究场景需要前者。

折叠过程中丢掉的东西,可以用一个字段讲清楚。abg_count 记录的是"首日做了几次动脉血气",一个整数;而在长表里,每一次血气都是一个带时间戳的对象,含 pH、氧分压、二氧化碳分压、碳酸氢根、碱剩余、乳酸,以及当时的吸氧浓度。折叠之后,十次血气变一个"10",剩下九个数字连同时间信息一起消失。这不是作者偷懒,而是宽表的定义使然:一行要容纳一个人,就只能留下每类信息的第一个值或汇总量。理解这一点,就不会再问"为什么它没有乳酸"——它连"第几次血气"都没有。

2.6 时间的三个锚点

表里的时间只有三个锚点,混用会直接算错:

锚点 字段 语义 误用后果
入 ICU 当天 所有 _first、_1st、iv_day_1、abg_count 入科后首个 24 小时内的值 当成"入院时"会与住院总时长错位
入 ICU 后第 N 天 mort_day_censored 死亡或删失发生在第几天 当日期用会得到 1970 年附近的假日期
出院 hospital_los_day 住院总天数 与 28 天窗口混用会切错随访期

day_28_flg 与 mort_day_censored 的组合才是完整的生存信息:前者是二分类结局,后者是时间与删失。只取前者会丢掉"什么时候死"的信息,只取后者会丢掉 28 天这个临床常用的判定窗。教科书第 16 章的做法是两者并用——先看 28 天死亡率,再做生存曲线。

§3 它是谁的数据:一个实验室的教学遗产

3.1 贡献者与托管方

署名只有一个人:Jesse Raffa,隶属 MIT 计算生理学实验室。PhysioNet 侧的角色是托管平台(RRID:SCR_007345),负责长期保存与版本发布,不参与数据生成。

这种"单人署名 + 平台托管"的组合在 PhysioNet 上很常见,但它带来的一个后果值得说清:数据的口径由作者一人决定,没有学会或联合体背书。好处是决策快、文档能写得像讲义;坏处是当口径与后续文献不一致时,没有一个外部委员会来裁定哪个才算"官方"。本文遇到的两处自相矛盾(章节号与参考文献编号,见 §3.2)就属于这类问题——不是谁抄错了,而是同一份文档在不同时间被改过。

还有一层背景值得点出:这套数据是教材的副产品,而教材的读者是临床医生与公共卫生研究者,不是机器学习工程师。这决定了很多设计——变量取"首日单点值"而不是时序,是因为临床讲课习惯用"入科时的情况"作起点;暴露取二值而不是剂量,是因为临床上关心的是"插没插";结局取 28 天而不是 30 天或 90 天,是因为这是重症文献里最常用的判定窗。理解了作者面向谁写作,很多看起来"不合理"的设计就变得合理了。

3.2 一条时间线,三处对不上

时间 事件 出处
2014 年 7 月 17 日 配套 GitHub 仓库建立,抽取脚本开始迭代 仓库元数据
2015 年 8 月 Hsu 等人的倾向评分分析发表于 Chest 148 卷 6 期 官方 References
2016 年 6 月 9 日 PhysioNet 挂出"新增数据库 IACCD"公告 官方页公告区
2016 年 Springer 教科书《Secondary Analysis of Electronic Health Records》出版 官方 References
2016 年 10 月 28 日 数据集以 1.0 版正式发布 官方页版本区
2017 年 10 月 13 日 配套仓库最后一次推送 仓库元数据

三处"对不上"分别是:

第一,公告区说这项数据用于教科书"第 5 章 Data Analysis",而 Abstract 与 Usage Notes 都写"第 16 章"。同一份页面,两个章节号。

第二,正文的引用标注与文末参考文献的排列顺序错位。正文里 [1] 指向 Hsu 的研究、[2] 指向教科书、[3] 指向 MIMIC-II、[4] 指向 GitHub 代码;文末列表的实际顺序却是教科书、Hsu、Saeed 的 MIMIC-II 论文、GitHub。按标注去查第 1 条会查到教科书。

第三,发布日与公告日相差四个月。公告在 6 月,正式版本在 10 月,中间这段时间文件是否可下载、下载到的是哪个版本,页面没有交代。

这三处都不影响数据本身,但会影响引用。写论文时若照抄页面的 [1],就会把 Hsu 误标成教科书章节。

3.3 采集场景:一个被筛过的人群

官方对人群的描述分散在三处,拼起来才是完整画像:

来源段落 原话要点 推出的边界
Abstract 血流动力学稳定的呼吸衰竭患者 排除了需要升压药支持的休克病人
Background Hsu 等人的研究对象为机械通气且不需升压药者 入组要求首日机械通气
Usage Notes 首日机械通气、观察 28 天死亡 暴露与结局都锚在 ICU 首日
抽取脚本上游 首次成人 ICU 住院、成人年龄组 每人一行、不含儿童、不含再次入科
抽取脚本末段 首小时无导管、首日通气、无脓毒症、无升压药、排除 CCU 与 CSRU 与论文入组条件逐条对应

四条叠起来,得到的是一个相当窄的人群:成人、首次进 ICU、首日上了呼吸机、循环还撑得住、没有用升压药。这类病人在 ICU 里既不是最重的,也不是最轻的,恰好是"插不插动脉线"最依赖医生习惯的那一段。研究设计上的精妙之处正在这里,代价是这张表不能代表整个 ICU 人群。

3.4 四层来源,一层比一层窄

层次 内容 规模 拿到什么
第一层 MIMIC-II 原始数据库 多表、含波形与全部记录 需要单独申请,本文不涉及
第二层 抽取脚本圈定的队列 首次成人 ICU 住院,脚本注释里出现过 23455 这个中间计数 压缩包里的 SQL
第三层 论文入组后的人群 1,776 人 就是发布出来的 CSV
第四层 教科书第 16 章的分析样本 在 1,776 人上再做匹配与完整案例筛选 需要跑 R 代码才能得到

分清这四层,能避免一个常见的误会:把 1,776 当成"MIMIC-II 里插过动脉线的人数"。它不是。MIMIC-II 里插过动脉线的 ICU 住院远多于这个数,1,776 是经过三轮收窄之后剩下的教学样本。

§4 它最独特的东西

4.1 稀缺的不是数据,是"可复现的教学闭环"

公开的重症数据库不少,公开的带教科书的派生队列极少。多数派生数据集只给结果不给过程:给你一张表,告诉你可以做预测,然后就没有然后了。IACCD 给的是过程——从 SQL 怎么圈人,到倾向评分怎么估、怎么匹配、怎么检验,再到结果怎么读,全都写在同一本书的同一章里,代码还放在仓库里。

这个闭环有三个可验证的组成部分:抽取脚本(Data_Extraction/ 下的五个 SQL 文件,含队列构建、变量抽取、血气配对与配对数据生成)、分析脚本(Data_Analysis/ 下 R 与 Stata 两套,包含倾向评分匹配、交叉验证、配对检验)、成图脚本(Figures_Tables/ 下的 gnuplot 与 Graffle 源文件)。三样东西齐全,意味着别人可以逐行核对你的每一步,而不只是核对最终那个数字。

4.2 与其他重症公开资源的差异

资源 形态 规模量级 与 IACCD 的关系
MIMIC-II 原始库 多表关系库 + 波形 数千患者、上万条记录每人 IACCD 的上游,需单独申请
MIMIC-III 临床库 26 张表的关系库 四万余人次 同一机构的后继版本,结构更复杂
MIMIC-IV 临床库 模块化关系库 三十余万人次 更新的后继版本,含更完整的链接键
eICU-CRD 多中心关系库 二十余万次住院 唯一能做"多中心"的对照
IACCD 单表宽表 1,776 人 唯一自带完整教学闭环的一个

这张表最重要的不是数字,而是最后一列的措辞。IACCD 在"规模"维度上完全无法与前几个相比,在"可复现性"维度上却几乎无可替代——因为它把方法学的每一步都写进了可执行的代码,而其余几个只提供原材料。

4.3 一个具体的设计:为什么必须收窄人群

倾向评分的可信度取决于一件事:在给定协变量后,暴露的分配要接近随机。全 ICU 人群做不到这一点——休克病人几乎一定插管,平稳病人几乎一定不插,两组在病情上完全不重叠,任何匹配都会失败。

Hsu 等人的处理是把人群切到"重叠区":机械通气、不用升压药。在这段人群里,插管与否的差别更多来自科室偏好。这一步在方法学上叫限制(restriction),是最古老也最有效的混杂控制手段之一,比任何统计调整都硬。

这四条在配套 SQL 里是逐条落地的:initial_aline_flg=0 对应"入科首小时的暴露状态",vent_1st_24hr=1 对应机械通气,vaso_flg=0 对应不用升压药。也就是说,限制不是写在论文方法段里的口头承诺,而是能在代码里查到的一行 where 条件。

设计选择 作用 代价
限制在机械通气人群 保证两组都有血气监测需求 结论不能外推到不插管的自主呼吸患者
排除用升压药者 去掉"必须插管"的强适应证 结论不覆盖休克人群
倾向评分匹配 平衡可观测的基线差异 无法平衡未观测的混杂
28 天死亡为主结局 窗口统一,不易被住院时长干扰 丢失 28 天之后的差异

这四条加在一起,是一个典型的"用外部效度换内部效度"的交易。读这张表的人如果只记住一个数字,也应该记住这个交易的方向。

交易是否成功,还有一道必须检查的关口:重叠区。倾向评分只有在两组评分分布交叠时才有效,如果插管组的评分全部高于 0.8,说明临床上"该插的都插了",剩下的样本里根本没有可比对象,匹配只是把不可比的两组硬凑。教科书把这一步放在匹配之前,先画两组评分的分布,确认重叠再往下走。跳过这一步的后果很具体:匹配会成功返回结果,平衡性检验也可能通过,但通过的样本是经过极端筛选的残余,效应估计反而更偏。

检查项 通过标准 不通过时怎么办
评分重叠 两组分布在中间区间有交集 收窄人群或增加限制条件
共同支撑 每个评分区间两组都有样本 修剪尾部样本并说明
匹配后平衡 标准化差异落到可接受范围 调整协变量或匹配算法
有效样本量 匹配后剩余样本足够估效应 改用加权而非匹配

4.4 标签的粒度:一个暴露,五个结局

与影像或波形数据集相比,这里的"标注"极简:没有逐例人工判读,没有多标注者一致性,只有从数据库里算出来的规则化标签。

标签 类型 来源 是否人工核验
aline_flg 暴露,二值 床边记录中动脉压记录的存在性 否,规则生成
day_28_flg 主结局,二值 死亡记录与时间窗比较 否,规则生成
hosp_exp_flg 次要结局,二值 住院死亡标志 否,规则生成
icu_exp_flg 次要结局,二值 ICU 死亡标志 否,规则生成
censor_flg + mort_day_censored 生存结局 死亡日或末次随访日 否,规则生成

“没有人工核验"不是缺陷,而是这类数据库派生表的常态:它的可信度来自源数据库的记录质量,而不是来自标注流程。真正需要警惕的是规则本身的边界——aline_flg 的定义是"首小时之后、住院期间是否出现过动脉压记录”,而不是"是否置入了导管",两者在绝大多数情况下一致,但在记录缺失或导管已拔的患者身上会出现偏差。

4.5 边界条件一览

边界 具体值 依据
年龄 成人;超过 120 岁统一改写为 91.4 抽取脚本的 case 分支
住院次序 仅首次 ICU 住院 SUBJECT_ICUSTAY_SEQ=1
观察窗 入 ICU 首日 字段名后缀 _first / _1st / _day_1
结局窗 28 天,另有院内与 ICU 内死亡 字典对三个 flg 的定义
中心数 1(单一医学中心) 官方未提多中心,且源自单一数据库
科室 FICU、MICU、SICU 三类,CCU 与 CSRU 已被排除 service_unit 取值与建表条件
入组排除 首小时已有导管、未通气、脓毒症、用升压药 建表语句的五条 where
变量上限 46 列,不可扩展 官方声明与字典一致
回连能力 无 46 列中不含任何 ID

§5 怎么拿到:从一次下载到一张可分析表

5.1 目录结构

官方给的路径是项目页下的版本目录,文件平铺,没有子目录:

路径 类型 说明
/content/mimic2-iaccd/ 项目页 摘要、背景、方法、数据描述、使用说明、许可、DOI
/content/mimic2-iaccd/1.0/ 版本页 与项目页内容一致,URL 带版本号,适合引用
/files/mimic2-iaccd/1.0/full_cohort_data.csv 数据文件 唯一的分析数据
/files/mimic2-iaccd/1.0/data_dictionary.txt 字典 46 行释义
/files/mimic2-iaccd/1.0/aline-mimic-ii-master.zip 代码包 SQL + R + Stata + 成图脚本

这里有一件必须在正文里说清的事:本次核验时,项目页与版本页都返回 200,但 /files/ 下的目录与 CSV 均返回 403,页面提示为"该地区因法律或政策限制无法提供数据"。因此下面的字段表与文件清单来自官方 Data Description 段落的正文描述,而不是从 CSV 读出来的实际表头。这个区别很重要——正文描述与真实表头之间是否逐字一致,本文无法确认,已列入 §10 的未核验项。

5.2 三种拿法

按使用场景分,拿到数据有三条路,成本依次递增:

方式 命令或入口 适合谁 注意
浏览器直接下载 项目页 Files 区 只想快速看一眼 需要能通过区域与许可校验
命令行下载 curl -L -O 加文件 URL 要写脚本、要进 CI 403 时要先解决访问资格,不要盲重试
只用代码包 单独取 zip,数据另寻 想先看抽取逻辑 代码包不含数据,只有 SQL 与 R
#-- 建立工作目录
mkdir -p iaccd && cd iaccd

#-- 三个文件逐个取;若返回 403,说明当前网络出口不在允许区域
curl -fL -O https://physionet.org/files/mimic2-iaccd/1.0/full_cohort_data.csv
curl -fL -O https://physionet.org/files/mimic2-iaccd/1.0/data_dictionary.txt
curl -fL -O https://physionet.org/files/mimic2-iaccd/1.0/aline-mimic-ii-master.zip

#-- 校验:CSV 首行应当有 46 个逗号分隔的列名
head -1 full_cohort_data.csv | awk -F',' '{print NF}'

curl -f 的作用是让 403 直接失败而不是把错误页存成 CSV。这个习惯能省掉后面最难查的一类 bug:文件存在、能读、但内容是 HTML。

5.3 读进来先做四件事

数据只有一张表,但读进来之后的检查不能省。四件事按顺序做:

import pandas as pd

df = pd.read_csv('full_cohort_data.csv')

#-- 1. 列数与官方声明核对
assert df.shape[1] == 46, df.shape

#-- 2. 暴露与主结局必须存在且只有两个取值
for c in ['aline_flg', 'day_28_flg']:
    assert set(df[c].dropna().unique()) <= {0, 1}, c

#-- 3. 反向编码的那一列单独看一眼
print(df['censor_flg'].value_counts(dropna=False))   #-- 0 是死亡,1 是删失

#-- 4. 常数列与全空列挑出来
const_cols = [c for c in df.columns if df[c].nunique(dropna=False) <= 1]
print(const_cols)                                    #-- 预期至少含 sepsis_flg

第四步不是洁癖。把常数列留在特征矩阵里,会让某些模型的系数估计直接报错,也会让另一些模型给出无意义的权重;而这类列在派生数据集里往往是"上游有、下游没用上"的残留,靠肉眼翻字典很难发现。

5.4 三处必须手工修正的编码

官方字典里有三处需要在使用前处理,处理方式都不复杂,但不处理会出错:

问题 字典原文 影响 处理
暴露的取值说明写成 year 1 = year, 0 = no 只是拼写错误,语义不受影响 无需改数据,注释里说明即可
血小板单位与类型标注残缺 K/u, numericL 单位应为 K/uL,类型应为 numeric 按 K/uL 处理,不要按字符串读
脓毒症标志恒为 0 absent (0) for all 该列零方差,且入组已排除该病 建模前删除,方法段说明排除条件

还有一处不是错误但极易误读:体温的单位是华氏度。字典写的是 Temperature (F, numeric),若按摄氏度处理,36.5 会变成 97.7,任何基于体温阈值的规则都会失效。

#-- 华氏转摄氏;只在需要临床阈值时做,不做归一化
df['temp_c'] = (df['temp_1st'] - 32) * 5 / 9

#-- 删除零方差列,并留一份列名清单进附录
drop_cols = ['sepsis_flg']
df = df.drop(columns=[c for c in drop_cols if c in df.columns])

5.5 从宽表到分析表的三步

教科书第 16 章的流程可以压缩成三步:定暴露与结局、选协变量、做匹配与检验。

步骤 做什么 用到的字段 常见错误
一 定暴露 aline_flg、主结局 day_28_flg 两列二值 把 hosp_exp_flg 当主结局,随访窗变长
二 选协变量:人口学、严重度、合并症、首日生理 第三、四、五组共 33 列 把 icu_los_day 放进协变量,它处于因果通路下游
三 估倾向评分、匹配、比较结局 全部 匹配后不检查平衡性就直接报效应

第二步的错误最隐蔽。住院时长既是暴露的结果,也是结局的前兆,把它放进倾向评分模型会在通路上做调整,把真实的效应部分抹掉。这类"调整了不该调整的变量"的问题在观察性研究里极常见,而这张表恰好提供了一个能讲清楚的例子。

同一类的陷阱还有三个,都可以在这 46 列里找到具体对应:hosp_exp_flg 与 icu_exp_flg 是结局的直接组成部分,不能当协变量;abg_count 是监测强度的代理,而监测强度本身可能受插管影响,属于暴露后的变量;iv_day_1 是首日治疗,同样落在暴露之后的通路上。判据只有一句:这个变量是在插管之前就确定了的,还是插管之后才可能被改变的。前者可以入模,后者一律不进。用这条判据筛一遍,46 列里真正能当基线协变量的只剩三十列上下。

5.6 五个坑

坑 表现 后果 规避
把 F 当 C 体温集中在 95–100 区间 阈值规则全错 先看取值区间再定单位
把 censor_flg 当"是否死亡" 死亡组被标成 1 效应方向整体反转 记住 0 才是死亡
用 sepsis_flg 做亚组 亚组为空 分析无法进行 建模前剔除
拿 service_num 和 service_unit 同时入模 完全共线 系数不可估 二选一
以为有患者 ID 找不到任何 ID 列 无法外连、无法分组 需要 ID 就用 MIMIC-III/IV

§6 与库内词条的关系

6.1 关系图谱

把库内的重症类词条按"结构 × 规模"摆开,IACCD 的位置很边缘,但边界很清楚:

词条 结构 规模量级 与 IACCD 的关系
MIMIC-III 临床库 关系库,26 张表 四万余人次 上游同门,可做同题重做
MIMIC-III 旧版入口 关系库 同上 版本差异,引用时注意区分
MIMIC-III 波形库 波形 + 临床 数千段记录 提供 IACCD 缺失的连续信号
波形匹配子集 波形与临床对齐 子集 想做"插管前后血压"必须用它
MIMIC-IV 临床库 模块化关系库 三十余万人次 更新一代,可做时间外验证
MIMIC-IV 急诊库 关系库 急诊就诊 提供入 ICU 之前的那一段
eICU-CRD 多中心关系库 二十余万次住院 唯一可做跨中心对照
eICU 旧版入口 关系库 同上 版本差异
FIDDLE 特征矩阵 派生宽表 数万次住院 同类思路的规模化版本
院内感染风险数据集 派生表 中等 同为"从 MIMIC 派生一张任务表"
IACCD 单表宽表 1,776 人 规模最小、闭环最完整

6.2 检索路径

你要找的东西 检索词 会落到哪里
同一临床问题的更大样本 arterial line、IAC、propensity MIMIC-III/IV 中的同类研究
插管前后的连续血压 waveform、matched subset MIMIC-III 波形库与其匹配子集
多中心外部验证 eICU、multi-center eICU-CRD
现成的重症特征矩阵 FIDDLE、feature matrix FIDDLE 派生集
院感与并发症 nosocomial、catheter infection 院内感染风险数据集
教学用的最小可跑案例 case study、textbook 本表

6.3 分工判据

任务 该用哪个 IACCD 的角色 原因
因果方法教学 IACCD 主力 一行命令读完,当天能讲完
因果方法的大样本验证 MIMIC-III/IV 不适用 1,776 人估不出稳定的边际效应
重症预测模型训练 MIMIC-IV 冒烟测试 规模差两个数量级
波形与血流动力学研究 波形库 不适用 无信号
跨中心泛化 eICU-CRD 不适用 单中心
复现一篇具体论文 IACCD + 原著 主力 论文、代码、数据三者齐全
数据工程教学 IACCD 主力 编码瑕疵多,适合讲清洗

§7 质量评估与局限性

7.0 读评分之前的一个前置校正

评价这张表时最容易犯的错,是拿"训练集"的尺子量它。它从设计之初就不是训练集:作者要的是一份能在课堂上从头讲到尾的材料,所以必须在规模上做减法——太大了,一次课讲不完;变量太多了,学生抓不住重点。1,776 人与 46 列,是这个目标下的合理取舍,而不是采集能力的天花板。

这个校正会改变对分数的读法:规模一项它必然低,但"单位成本的信息密度"一项它很高。把两者混为一谈,就会得出"数据太少不值得用"的结论,而忽略它在教学与方法对照上的不可替代性。

7.1 五维评分

按常用数据质量维度打分,每项 1–5 分,标准是"作为重症观察性研究教学数据":

维度 分数 理由
规模 2 1,776 行,估边际效应不稳定,做训练远远不够
变量完整性 3 覆盖暴露、结局、主要混杂,缺用药、缺时序、缺 ID
文档质量 4 字典逐条列出,但有三处瑕疵与两处自相矛盾
可复现性 5 SQL、R、Stata、成图脚本齐备,罕见
可获取性 4 ODC-BY、免注册,但部分地区被地理限制拦截

总分 18(满分 25)。这个分布很有特点:两项满分附近,两项中等,一项明显短板。它说明这不是一个"通用数据资源",而是一个目标极其明确的工具。

7.2 质量的两个层次:定义层与取值层

评价这类规则生成的表,要把"定义对不对"和"取值准不准"分开看。

定义层指的是每个字段的语义是否站得住。day_28_flg 定义为入 ICU 后 28 天内死亡,窗口清楚;hosp_exp_flg 定义为院内死亡,窗口随住院时长变化。两个都合理,但混用会把"住院时间长"误当成"死亡风险高"。

取值层指的是单元格里的数是不是真的。这一层本文无法确认——文件目录返回 403,CSV 本体没有取到。所以凡是涉及"某一列里有多少个 1"的问题,本文一律不答。

层次 能判断什么 本文的结论
定义层 字段语义、编码方向、单位 可判断,三处瑕疵已定位
取值层 数值是否正确、缺失多少 不可判断,需拿到 CSV
关联层 与源数据库是否一致 不可判断,需回连 MIMIC-II

7.3 可枚举的偏差

偏差 表现 影响 缓解
选择偏差 只保留机械通气、不用升压药者 结论不能外推到休克或自主呼吸患者 在论文里明确限制人群
单中心偏差 一家医学中心、一套流程 插管习惯与别处不同 用 eICU 做对照
时间偏差 数据来自本世纪初的一段时期 重症指南已多次更新 视为历史队列
暴露误分类 aline_flg 依据记录存在性,且只覆盖首小时后置管者 记录缺失时被判为未插管;首小时置管者已被剔除 敏感性分析与人群说明
幸存者偏差 首日数据要求患者活到测量 极早期死亡者信息不全 报告入组流程
缺失机制 化验不是随机缺失,按病情开单 完整案例分析会有偏 多重插补或缺失指示
结局竞争 出院是死亡的竞争事件 院内死亡分析需竞争风险模型 用原因别风险模型
版本漂移 数据 2016 冻结,代码 2017 还在改 复现结果可能与论文略有出入 锁定提交哈希

这张表里最值得展开的是"缺失机制"那一行。临床化验不是随机缺失:医生给谁开血气,取决于他觉得谁需要看血气,而这个判断与病情、与有没有动脉线都相关。于是 po2_first 缺失的人,平均病情可能与有值的人不同。完整案例分析(只留有值的人)会把这种差异放大成选择偏差,而且偏差方向不定——它既可能高估插管的好处,也可能相反。可行的处理是三条一起报:完整案例分析、多重插补、以及把"是否缺失"当作一个显式变量。三条结果方向一致,结论才站得住。

7.4 外部验证的角色矩阵

角色 做法 讲得通的地方 风险
教学复现 照教科书第 16 章跑一遍 数据、代码、讲解三者对齐 结果与原著不完全一致属正常
方法对照 同一份数据上比 PSM 与 IPTW 暴露与结局完全固定,只变方法 样本小,估计量方差大
预测模型冒烟 跑通管线,检查缺失与编码 快、无门槛 性能数字无意义
跨库外测 在 MIMIC-III 训练,这里测试 变量名可对齐 人群与年代差异混在一起
敏感性分析基准 换匹配半径、换协变量集 结论稳健性可量化 需要固定随机种子

7.5 它为什么还在被引用

按官方页的浏览计数(1,542 次,含全部版本),它的访问量在 PhysioNet 上属于中等偏下。这个量级说明它不靠"数据大"吸引人,靠的是"讲得清"。

它不会被新库替代的原因很具体:新库可以提供更大的样本,但很难提供一本已经出版、已经被引用、章节与代码一一对应的教材。教学材料有路径依赖——一门课用了五年,就不会因为出现了更大的数据集而换掉案例。这既是它的护城河,也是它的天花板。

§8 生态位与历史

8.1 沿革

IACCD 的诞生路径在 PhysioNet 上不算典型。多数数据集是"有数据,找平台";它是"有研究,有教材,顺手把数据也发了"。顺序反过来,导致它的文档风格更像书稿而不是数据说明——有背景、有动机、有致谢,甚至有一句"感谢原著作者允许我们以他们的工作为基础"。

这种做法在 2016 年之后变少了。后来的重症数据集大多由实验室团队维护,配独立的数据说明书、版本日志与 DOI 体系,而不再依附于某本书。IACCD 更像那个过渡期的产物:数据共享的意识已经有了,规范还没完全成型。

8.2 与教学传统的关系

PhysioNet 一直有"用真实数据教学"的传统,从早期的波形库到后来的挑战赛,都把"可复现的练习"当成公共品。IACCD 是这条线上少见的一个表格数据教具——前面十几年的教具几乎都是信号,而临床研究的方法学训练需要的恰恰是表格。

这也解释了它为什么选择"一张表"而不是"一个库":教学需要的是边界清楚的小世界,不是无限展开的大世界。

8.3 生态位

角色 大库 教学表
提供什么 原材料、规模、多样性 完整流程、可读文档、可跑代码
典型用户 建模团队、竞赛选手 教师、方法学研究者、刚入门的学生
成功标准 模型性能、泛化能力 讲得清、跑得通、结论可讨论
失败模式 清洗成本高、文档缺失 规模不足、外推受限
代表 MIMIC-IV、eICU-CRD IACCD

8.4 谁在用它

使用者 用法 证据强度
教科书读者 跟着第 16 章做案例 官方 Usage Notes 明示
方法学课程 讲倾向评分与匹配 官方定位即为此
复现研究 核对 Hsu 2015 的结论 数据与论文同源
数据工程教学 讲派生表的编码瑕疵 本文整理的瑕疵清单
重症建模者 当冒烟测试集 常见做法,缺公开统计

§9 使用指引

9.1 三种角色的路径

角色 第一天 第一周 注意
临床研究者 读 Abstract 与第 16 章,确认人群与暴露定义 复现匹配前后基线表 别把住院天数当协变量
方法学研究者 拉出 46 列,按用途分组 在同一数据上比三种估计量 固定种子,报告置信区间
数据工程 读字典,找出三处瑕疵 写一个能吃掉脏编码的读取器 华氏温度与反向标志是必测项

9.2 一条最短的可用流程

#-- 1. 取三个文件(403 说明当前出口被区域限制)
for f in full_cohort_data.csv data_dictionary.txt aline-mimic-ii-master.zip; do
  curl -fL -O "https://physionet.org/files/mimic2-iaccd/1.0/$f"
done

#-- 2. 解压代码包,看抽取逻辑
unzip -q aline-mimic-ii-master.zip -d code

#-- 3. 确认列数
head -1 full_cohort_data.csv | awk -F',' '{print "列数:", NF}'
import pandas as pd
from sklearn.linear_model import LogisticRegression

df = pd.read_csv('full_cohort_data.csv')
df = df.drop(columns=['sepsis_flg'])                 #-- 零方差列

#-- 华氏转摄氏,仅用于临床可读性
df['temp_c'] = (df['temp_1st'] - 32) * 5 / 9

cov = ['age', 'gender_num', 'bmi', 'sapsi_first', 'sofa_first',
       'map_1st', 'hr_1st', 'temp_c', 'spo2_1st', 'abg_count',
       'wbc_first', 'hgb_first', 'platelet_first', 'creatinine_first',
       'bun_first', 'sodium_first', 'potassium_first', 'tco2_first',
       'chf_flg', 'afib_flg', 'renal_flg', 'liver_flg',
       'copd_flg', 'cad_flg', 'stroke_flg', 'mal_flg', 'resp_flg']

X = df[cov].copy()
y = df['aline_flg']

#-- 倾向评分:只估"会不会插管",不估死亡
ps = LogisticRegression(max_iter=2000).fit(X.fillna(X.median()), y)
df['ps'] = ps.predict_proba(X.fillna(X.median()))[:, 1]
print(df.groupby('aline_flg')['ps'].describe())      #-- 看重叠区是否成立

最后一行打印的是倾向评分的分布摘要。它的用途只有一个:检查两组是否落在同一个区间。如果某一组的评分几乎全在 0.9 以上,说明限制条件没做够,匹配会失败——这一步比匹配本身更重要,也最常被跳过。

9.3 引用方式

引用对象 内容
数据集 Raffa J. Clinical data from the MIMIC-II database for a case study on indwelling arterial catheters (version 1.0). PhysioNet. 2016. doi:10.13026/C2NC7F
原著研究 Hsu DJ, et al. Chest. 2015;148(6):1470–1476. doi:10.1378/chest.15-0516
教科书章节 Raffa JD, Ghassemi M, Naumann T, Feng M, Hsu D. Data Analysis. In: Secondary Analysis of Electronic Health Records. Springer, 2016
上游数据库 Saeed M, et al. Crit Care Med. 2011;39(5):952–960
平台 PhysioNet 平台论文,按官方 Cite 按钮生成

写方法段时建议额外注明三件事:使用的版本号(1.0)、是否用了压缩包里的分析脚本、以及倾向评分的协变量集。第三项在多篇复用同一数据的研究之间差异最大,不写清就无法比较。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,人工把关结构与事实
数字来源 仅取规模、结构、边界三类,来自官方页、版本页与配套仓库
页面核验 项目页与 1.0 版本页均返回 200,内容逐段读取
文件核验 /files/ 目录与 CSV 返回 403(区域限制),未取到数据本体
字段来源 46 个字段的释义来自官方 Data Description 段的字典正文
脚本核验 队列 SQL、变量 SQL 与仓库文件树经直接访问确认,建表条件逐条抄录
不一致说明 章节号(5 与 16)、参考文献编号、发布日与公告日三处已列于 §3.2
论文信息 仅依据官方页给出的题录,未读 Chest 与教科书全文
未核验内容 CSV 实际行数、各字段取值与缺失、建表条件与论文方法段的逐条对应
图像 无配图;封面为生成式提示词,不含真实病历或波形
免责 不构成临床建议;使用须遵守 ODC-BY 1.0 的署名要求

常见误读(避坑清单)

说法 实际 证据
「这是 MIMIC-II 的完整下载」 只有 46 列汇总值,没有时间序列、没有波形 官方 Methods 段与字典
「它包含 46 个变量,所以有 46 个特征可用」 其中一列是全 0 的 sepsis_flg(入组已排除脓毒症),两列星期信息重复,service_num 与 service_unit 共线 字典备注、建表条件与取值域
「aline_flg 表示入 ICU 首日是否插管」 表示住院期间是否出现过动脉压记录,脚本用 itemid 51/52 判定 抽取脚本 mimic_aline_cohort.sql
「censor_flg=1 表示死亡」 1 表示删失,0 才是死亡 字典原文 0 = death, 1 = censored
「体温单位是摄氏度」 华氏度 字典原文 Temperature (F, numeric)
「有患者编号可以回连 MIMIC-II」 46 列里没有任何 ID 官方字典逐条核对
「它是 2015 年论文的原始数据集」 是为教科书重建的快照,与原分析集不完全相同 官方 Background 段「recreated for the purpose of the textbook」
「1,776 就是 MIMIC-II 里插过动脉线的人数」 是五条入组条件叠加后剩下的教学样本 mimic_aline_data.sql 末段建表语句
「SAPS 指的是 SAPS II」 字典写的是 SAPS I 字典原文 first SAPS I score
「下载链接随时可用」 部分地区返回 403,页面提示法律或政策限制 本次核验时 /files/ 目录 403

FAQ

Q1:IACCD 到底有多少条记录?为什么不说"行数"?

官方能给的确定数字是 1,776 名患者,Abstract 写的是"summary clinical data and outcomes for 1,776 patients"。至于 CSV 里有多少行,官方页没有明写,本文核验时又因文件目录返回 403 无法打开文件确认。按抽取脚本"每名患者仅取首次 ICU 住院"的约束推断,应当是 1,776 行;但在拿到文件之前,这个推断只能算推断。想确认,读入后打印 df.shape 即可,一秒的事。

Q2:sepsis_flg 全是 0,是不是数据坏了?

不是坏,是入组条件的结果。字典在括号里写了 absent (0) for all,而配套 SQL 的建表语句里有 sepsis_flg=0 这一条,说明脓毒症患者在建表阶段就被排除了,剩下来的当然全是 0。这在使用上意味着两件事:以脓毒症为条件的亚组分析在这份数据上做不了;把它放进特征矩阵会引入一列常数。正确做法是建模前删掉,并在方法段说明人群本身就排除了脓毒症,否则会被误读成"这批人恰好都没有脓毒症"。

Q3:能不能用它复现 Hsu 2015 的结论?

能复现流程,未必能复现数字。两者有三处差异:一是数据是 2016 年为教科书重建的快照,重建过程可能改过变量的取值口径;二是原著的分析集与本表的人群不完全相同,本表是在 initial_aline_flg=0 的前提下建表的,即已剔除入科首小时就有导管的患者,这个选择会改变效应估计的目标人群;三是匹配算法、匹配半径、协变量集的具体设置要与原著逐项对齐。合理的目标是复现"方向与量级",而不是逐位复现小数点。

Q4:为什么这张表没有患者编号?这不是设计缺陷吗?

从数据链接的角度看是缺陷,从隐私与教学目标看是取舍。去掉 ID 之后,这份文件无法与任何其他表连接,也就无法反向识别个人;同时它迫使使用者把注意力放在"这张表自己能回答什么"上。代价很实在:不能补充波形、不能做患者级分组、不能核对源记录。需要这些能力时,应该直接用 MIMIC-III/IV 而不是在这张表上想办法。

Q5:它和 MIMIC-III、MIMIC-IV 该怎么选?

看你要的是"讲清楚"还是"算准确"。要在一节课里把观察性研究的全流程走完、让每个人都能跑通,用这张表;要估计稳定的效应量、做亚组、做外部验证,用 MIMIC-III 或 MIMIC-IV;要做跨中心,用 eICU-CRD。三者不是替代关系:常见的合理组合是用 IACCD 定方法与代码骨架,再搬到 MIMIC-IV 上跑规模。

Q6:许可到底允许什么?

数据侧是 ODC-BY 1.0,允许包括商业用途在内的使用与再分发,条件是署名。代码侧不同——GitHub 仓库标注的是 MIT License,允许修改与再分发,同样要求保留版权声明。两者要分开遵守:引用数据时按官方 Cite 给出的格式,复用代码时保留 MIT 声明。另外,许可允许不等于技术上可取,区域限制是另一层门槛,与许可无关。

术语表

术语 解释
IAC 动脉留置导管,置入动脉以连续监测血压并方便采血
IACCD 本数据集的简称,Indwelling Arterial Catheter Clinical dataset
MIMIC-II 某医学中心重症监护的多参数数据库,本表的上游
倾向评分 在给定协变量下接受暴露的概率,用于平衡两组基线
匹配 按倾向评分把暴露组与对照组配对,构造可比样本
IPTW 逆概率加权,用倾向评分的倒数给样本加权
适应证混杂 因临床指征导致的暴露分配不均,是观察性研究的主要威胁
限制 通过缩小研究人群控制混杂的手段,比统计调整更硬
暴露 研究中被认为可能影响结局的因素,此处为是否插管
删失 随访在事件发生前终止,只知道"到某天还活着"
竞争风险 某一事件的发生阻止了另一事件被观察到
SAPS I 简化急性生理评分第一版,用于衡量入科病情
SOFA 序贯器官衰竭评分,逐系统累加,反映器官功能
ABG 动脉血气分析,测 pH、氧分压、二氧化碳分压等
宽表 一行一个分析单位、每个概念一列的表结构
长表 一行一次观测、靠 ID 聚合的表结构
ODC-BY 开放数据共享署名许可,允许商用但须署名
RRID 研究资源标识符,此处用于标识 PhysioNet 平台

附录 A:核心数字核对表

项 值 来源 层级
患者数 1,776 官方 Abstract 与公告 官方页
变量数 46 官方 Methods 段 官方页
字典字段数 46 官方 Data Description 段逐条计数 官方页
文件数 3 官方 Data Description 段 官方页
合并症标志 10 个 字典 官方页
首日生理与化验 17 个 字典 官方页
结局与时长字段 7 个 字典 官方页
版本号 1.0 版本区,仅一个版本 官方页
发布日期 2016-10-28 项目页头部 官方页
公告日期 2016-06-09 公告区 官方页
DOI(v1.0) 10.13026/C2NC7F 引用框与 Discovery 区 官方页
DOI(最新) 10.13026/1r5h-4p36 Discovery 区 官方页
数据许可 ODC-BY 1.0 Access 区 官方页
代码许可 MIT 仓库元数据 仓库
年龄处理 超过 120 岁记为 91.4 抽取 SQL 的 case 分支 仓库
住院次序 仅首次 ICU 住院 抽取 SQL 的 where 条件 仓库
页面浏览计数 1,542 项目页计数区 官方页

附录 B:数字的来源分层

第一层,官方页与官方文件。 1,776 名患者、46 个变量、三个文件、五个结局字段、十个合并症标记、许可、两枚 DOI、两个日期、章节号与文献编号的两处矛盾。这些都能在项目页与 1.0 版本页上逐字找到。

第二层,配套仓库的可执行证据。 年龄上限改写为 91.4、仅取首次 ICU 住院、暴露由 itemid 51/52 判定、代码许可为 MIT、仓库的创建与最后推送日期。这些来自 SQL 与仓库元数据,属于"作者实际怎么做的",比文字描述更硬。

第三层,未核实。 CSV 的实际行数、每个字段的取值与缺失、建表条件与论文方法段是否逐条一致、原著的效应量。五条入组条件已从 SQL 读出,但"这五条就是 1,776 的全部来源"仍属推断——中间表可能还有别的裁剪,而页面没有交代。

附录 C:参考文献

编号 文献 链接 用途
1 数据集项目页 v1.0 https://physionet.org/content/mimic2-iaccd/1.0/ 全部规模、结构、许可与日期信息
2 PhysioNet 平台综述(2026,Nature Health) https://doi.org/10.1038/s44360-026-00096-z 托管模式与引用规范
3 Hsu DJ 等,Chest 2015 https://doi.org/10.1378/chest.15-0516 临床问题与原始设计
4 Raffa JD 等,教科书第 16 章 https://link.springer.com/book/10.1007/978-3-319-43742-2 案例分析流程
5 Saeed M 等,Crit Care Med 2011 https://doi.org/10.1097/CCM.0b013e31820a92c6 上游数据库说明
6 配套代码仓库 https://github.com/MIT-LCP/aline-mimic-ii 抽取与分析脚本

相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集