自贡四院重症感染患者数据库

四川自贡市第四人民医院 2019 年 1 月至 2020 年 12 月收治的 2,790 例成人重症感染患者,整合电子病历、医院信息系统、检验系统与床旁护理记录,含七张表与出院后 SF-36 随访,院内死亡率 5.8%

来源 四川省自贡市第四人民医院 2019 年 1 月至 2020 年 12 月连续收治的成人重症感染患者,源自电子病历、医院信息系统、检验信息系统与重症护理记录系统发布时间: 2026-10-19最后更新: 2026-10-20 阅读 17
自贡四院重症感染患者数据库

信息速览

数据集名称自贡四院重症感染患者数据库
数据类型临床变量,临床文本,时序数据,受限获取
规模2,790 例住院患者;院内死亡 161 例,死亡率 5.8%
接入方式四川省自贡市第四人民医院 2019 年 1 月至 2020 年 12 月连续收治的成人重症感染患者,源自电子病历、医院信息系统、检验信息系统与重症护理记录系统
AI 就绪度

重症监护室里产生的数据密度极高:每小时的生命体征、每天的检验、随时下达的医嘱、床旁的护理记录。这些数据在西方有 MIMIC、eICU 等公开库可以复用,在中国却长期缺少同等可及的资源。研究者要么用自己医院的内部数据、无法复现,要么拿西方数据训练模型、再假设它能迁移过来。

这份数据库是补这个缺口的一次尝试。四川省自贡市第四人民医院把 2019 年 1 月至 2020 年 12 月连续收治的 2,790 例成人重症感染患者的数据整理出来,整合成七张表,涵盖基线、医嘱、诊断、检验、转科、护理记录与结局,并提供出院回家后的 SF-36 生活质量随访。院内死亡 161 例,死亡率 5.8%。

需要先说明它的定位。这不是一个大样本库,也不是一个设计精良的前瞻队列,而是一个真实的、回顾性的、单中心的临床数据整理。它的价值在于「中国成人重症感染」这个位置上此前几乎没有公开数据,而不在于规模或设计精度。

§1 它是什么:一家医院两年内的重症感染切片

1.1 一句话定义与三条边界

这是一套以住院为单位、以感染为纳入条件、整合四类信息系统的单中心重症数据库。

「以住院为单位」意味着主键是住院号而非患者。同一位患者可能多次入院,每次入院都是独立记录。做患者级分析时需要先按患者标识聚合。

「以感染为纳入条件」意味着这不是全部 ICU 患者,而是其中一个子集。纳入靠出院诊断描述中的关键词识别,因此边界由关键词规则划定,而不是由临床判据划定。这个细节决定了后续所有分析的适用范围。

「整合四类信息系统」是它相对原始病历的核心加工。电子病历、医院信息系统、检验信息系统与重症护理记录系统各有各的存储格式与标识体系,把它们对齐到同一个患者、同一条时间轴上,是这项工作的主要工作量所在。

1.2 七张表的结构

表名 内容 粒度 关键用途
dtBaseline 基线特征 一人一行 人群画像、协变量
dtDrugs 医嘱 一条医嘱一行 用药模式、治疗强度
dtICD 诊断编码与描述 一条诊断一行 疾病谱、院内死亡判定
dtLab 检验值与参考范围 一次检验一行 实验室指标时序
dtTransfer 转科记录 一次转科一行 科室流向、入 ICU 时点
dtNursingChart 护理记录 一次记录一行 生命体征、中文病程文本
dtOutcome 结局与随访 一人一行 院内转归、SF-36

七张表通过 PATIENT_ID 与 INP_NO 两个键连接。前者是患者标识,后者是住院号。区分这两个键很重要:按 INP_NO 聚合得到的是住院次,按 PATIENT_ID 聚合得到的才是人。

1.3 纳入与排除的实际含义

纳入条件是三条:年龄大于 18 岁、转入重症监护室、出院诊断描述中含感染相关关键词。

关键词规则本身需要仔细理解。官方给出的判据是描述中含 infection、pneumonia 或表示炎症的后缀 -itis。由于原始记录是简体中文,实际检索的是对应的中文词拼音形式,文中举的例子是表示「感染」的拼音与表示「炎」的字。此外还手工排除了部分自身免疫病与结缔组织病,以避免把非感染性炎症误纳。

这条规则的效果是:凡是诊断描述里明确写了感染部位或感染性质的病例,会被纳入;凡是只在病程记录里提到感染、而诊断栏没写的,可能不会被纳入。这意味着纳入的人群偏向「出院时被明确诊断为感染」的患者,而不是「住院期间曾发生感染」的患者。

这个偏向会带来一个不易察觉的后果:如果某位患者入院时是感染、住院期间痊愈、出院诊断里感染被列为次要诊断,他仍会被纳入;而另一位患者入院时非感染、住院期间发生院内感染但出院诊断未突出,他可能被漏掉。做「院内感染」相关研究时,这个偏向必须说清。

1.4 死亡率的两个数字

官方给出的院内死亡率是 5.8%,即 161 例死亡除以总例数。

这个数字看起来偏低——很多 ICU 队列的死亡率在两位数。官方给了两条解释。

第一条是人群构成。本库纳入的是「感染」而非「脓毒症休克」。感染是一个宽泛的谱系,从社区获得性肺炎到脓毒性休克都在内,轻中度占多数,整体死亡率自然被拉低。这与 MIMIC 这类以「ICU 住院」为纳入条件的库不同,后者包含大量非感染的重症患者,两头都有。

第二条更值得注意。官方指出,非幸存者的住院时间与 ICU 停留时间反而比幸存者短,原因是有相当一部分重症患者在治疗数日后家属选择撤除生命支持、随后死亡。这个现象在中国 ICU 里并不罕见,但它对数据分析的影响常被忽略:这些患者的病程被人工截断,他们的检验序列、护理记录、医嘱序列都比自然病程短得多。若模型把「记录条数少」当成风险信号,学到的可能是「撤除治疗」这个决策,而不是病情本身。

因此 5.8% 不能被解读为「这家医院救治水平高」。它是一个特定纳入规则下的特定人群的特定转归比例,引用时必须带上这三重限定。

1.5 与 MIMIC 系列的定位差异

维度 MIMIC-IV 本库
来源 美国波士顿学术医疗中心 中国四川三级医院
时段 2008–2019 主表延伸至 2022 2019–2020
纳入 全部 ICU 住院 仅感染相关
规模 数十万住院次 两千余例
波形 有(部分模块) 无
随访 有限 SF-36 生活质量
访问 凭证式 凭证式

差异集中在三点。人群不同,这是最核心的;纳入条件不同,本库是感染子集;结局维度不同,本库有生活质量随访而 MIMIC 没有。

第三点值得单独说。绝大多数重症数据库的结局是死亡或住院时长,而患者真正关心的是「活着出院之后过得怎么样」。SF-36 测的是生理功能、角色限制、疼痛、总体健康等八个维度,能刻画出院后的功能状态。这一维度在本库里有,虽然覆盖率未公布。

1.6 两年时间窗的含义

2019 年 1 月到 2020 年 12 月,恰好覆盖了新冠疫情暴发前后的转折点。

这个时间窗带来一个必须注意的问题:2020 年的患者与 2019 年的患者可能系统不同。疫情初期,医院的收治流程、探视制度、感染防控措施、甚至患者就诊延迟都发生了剧烈变化。若把两年数据混在一起分析,年份就成了一个未控制的混杂因素。

官方没有说明是否做过年份分层。使用者的对策有两条:把入院年份作为协变量纳入模型;或者做敏感性分析,两年分别建模再看结论是否一致。后者成本更低,建议至少做一次。

具体到操作层面,做分年分析还有一个好处:它能暴露数据导入的时间断点。两家系统在不同年份可能升级过,字段名、单位、取值范围都可能变。若某个变量在 2020 年突然出现大量异常值或缺失,很可能不是临床变化而是系统变更。这类问题在混合分析里会被平滑掉、看不出来,分年一拆就露出来了。

还有一处需要单独确认:2020 年 1 月之后的新冠病例。官方没有说明这类患者是否进了数据库、若进了用什么诊断描述。这不影响数据可用性,但影响解释——2020 年的感染谱与 2019 年不同,若新冠患者被纳入,重症比例、住院时长、死亡率的分布都会变。做趋势类结论时必须把这一点写在限制里。

§2 数据构成:七张表的实际用法

2.1 表的连接关系

七张表的连接键是两级的。

PATIENT_ID 是患者级标识,一位患者一个值,跨多次住院不变。INP_NO 是住院级标识,一次住院一个值。两键的关系是一对多:一位患者可以有多个 INP_NO。

连接时的选择取决于分析单位。做「这位患者的预后」,按 PATIENT_ID 聚合;做「这次住院的转归」,按 INP_NO。混淆两者会导致重复计数或错误合并。

还有一层连接需要注意:dtTransfer 表记录科室转移,其中包含「转入 ICU」这一事件。这个事件的时点决定了所有其他表的时间零点是否一致。若零点定义有偏差,整条时间轴都会错位。

2.2 基线表的定位

dtBaseline.csv 是一人一行,记录基线人口学与病情。官方描述简短,只说「包含个体患者的基线特征」,没有逐列列出字段。

这意味着字段名需要下载后自行核对。根据同类数据库的惯例,可能包含年龄、性别、入 ICU 类型(内科/外科)、入 ICU 来源(急诊/病房/手术室)、主要诊断、APACHE II 或 SOFA 之类的病情评分。但这些是推测,不能当作已知事实引用。

有一点可以确定:年龄字段做过特殊处理。官方说明 89 岁以上的患者年龄被赋予 90 到 120 之间的随机数。这是去标识的标准做法(超过 89 岁的人群太小,具体年龄可能指向特定个体),但它带来一个分析后果——「90 岁以上」这个组内部的年龄不可信,任何以年龄为连续变量的模型都会在最老的这一端引入噪声。

这个随机化的具体后果值得算清楚。假定真实年龄分布在 90 至 100 岁之间(ICU 人群很少更老),而记录值在 90 至 120 之间均匀抽取。那么这一组的记录年龄均值约为 105,比真实均值高出一大截。若模型把年龄当连续变量,它会从这一组学到一个虚高的「高龄」效应——不是因为这些人真的 105 岁,而是因为随机数把均值抬上去了。这属于经典的测量误差,但方向是系统的而非随机的,因此不会像随机噪声那样在样本量增大时被平均掉。

更麻烦的是这种误差与死亡率正相关。能活到 90 岁以上又进了 ICU 的人,本身就经过了极强的生存筛选;而随机数把它们的年龄标得更高,模型于是把「特别老」与「结局相对好」联系起来,产生方向错误的关联。这种偏倚在小样本上尤其难察觉。

处理办法有四种,代价各不相同。

一是把年龄截断在 90。 所有 90 及以上的记录统一改为 90,另加一个「是否 ≥90」的二值指示变量。这样连续部分保持单调可信,超出部分由指示变量承接。代价是 90 岁以上内部的剂量反应关系完全丢失,且截断点附近会有堆积。

二是分箱而非连续。 用 <40 / 40–64 / 65–79 / 80–89 / ≥90 这样的区间,最后一箱吸收所有随机化的值。这是最常用的做法,稳健、可解释、不需要假设。代价是损失了箱内信息,且箱边界的选择会影响结果,需要在敏感性分析里换几组边界验证。

三是直接把年龄从模型里去掉。 听起来激进,但在以生理指标为主的预测任务里,年龄的边际贡献往往不如 SOFA 单项。去掉它换来的是一份不需要解释测量误差的干净模型。适合变量少、可解释性优先的场景。

四是在建模前做多重插补式的处理。 把「≥90」视为区间删失,用区间回归或贝叶斯方法估计真实年龄的分布,再抽样填充。这最接近统计上正确的做法,但需要额外的分布假设,且实施成本高,在探索性分析里通常不值得。

选择哪一条取决于任务。做评分外部验证这类需要与已发表口径对齐的工作,用第二种(分箱,且分组切点与原文献一致);做纯预测任务,第一种或第三种更省事;做方法学研究,第四种才有意义。

还有一点容易被忽略:随机化是患者级的还是记录级的。若同一位患者的不同表里年龄字段各自独立随机,那么跨表连接时会出现同一人两个年龄的矛盾。核对方法是按 PATIENT_ID 分组、对年龄取唯一值计数,若不等于 1,说明随机化在表间不联动,连接后必须固定取某一张表的年龄值作为准。

2.3 医嘱表的时间陷阱

dtDrugs.csv 有一个极易被误用的字段:datatime。

官方明确说明,datatime 是医生开具医嘱的时间,不一定是给药时间。这个区别在临床上有实质意义:医嘱可能在上午开立、下午执行,也可能开立后因故未执行。

若把 datatime 当作给药时间做药物暴露分析,会得到系统性偏差。例如分析「抗生素使用到感染控制的时间间隔」,用医嘱时间算会比用实际给药时间算更短,因为医嘱往往先于执行。

真正的给药时间通常在护理记录里。要做严格的药物暴露分析,必须把医嘱表与护理记录表按时间对齐,找出执行记录。这是本库使用中最费工的一步,官方没有提供现成的对应关系。

2.4 诊断表与死亡判定

dtICD.csv 存 ICD 编码与诊断描述,描述已由中文翻译为英文。

Status_Discharge 字段是关键。官方说明:若患者院内死亡,所有诊断对应的该字段都记为 dead。这个设计与直觉不同——通常人们会想「每条诊断有自己的转归」,而这里是一个患者级标记被复制到每一行。

这个设计的好处是计算死亡率很简单:任取一行看 Status_Discharge 即可,或按 INP_NO 去重后统计。坏处是不能用它做诊断级别的转归分析,因为它不携带这个信息。

翻译这一层也值得注意。中文诊断描述翻成英文,翻译质量直接影响文本分析。例如「肺部感染」与「肺炎」在中文里有时混用,翻译后可能都变成 pneumonia,也可能一个译成 pulmonary infection、一个译成 pneumonia。做基于诊断文本的分析前,最好先看一批样本,确认翻译的一致性。

2.5 检验表的参考范围

dtLab.csv 除了检验值,还提供每个项目的参考范围。这一点比很多数据库做得好。

参考范围的价值在于它能处理「同一指标不同医院单位不同」的问题。例如血红蛋白有的用 g/L 有的用 g/dL,白细胞有的用 10⁹/L 有的用 /μL。有了参考范围,可以把绝对值转换成「相对正常上限的倍数」这一无量纲指标,从而实现跨机构的可比。

具体做法是把测定值除以参考范围上限,得到倍数。这个方法对上限型指标(越高越异常)有效,对下限型(越低越异常)要反过来。对双向型(过高过低都异常,如血钾)则要取偏离中值的距离。这三种类型的处理方式不同,不能一概而论。

参考范围还有一个用处是识别数据错误。若某条检验值超出参考范围十倍以上,通常不是病情而是录入或单位错误。例如血红蛋白记成 120 g/dL(正确应是 g/L),白细胞记成 0.01(少了一次幂)。这类错误在单条记录里看不出来,但按患者画出时序图后,会表现为孤立的尖峰,一眼可辨。建议在做任何建模之前,先对每个检验项目画一遍全库的数值分布直方图,找出量级明显异常的点。

检验数据还有一处结构性问题:开立频率不固定。医生按病情决定查什么、多久查一次,因此不同患者的检验项目组合与频率差异很大。这带来两种后果。一是时序不齐,无法直接拼成矩阵,必须做某种形式的聚合(按天取均值或最差值)。二是缺失非随机,「没查某项目」本身反映医生的判断,若当作随机缺失插补,会引入偏倚。

对第一种后果,常规做法是按固定时间窗聚合,例如每 24 小时取一次最大值与最小值。取最差值而非平均值,是因为临床上关心的是「有没有出现过异常」,而不是平均水平。对第二种后果,更稳妥的做法是把「是否检查」作为一个二值特征纳入,让模型知道这项数据是测出来的还是缺的。

2.6 转科表的用途

dtTransfer.csv 记录科室之间的转移,官方举例是「从消化内科转入 ICU」。

这张表的核心用途是确定入 ICU 时点。很多分析需要以「入 ICU 时刻」为零点计算相对时间,而 dtTransfer 里那条「转入 ICU」的记录就是零点的来源。

它还有一个次要用途是刻画科室流向。一位患者从急诊到 ICU 到普通病房到出院,这条路径本身携带信息:直接入 ICU 的与经病房转入的,病情轨迹不同;出 ICU 后回普通病房的与直接死亡的,预后不同。这类路径特征在预测模型里常被忽略,但往往有独立价值。

路径中还有一个容易被忽略的分支:再次转入。有些患者出 ICU 后病情反复,数日后又转回。这类患者在数据里表现为同一住院号下多次「转入 ICU」记录。做「入 ICU 时点」这个定义时必须决定取哪一次:取第一次,则第二次住院期间的暴露被算进了随访;取最后一次,则第一次住院期间的信息丢失。两种选择都会改变模型的输入。

比较稳妥的做法是只保留首次入 ICU 的记录,把再次转入当作结局的一部分(是否复发作为二分类标签)。这样时间轴干净,代价是损失了部分信息。

2.7 护理记录的双重身份

dtNursingChart.csv 是七张表里信息密度最高的一张,也是使用难度最大的一张。

它同时是结构化数据的来源和非结构化文本的来源。体温、心率、呼吸、血压、意识状态这些生命体征以数值形式记录在这里;同时,护士书写的病程记录以中文原文形式存在,官方明确说「可用于自然语言处理」。

v1.1 相对 v1.0 的主要改动就在这里:v1.0 的体温变量大量缺失,v1.1 补充了体温数值。

这张表的难点在于结构不统一。生命体征是表单式的(时间点 + 项目 + 数值),病程记录是叙述式的(时间点 + 一段中文)。两者混在一张表里,需要先按记录类型分流,才能分别处理。

分流之后,生命体征这一支要做三件事。第一是单位统一,血压有的记为 120/80 有的记为平均值,体温有的用摄氏度有的可能遗留华氏度。第二是时间对齐,护理记录的时间点不规律,有的每小时一次有的每四小时一次,重采样到固定网格会引入插值误差,不重采样则各家序列长度不一。第三是异常值识别,机器故障会产生「心率 300」「体温 25 度」这类不可能的数值,需要先按生理范围过滤。

病程记录这一支的预处理更麻烦。中文护理文本有大量模板化表述,例如「神志清楚,精神可,饮食睡眠可,二便正常」。这些句子信息密度低但出现频率高,直接做词频统计会被它们淹没。有效的做法是先建立模板库,把高频套话识别出来并降权,再看剩余的差异部分。这个思路与英文临床文本处理里的「模板去除」是一回事,只是中文的模板更固定、更容易穷举。

还有一层是时序本身的临床含义。护理记录的密度不是随机的:病情变化时记录变密,平稳时变稀。因此「某小时有没有记录」本身携带信息。若把记录密度当作噪声忽略,会丢掉这部分信号;若直接当作特征,又可能与撤除治疗这个混杂因素纠缠。稳妥的做法是把密度作为一个显式特征交给模型,并在解释时说明它的双重含义。

2.8 结局表与随访

dtOutcome.csv 含结局,其中特别提到 SF-36 问卷,由出院回家后随访获得。

官方没有给出随访完成率。这是一个必须自己核对的数字。重症患者的随访脱落率通常很高——有人转院、有人失能无法作答、有人拒绝、有人死亡(院内死亡者自然没有出院后随访)。若覆盖率只有两三成,那么基于这部分人得出的功能结局就不能代表全体。

还有一个方法学细节:SF-36 有多个版本(36 项标准版、12 项简版、8 项简版),各版本得分不可直接比较。官方只说「SF-36 问卷」,未说明版本与计分方式(是原始分还是常模转换分)。做分析前必须先看数据里的实际条目。

§3 怎么拿到:三层手续与使用约束

3.1 获取路径

受限访问,三层手续:

层级 要求 说明
账户 PhysioNet 凭证式用户认证 需机构邮箱与导师或主管信息
协议 签署 Credentialed Health Data Use Agreement 1.5.0 需机构授权代表确认
培训 CITI 的 Data or Specimens Only Research 数小时课程,证书有有效期

三项齐备后文件目录可见。未登录访问 https://physionet.org/files/icu-infection-zigong-fourth/1.1/ 返回 403。

本库不从属于其他项目,但上游有一个 v1.0(2021-09-09),v1.1(2022-06-30)在其基础上补充了体温。引用时应标注版本。

3.2 许可的约束

PhysioNet Credentialed Health Data License 1.5.0 的核心是四条:

不得再分发。 数据不能转给第三方,包括同机构的同事。每人单独取证。

不得尝试重识别。 尽管官方已做去标识,协议仍禁止任何试图还原个体身份的行为,也禁止与其他数据源交叉比对。

限定用途。 仅限协议声明的科研或教学,商业用途需另申请。

成果声明。 发表时按指定格式引用数据与平台。

第一条对课题组协作影响最大。合规做法是把数据放在受控环境,成员通过各自账户访问,而不是各自留一份副本。

3.3 三条使用约束

约束一:不要把总例数当成 ICU 收治总数。 这是「感染且进过 ICU」的交集人数。用它算 ICU 占用率、床位周转、总体死亡率都会错。

约束二:不要用 datatime 当给药时间。 医嘱时间不等于执行时间。做药物暴露分析必须回到护理记录找执行记录。

约束三:不要跨年份直接合并。 2019 与 2020 年的收治流程差异可能很大,尤其 2020 年初。至少做一次分年敏感性分析。

§4 质量与已知问题

4.1 官方披露的四项局限

回顾性设计。 数据来自常规诊疗,不是按研究方案前瞻采集。这意味着变量是否记录、记录多细,取决于当时的临床需要,而不是研究需要。

多个变量存在缺失。 官方明确说「many variables」有缺失值,但没有列出哪些变量、缺失多少。这个信息只能自己统计。

呼吸机参数粒度粗。 机械通气是重症治疗的核心,但参数(潮气量、呼气末正压、吸氧浓度、气道峰压)记录不够细。做呼吸机相关性肺损伤、肺保护性通气依从性这类研究,本库支撑不足。

不提供波形。 没有心电、动脉压、呼吸流速等高频信号。这意味着做波形分析、做报警算法、做信号质量研究都用不上这份数据。

4.2 官方未提但需自查的四处

版本差异。 v1.0 体温大量缺失,v1.1 补上。若有人拿到的是 v1.0 或引用了基于 v1.0 的结果,涉及体温的结论需要重新核对。

伦理批号不一致。 页面方法段写 2020-065,伦理段写 2021-014,同一页面自相矛盾。官方未说明哪个是最终批号。可能的解释是研究跨年度、补充随访方案时又申请了一个批号。引用时两个都提,或注明「官方给出两个编号」。

随访覆盖率未知。 SF-36 随访做了多少人,官方没说。这直接影响长期结局分析的可信度。

缺失机制未知。 检验是按需开立的,不是按固定频率。这意味着「某项检验没做」本身就是信息——医生认为不需要查。把缺失当作随机缺失处理,会引入偏倚。

4.3 关键词纳入的漏检与误纳

这是本库最需要理解的一处方法学细节。

官方规则是出院诊断描述含感染关键词即纳入。漏检的情形有两类:一是诊断描述用词不含关键词,例如只写「脓毒症」而没写感染部位或「感染」二字;二是感染发生在住院期间但出院诊断未列出。

误纳的情形也有一类:非感染性炎症被关键词捕获,例如某些以 -itis 结尾但非感染性的疾病。官方说明已手工排除部分自身免疫病与结缔组织病,但手工排除的完整性无法验证。

这个规则的实际效果取决于中文诊断描述的书写习惯,而这个习惯官方没有披露。使用者若关心纳入的准确性,唯一办法是抽样人工复核诊断描述,估算漏检率与误纳率。这个工作量不大,二三十例就能给出量级估计,值得做。

4.4 撤除治疗带来的截断偏倚

前文提过,非幸存者的停留时间反而更短,因为部分重症患者家属选择了撤除生命支持。

这个现象在数据上表现为:死亡组的记录条数少、时间跨度短、检验序列短。若不加控制,模型可能学到「记录少 = 高风险」这条捷径。这条捷径在训练集上有效,在部署时可能失效——因为新患者的记录少可能是因为刚入院,而不是因为要撤除治疗。

控制的方法有三种。一是把「记录条数」或「住院时长」作为特征显式纳入,让模型在明处使用。二是限制分析窗口,例如只取入 ICU 后前 48 小时的数据,让所有人有相同的观察期。三是把撤除治疗的患者单独分层,看结论是否稳健。

第二种最干净,代价是丢弃了后段信息。对早期预警类任务,前 48 小时往往恰恰是最关键的窗口,所以这个代价可以接受。

三种方法各有各的实现细节,值得逐一展开,因为做错一点就会把偏倚原样带回来。

显式纳入记录密度。 这一条听着简单,实际有两处陷阱。第一,密度必须定义清楚:是入院至死亡/出院的总记录条数,还是单位时间内的条数?前者与生存时间高度共线(活得久自然记的多),后者才是真正意义上的「监护强度」。若用前者,模型学到的其实是「住院时长」,而这个变量在预测时不可得,模型无法部署。第二,纳入之后模型会给出密度的系数,这个系数的解释要小心——它同时携带了「病情重」(记录变密)与「即将撤除治疗」(记录变稀)两种相反的信号,净效应可能是零甚至反号。若看到系数接近零就断定「密度无用」,是误读。

限制观察窗。 前 48 小时是最常用的窗口,因为早期预警的临床价值就在这里。但窗口一旦固定,就要处理窗口内的数据密度差异:48 小时内有人被记了 200 条,有人只被记了 20 条,前者信息多后者信息少,模型会对信息多的样本更自信。解决办法是在特征层面做时间加权聚合(越靠近窗口末端权重越高),而不是简单取均值。取均值会把「什么时候测的」这个信息抹掉。

窗口长度本身是个超参数。48 小时是惯例,但对感染患者来说,抗生素起效、培养回报、器官功能变化往往在 72 小时内才充分显现。可以设 24、48、72 三个窗口分别建模,看性能曲线的拐点在哪里——若 72 小时的性能明显优于 48 小时,说明这个库的信号需要更长时间积累,那么任务定义就该向「早期识别」而不是「极早期筛查」调整。

分层分析。 把患者分成「有撤除治疗记录」与「无撤除治疗记录」两层,分别建模或分别评估。这一条的前提是能识别出撤除治疗——而本库没有专门的撤除治疗字段,只能从护理记录文本、医嘱终止、以及「死亡前较长时间内无任何活跃医嘱」这类代理信号推断。代理信号的灵敏度与特异度都不高,误分类会把偏倚重新引入。因此分层分析更适合作为敏感性分析(用来判断主结论是否稳健),而不是作为主分析。

三条路可以叠加:以限制窗口为主分析,以显式密度为敏感性分析,以分层为辅助验证。三套结果方向一致,结论才有底气;若三套结果互相矛盾,恰恰说明偏倚的方向没搞清,此时应当把矛盾本身写进限制,而不是挑一套顺眼的报出去。

4.5 单中心与两年跨度

单中心意味着机构效应无法分离。检验项目的组合、护理记录的模板、用药习惯、ICU 收治标准都带着这家医院的印记。

两年跨度则引入时间效应。2019 年到 2020 年,疫情改变了太多东西:就诊延迟、收治流程、感染防控、甚至病种构成。2020 年的感染患者里,新冠相关病例是否被纳入、以什么诊断描述纳入,官方未说明。这一点对解释 2020 年的数据尤其重要。

4.6 缺失的三个层次

变量级缺失。 某列在某些行是空的。官方说「many variables」有缺失但未列举。

记录级缺失。 某次该记录的检验没做,整行不存在。这与变量级缺失不同:前者是「有记录但值为空」,后者是「连记录都没有」。在时序分析里两者的处理方式完全不同。

患者级缺失。 某些患者完全缺少某类数据,例如没做过任何影像检查、没有随访记录。

三者的处理策略:变量级可插补,记录级应视为「未测量」而非「缺失」,患者级要考虑是否有系统性原因。混为一谈是最常见的错误。

§5 能做什么:五类任务与实现要点

5.1 任务一:早期预警评分的外部验证

这是官方明确推荐的用途。NEWS、MEWS、qSOFA 这些评分都是在其他人群开发的,需要有独立人群做外部验证。

实现要点有三。第一,确认评分所需的变量在库中齐全。qSOFA 只需三项:呼吸频率、收缩压、意识状态,都在护理记录里。NEWS 需要七项,多了体温、心率、血氧、吸氧状态,也在护理记录里。第二,确认取数时间窗。评分通常取某一时刻的值或某段时间内的最差值,两种口径结果不同。第三,处理缺失。评分要求全部变量齐备,缺一项就无法算分,此时是算作正常还是排除,会显著影响结果。

验证的产出应当包括:区分度(AUC)、校准度(校准曲线与斜率)、临床效用(决策曲线)。只报 AUC 是不完整的——一个 AUC 尚可但校准很差的评分,在临床上可能导致系统性过度或不足预警。

5.2 任务二:基于护理文本的脓毒症识别

护理记录的中文原文是这份数据里最独特的部分。用自然语言处理从中识别脓毒症或预测其发生,是一个有实际价值的方向。

难点在中文临床文本的预处理。三步:先按记录类型分流(生命体征 vs 病程叙述),再做分词与术语归一(「血压低」「BP 低」「低血压」应归为一类),最后处理缩写与简写(中文病历里大量使用「神清」「双肺呼吸音清」这类固定短语)。

标注是最大的瓶颈。数据里没有逐条记录的脓毒症标签,只有出院诊断。用出院诊断做弱监督是可行路径——把「出院诊断为脓毒症」的患者的所有记录标为正类。这样得到的标签在时间上不精确(不知道何时发生),但在患者层面可用。

若要做时点级别的识别,需要借助 Sepsis-3 定义从数据里重建:疑似感染(培养送检 + 抗生素)加上 SOFA 评分跃升。这条路技术上可行,但需要培养与抗生素的具体时间,而抗生素时间又回到 datatime 不等于给药时间的问题。

5.3 任务三:院内死亡预测与跨库迁移

用入 ICU 后早期数据预测院内死亡,是重症领域的标准任务。本库提供了 161 例死亡样本,够做基线模型。

更有意思的是跨库迁移。用 MIMIC 训练、在本库测试,或者反过来,能直接回答「模型能否跨人群泛化」这个实际问题。

跨库迁移的主要障碍是变量不对齐。两边的检验项目名称、单位、参考范围都不同,生命体征的记录频率也不同。解决路径是先建立一个共同的最小变量集(例如年龄、性别、生命体征四项、常用检验十项),只在这个子集上建模。变量少了,性能会降,但可比性上来了。

还要注意结局定义的差异。本库的死亡判定靠 Status_Discharge 字段,MIMIC 靠 hospital_expire_flag,两者都是院内死亡,定义一致,可以直接比。

5.4 任务四:SF-36 长期结局的关联分析

SF-36 随访是本库相对同类资源的差异点。可以做的问题是:哪些入院时的特征与出院后的功能状态相关。

分析框架建议这样搭:以 SF-36 的某个维度(例如生理功能)为结局,以入 ICU 时的基线特征、住院期间的暴露(机械通气天数、血管活性药使用、ICU 停留时长)为预测变量,做回归。

三个必须先解决的问题。第一是覆盖率,若随访只覆盖少数人,样本量可能不足以支撑多变量模型。第二是失访偏倚,完成随访的人可能本身恢复得较好,得出的关联会被低估或高估。第三是版本,SF-36 各版本的计分不同,不能混用。

5.5 任务五:护理记录的结构化抽取

把中文护理记录里的非结构化信息转成结构化字段,是一项基础设施性质的工作,价值在于为后续所有分析铺路。

值得抽取的内容包括:意识状态(清醒/嗜睡/昏迷)、呼吸支持方式(鼻导管/面罩/无创/有创)、体位、皮肤状况、出入量、特殊事件(跌倒、非计划拔管)。

抽取方法上,规则与模型要结合。固定短语用规则抽取,准确率高、成本低;表述多变的用模型,覆盖面广。起步阶段建议先做规则,把最常见的几种表述覆盖住,看覆盖率能到多少,再决定是否上模型。

5.6 可复现的最小分析路径

步骤 动作 产出
1 取证下载,核对七张表的行数与列名 结构清单
2 按 INP_NO 统计住院次,按 PATIENT_ID 统计人数 单位核对
3 核对 Status_Discharge 的 dead 记录数是否为 161 死亡率对账
4 统计每张表的缺失率,列出缺失最重的十个变量 缺失画像
5 从 dtTransfer 提取入 ICU 时点,验证时间零点 时间轴基准
6 抽取护理记录中的四项生命体征,拼成时序 生命体征表
7 用 qSOFA 做一次外部验证,报 AUC 与校准 基线性能

第三步的对账很重要。161 是官方给的死亡数,若自己数出来不是这个数,说明 Status_Discharge 的理解有偏差或数据有版本差异,必须先解决再往下做。

第七步选 qSOFA 而不是 NEWS,是因为它只要三个变量,缺失处理简单,适合作为第一个跑通的基线。跑通之后再扩展到更复杂的评分。

5.7 DAIMS 24 项检查

维度 项 判定
文档 数据字典 部分(七表用途说明,字段未逐列列出)
文档 采集协议 是(纳排标准明确)
文档 设备规格 不适用(源自信息系统)
文档 标注规范 部分(感染靠关键词,诊断靠临床)
文档 版本历史 是(v1.0 与 v1.1,差异已说明)
文档 许可说明 是
文档 引用格式 是
文档 局限披露 是(四项,简明)
质量 缺失披露 否(只说「many variables」)
质量 信号质量说明 不适用(无波形)
质量 一致性检验 否
质量 金标准对照 部分(诊断来自临床)
质量 异常值处理 否
质量 隐私处理 是(去标识说明详细)
可得性 开放程度 否(凭证式)
可得性 下载方式 是
可得性 文件校验 否(页面未提校验和)
可得性 数据体量 否(未给体积)
可得性 格式说明 是(CSV 七表)
可得性 工具支持 否(无代码、无基线)
伦理 伦理批准 部分(两个编号并存)
伦理 知情同意 是(回顾性豁免,已说明)
伦理 试验注册 不适用(非临床试验)
伦理 去标识化说明 是(HIPAA 标识、时间偏移、年龄随机化)

24 项中「是」11 项、「部分」6 项、「否」6 项、不适用 1 项。

伦理一项判「部分」而非「是」,唯一原因是两个批号并存。去标识化那一项判「是」,因为官方把手段写得很具体:移除 HIPAA 受保护健康信息、两个主键随机赋值、事件时间改为入院后小时偏移、89 岁以上年龄随机化。这四项合起来是一套完整的去标识方案,披露水平高于多数同类数据集。

§6 常见误读与引用陷阱

6.1 误读一:把纳入例数当 ICU 收治总量

前文已述。这是感染子集,不是全部重症患者。用它做科室运营分析会严重低估实际工作量。

6.2 误读二:把 5.8% 当救治质量指标

死亡率受纳入规则、人群构成、治疗强度决策三重影响。5.8% 低,很大程度上是因为纳入了大量轻中度感染,以及部分重症患者早期撤除治疗。跨医院比较死亡率必须做风险调整,未调整的粗死亡率没有可比性。

6.3 误读三:把医嘱时间当用药时间

datatime 是开立时间。用它算药物暴露时长、算抗生素升级时间、算用药到转归的间隔,都会偏短。这是本库使用中最容易犯且最难自查的错误,因为在数据里看不出来——两个时间都「合理」,只是含义不同。

6.4 误读四:把护理记录当纯数值表

护理记录同时含数值与中文叙述。若只按数值列读,会丢掉大量信息;若把中文列当噪声跳过,就浪费了这份数据最独特的部分。更糟的是把两者混在一起做统计,会得到无意义的结果。

6.5 误读五:忽略版本

v1.0 与 v1.1 的体温数据差别很大,而体温是感染判定的核心变量。若方法部分不写版本号,读者无法判断结论是否可信。

6.6 引用时必须写清的五件事

  1. 纳入的是成人重症感染患者,不是 ICU 收治总数
  2. 数据来自四川省自贡市第四人民医院,2019 年 1 月至 2020 年 12 月
  3. 使用的是 v1.1,其相对 v1.0 补充了体温
  4. 院内死亡率 5.8%(161/2790),非风险调整
  5. 访问需凭证、协议、培训三层手续,不可再分发

§7 在生态中的位置

7.1 与西方重症数据库的关系

MIMIC、eICU、AmsterdamUMCdb 构成了重症数据科学的基础设施。它们的共同点是规模大、字段多、文档完善、社区活跃。

本库的定位不是替代,而是提供一个人群不同的验证场景。跨人群验证是临床预测模型从论文走向实践的关键一步,而这一步长期缺少中国数据。

7.2 与中国其他公开医学数据的差异

国内公开的医学数据以影像为主——各类影像挑战赛提供了大量标注数据。结构化 EHR 数据相对少见,重症方向尤其少。

本库在这个格局里的位置是:它是少数几个以「中国成人重症」为对象的、可通过国际平台获取的结构化数据集之一。规模不大,但填补的是结构性空白。

7.3 长期可用性判断

本库 2021 年 9 月发布 v1.0,2022 年 6 月更新到 v1.1,此后无更新。PhysioNet 对受限条目长期保存,DOI 稳定。

风险主要在两点。一是数据治理:受限数据的访问依赖机构持续维护凭证体系,若原始机构撤销授权,条目可能下架(历史上发生过类似情况)。二是后续无更新:2019–2020 的时间窗会越来越旧,做趋势研究时需要补充更新的数据。

7.4 适合谁用

使用者 适合做的事 不适合做的事
重症研究者 评分外部验证、风险因素分析 波形分析、呼吸机精细研究
临床 NLP 团队 中文护理记录的信息抽取 大规模预训练
流行病学团队 中国感染患者的人群描述 全国代表性推断
模型开发者 跨人群迁移的测试集 单一数据源训练

§8 总结

这份数据库的价值在于位置而非规模。两千余例在重症数据里不算大,但「中国成人重症感染」这个位置上此前几乎没有公开数据。

它的三个特点决定用法。第一,纳入靠出院诊断关键词,边界由规则划定,做院内感染研究时要留意这个偏向。第二,七张表各有各的坑——医嘱时间是开立不是执行、护理记录混合数值与文本、死亡标记是患者级复制到每行。第三,有 SF-36 长期随访,这是同类资源里少见的维度,但覆盖率未知。

使用时的三条底线:按感染子集而非 ICU 总量理解规模;按 v1.1 使用并标注版本;把医嘱时间与给药时间严格区分。

§9 术语与口径速查

术语 全称 本文口径
ICU Intensive Care Unit 重症监护病房
SIRS Systemic Inflammatory Response Syndrome 全身炎症反应综合征
Sepsis-3 第三次脓毒症国际共识定义 以 SOFA 跃升定义的脓毒症
qSOFA quick Sequential Organ Failure Assessment 床旁快速筛查,三项指标
SOFA Sequential Organ Failure Assessment 序贯器官衰竭评分
APACHE II Acute Physiology and Chronic Health Evaluation II 急性生理与慢性健康评分
SF-36 36-Item Short Form Survey 生活质量量表,八个维度
ICD International Classification of Diseases 国际疾病分类
HIS Hospital Information System 医院信息系统
LIS Laboratory Information System 检验信息系统
INP_NO Inpatient Number 住院号,住院级标识
PATIENT_ID — 患者标识,跨住院不变
撤除生命支持 withdrawal of life-sustaining treatment 放弃维持治疗,导致病程被人为截断

§10 事实清单与附录

10.1 核心事实

项 值
患者例数 2,790
院内死亡 161
院内死亡率 5.8%
时间窗 2019-01 至 2020-12
机构 四川省自贡市第四人民医院
年龄门槛 大于 18 岁
数据表数 7
性别差异 非幸存者男性 70%,幸存者 59%,p=0.014
伦理批号 2020-065 与 2021-014(页面两处不一致)
v1.0 发布 2021-09-09
v1.1 发布 2022-06-30
DOI(v1.1) 10.13026/xpt9-z726
DOI(latest) 10.13026/cgzc-vp58
访问等级 Credentialed
许可 PhysioNet Credentialed Health Data License 1.5.0

10.2 七表用途速查

表 一行代表 主要用途 注意
dtBaseline 一位患者 协变量 字段需下载后核对
dtDrugs 一条医嘱 用药模式 datatime 非给药时间
dtICD 一条诊断 疾病谱、死亡判定 Status_Discharge 为患者级复制
dtLab 一次检验 实验室时序 含参考范围,可做跨机构标准化
dtTransfer 一次转科 入 ICU 时点 时间零点来源
dtNursingChart 一次护理记录 生命体征、中文文本 数值与叙述混合
dtOutcome 一位患者 院内转归、SF-36 随访覆盖率未知

10.3 附录 A:把七张表按患者拼起来

import pandas as pd

BASE = 'icu-infection-zigong-fourth-1.1/'

base = pd.read_csv(BASE + 'dtBaseline.csv')
icd  = pd.read_csv(BASE + 'dtICD.csv')
lab  = pd.read_csv(BASE + 'dtLab.csv')
trf  = pd.read_csv(BASE + 'dtTransfer.csv')
nur  = pd.read_csv(BASE + 'dtNursingChart.csv')
drug = pd.read_csv(BASE + 'dtDrugs.csv')
out  = pd.read_csv(BASE + 'dtOutcome.csv')

-- 先核对两个键的关系:一人可多次住院
by_pat = base.groupby('PATIENT_ID').size()
print('患者数', base.PATIENT_ID.nunique(), '住院次', base.INP_NO.nunique())
print('多次住院的患者数', (by_pat > 1).sum())

-- 死亡对账:Status_Discharge 为患者级复制,需按住院去重
dead = (icd[icd.Status_Discharge.astype(str).str.lower() == 'dead']
        .drop_duplicates('INP_NO'))
print('院内死亡住院次', len(dead), '死亡率', round(len(dead) / base.INP_NO.nunique(), 4))

-- 入 ICU 时点:从转科表取,作为所有时间轴的零点基准
icu_in = trf[trf.iloc[:, :].astype(str).apply(
    lambda r: r.str.contains('ICU', case=False).any(), axis=1)]
print(icu_in.head())

-- 检验时序:按住院拼回,注意时间以入院为零点的小时偏移
lab_long = lab.merge(base[['INP_NO', 'PATIENT_ID']], on='INP_NO', how='left')
print(lab_long.groupby('INP_NO').size().describe())

这段代码有三个不成立即需重来的前提。

第一,列名按常见惯例假设(PATIENT_ID、INP_NO、Status_Discharge),实际列名以下载后读到的表头为准。官方只明确提到了这三个键名与 Status_Discharge,其余列名未公开。

第二,死亡对账必须先按 INP_NO 去重。因为 Status_Discharge 是患者级标记被复制到每一行诊断,直接数 dead 的行数会远大于 161。

第三,转科表里识别「转入 ICU」的那一列,可能需要按科室名匹配而非固定列名。若科室名有多个写法(ICU、重症医学科、综合 ICU),匹配规则要相应放宽。

10.4 附录 B:五个可立即验证的疑问

  1. 七张表各自的列名与行数是什么?官方只给了用途描述。
  2. SF-36 随访实际覆盖多少人,覆盖者的基线特征与未覆盖者有何差异?
  3. 各变量的缺失率分别是多少,缺失最重的是哪几项?
  4. 关键词纳入规则漏掉了多少「诊断写脓毒症但未写感染」的病例?
  5. 2020 年的患者中,新冠相关病例如何被记录与纳入?

这五个问题官方页面都没有答案,只能下载后自行核对。第二个与第五个对结论的解释力影响最大。

10.5 附录 C:证据链

本文数字来自 PhysioNet 条目页 v1.1,包括:总例数、161 例死亡、5.8% 死亡率、非幸存者与幸存者男性比例 70% 对 59% 及 p=0.014、时间窗 2019-01 至 2020-12、年龄大于 18 岁、机构为自贡市第四人民医院、伦理批号 2020-065 与 2021-014、七张表名称与用途、关键词纳入规则、去标识四项手段、四项官方局限、两个 DOI、两个版本的发布日期、许可与访问等级。

凡页面未给出而本文提及的结构性判断(字段名、随访覆盖率、缺失率、新冠病例纳入方式),均标注为待核实并列入附录 B,未作推断性填充。

编辑说明

核验时点:2026 年 10 月 19 日,依据 PhysioNet 条目页 v1.1。

核验方式:官方页面逐段读,重点核对规模、时间窗、纳入规则、七表用途、去标识手段、局限清单与版本差异。因条目为受限访问,未能下载数据核对字段与缺失率,所有涉及表结构与缺失的判断均标明为待核实。

口径处理:总例数统一表述为「成人重症感染患者例数」,不使用「ICU 患者数」。5.8% 死亡率明确标注为非风险调整的粗率。伦理批号两个并列呈现,未择一采信,因为官方页面本身矛盾且未说明。

未覆盖内容:未核对 SF-36 的版本与计分方式;未核实 2020 年新冠相关病例的处理;未评估关键词纳入规则的漏检与误纳比例。这三项都需要数据到手后才能进行。


相关数据集导航

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

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

返回 AI-Ready 数据集