2. 纵向EHR数据工程基础

纵向EHR(Electronic Health Record,电子健康记录)与组学联合分析的第一步,不是建模,而是把“人—时间—事件—值”这条主线在工程上立稳。EHR本质上是以患者为主键、以时间戳为轴、以事件为记录单元的稀疏纵向数据集合。它不像组学矩阵那样天然对齐,而是由门诊、住院、检验、用药、影像报告、护理记录等多源系统在不同时间点写入,格式、粒度、编码体系各不相同。本节围绕数据来源、结构类型、时间戳处理、缺失模式与隐私合规五个工程要点展开,并给出可落地的处理约定。

一、数据来源与结构类型

纵向EHR的常见来源可分为四类:业务系统库(HIS、LIS、RIS/PACS、药房系统)、临床文档(入院记录、病程、出院小结)、登记与随访(专病库、随访表)、外部链接(医保结算、死亡登记)。它们进入分析层时通常被整理为三种结构:

  • 事件表(长表):一行一个观测,字段为 patient_id、event_time、item_code、value、unit、source。适合纵向建模,是联合分析的主表。
  • 宽表(时间窗矩阵):一行一个患者,列为“指标_时间窗”,如 HbA1c_0_90d。便于与组学样本对齐,但会放大缺失。
  • 序列/区间表:用于用药、住院等有起止时间的记录,字段含 start_time、end_time,可推导暴露窗口。

工程上建议以事件表为“事实层”,宽表为“特征层”按需生成,避免在源头就做不可逆的宽化。编码层面需统一到标准词表:检验项对齐LOINC,诊断对齐ICD-10/SNOMED,药品对齐RxNorm或ATC,单位统一到UCUM,否则后续跨中心联合分析无法对齐。

二、时间戳处理

时间戳是纵向EHR的“坐标系”,必须先定义参照再计算。常用约定:所有时间统一为UTC存储,展示时再转本地时区;时间精度按来源保留(检验常到分钟,护理可到秒);对仅有日期无时刻的记录,标记为 date_only=true,避免与精确时间混算。

关键处理包括:去重与合并(同一检验因复测产生多条,按最近值或均值规则保留)、时间窗对齐(以组学采样日为锚点T0,向前取基线窗、向后取随访窗)、相对时间计算(offset_days = event_time − T0,负值为基线前,正值为随访后)。示例:某患者T0为2023-05-10,肌酐记录于2023-04-28,则 offset_days = −12,落入“基线前30天”窗。若同一指标在窗内多次出现,需明确聚合规则(如取最接近T0的值),并在元数据中记录,保证可复现。

纵向EHR时间轴:以组学采样日 T0 为锚点对齐 时间 T0 组学采样 基线窗(T0−90d ~ T0) 随访窗(T0 ~ T0+180d) 肌酐 −12d HbA1c −45d 用药起始 −5d 肌酐 +30d HbA1c +90d 影像 +150d 缺失模式:基线窗内 HbA1c 仅 1 次 → 标记 sparse,不插补,保留缺失指示 隐私合规:patient_id 假名化,时间做 ±7d 抖动 → 输出仅含研究ID、offset_days、item_code、value 多源事件表 时间戳归一 T0 锚点对齐 缺失标记 + 合规输出

三、缺失模式

纵向EHR的缺失不是随机噪声,而是有结构的。常见模式有三类:MCAR(完全随机缺失,如设备偶发故障)、MAR(与可观测变量相关,如轻症患者少做检查)、MNAR(与缺失值本身相关,如病情太重未测某项)。工程上先做缺失画像:按指标统计缺失率、按时间窗统计缺失分布、按患者统计记录密度。对缺失率高于阈值(示例取60%)的指标,建议不进入主特征,仅保留缺失指示变量;对MAR可考虑多重插补,但必须记录插补前后版本,禁止在原始事实层直接覆盖。

实践建议:为每个指标维护 missing_flag 与 source_system 两个字段。前者用于建模时区分“未测”与“测了但为空”,后者用于追溯数据来源,排查系统性缺失。

四、隐私合规要求

EHR与组学联合分析涉及敏感健康信息,合规是硬约束。核心动作包括:去标识化(移除姓名、身份证、电话、住址等18类标识符)、假名化(用研究ID替换患者主键,映射表单独加密保管)、最小必要(只提取分析所需字段)、时间扰动(对日期做±7天随机抖动,保留相对顺序)、访问审计(记录谁在何时访问了哪批数据)。若涉及跨机构联合,优先采用联邦学习或只交换汇总统计,避免原始个体数据出域。

注意:时间扰动会改变 offset_days 的绝对值,因此必须在扰动前完成时间窗对齐,或在分析中把扰动作为已知误差纳入敏感性分析。切勿在扰动后再做精确的“距采样日天数”计算。

五、可执行的数据处理约定(示例)

以下为一份可直接参考的字段与规则约定,用于把上述要点落到工程实现:

字段含义示例值规则
research_id研究假名IDR000123与患者主键映射表分离存储
item_code标准编码LOINC:2160-0检验对齐LOINC,诊断对齐ICD-10
event_time事件时间(UTC)2023-04-28T09:12:00Z统一UTC,date_only单独标记
offset_days相对T0天数−12负值为基线前,正值为随访后
value / unit数值与单位88 / umol/L单位统一UCUM
missing_flag缺失指示11表示该窗内未测
source_system来源系统LIS用于追溯与偏差排查

按此约定,一条肌酐记录可整理为:R000123, LOINC:2160-0, 2023-04-28T09:12:00Z, offset_days=-12, 88, umol/L, missing_flag=0, LIS。当同一患者在基线窗内出现多次肌酐时,按“最接近T0”规则保留一条,其余进入历史明细表备查。这样既保证了特征层与组学样本的一一对应,又保留了事实层的可追溯性,为后续纵向EHR与组学联合建模打下干净、合规、可复现的数据底座。