4. 研究问题到队列定义的操作化
真实世界研究队列构建的第一个工程断点,往往不是数据不够,而是研究问题还停留在“临床上想问什么”,尚未被翻译成“数据库里能算出什么”。PICO框架(Population、Intervention/Exposure、Comparator、Outcome)是临床问题的标准表达方式,但它本身不是队列定义。从PICO到可执行队列,中间需要完成三件事:把每个P、I、C、O映射为可计算表型(computable phenotype),把研究边界固化为纳入排除标准,把时间关系锚定到具体的时间锚点(time anchor)。这三件事共同决定了队列的成员集合、索引日期和随访窗口,也决定了后续偏倚控制与统计分析的可行性。
一、PICO到可计算表型的映射
可计算表型是指用一组可执行的查询逻辑(诊断编码、药品编码、检验值、手术操作、文本规则等)在真实世界数据中识别出目标人群、暴露、对照与结局的操作性定义。PICO中的每个要素通常不是单一编码,而是一个“编码集+逻辑组合+时间条件”的表达式。
以“2型糖尿病患者使用SGLT2抑制剂与DPP-4抑制剂相比,心血管住院风险如何”为例:
- P(目标人群):2型糖尿病。可计算表型可定义为“至少1次T2DM诊断编码(ICD-10: E11.x)或至少1次HbA1c≥6.5%或至少1次降糖药处方”,并附加年龄≥18岁、连续入组≥365天等条件。
- I(暴露):SGLT2抑制剂。可计算表型为“首次出现SGLT2i通用名处方/发药记录”,并定义首次日期为暴露起始。
- C(对照):DPP-4抑制剂。可计算表型为“首次出现DPP-4i处方/发药记录”,且此前无SGLT2i暴露。
- O(结局):心血管住院。可计算表型为“住院记录中主诊断或次诊断含缺血性心脏病、心力衰竭、卒中相关编码”,并限定住院时长≥1天。
这里的关键工程原则是:每个表型必须可复现、可审计、可版本化。编码集应记录来源(如ICD-10、ATC、LOINC)、版本和生效日期;逻辑组合应明确“且/或/非”关系;时间条件应明确“首次/任意/在窗口内”。否则,同一PICO在不同分析者手中会得到不同队列。
二、纳入排除标准的工程化
纳入排除标准不是PICO的简单重复,而是对研究边界的进一步约束。常见维度包括:年龄、性别、数据可用性(如至少一次随访、至少一次关键检验)、既往病史、合并用药、妊娠状态、预期寿命等。工程化时,每条标准都应写成可执行的布尔条件,并明确其判断时点。
例如,对于上述研究,可设定:
- 纳入:年龄≥18岁;有T2DM表型;有至少一次SGLT2i或DPP-4i处方;入组前连续观察期≥365天。
- 排除:既往有SGLT2i或DPP-4i暴露;有1型糖尿病诊断;有终末期肾病或透析记录;有妊娠记录;数据质量不满足关键变量缺失阈值。
这些条件在SQL或分析代码中通常表现为一系列JOIN与WHERE子句。工程上建议将每条标准独立成模块,输出中间计数(如“满足P的人数”“满足P且满足纳入1的人数”),形成队列筛选漏斗,便于定位异常流失。
三、时间锚点与随访窗口
时间锚点是队列定义的“时间原点”,决定了暴露、结局和协变量的观察窗口。常见锚点包括:首次暴露日期、首次诊断日期、入组日期、索引日期(index date)。在比较效果研究中,通常以首次暴露日期作为索引日期,并要求暴露前有足够的基线期(如365天)用于协变量测量,暴露后有足够的随访期(如≥180天)用于结局观察。
时间锚点一旦确定,所有时间相关变量都应相对它定义:基线期 = [索引日期 - 365天, 索引日期);随访期 = (索引日期, 索引日期 + 随访结束];结局事件必须发生在随访期内。若锚点选择不当,会引入 immortal time bias 或时间窗错位。
四、从定义到可执行队列的落地要点
完成上述映射后,建议将队列定义写成一份可执行规格说明,至少包含:目标人群表型、暴露表型、对照表型、结局表型、纳入排除条件、索引日期定义、基线期与随访期长度、数据质量阈值。每条表型应附带编码列表与逻辑伪代码,便于在SQL、SAS、R或Python中实现。
例如,索引日期可定义为:index_date = MIN(首次SGLT2i或DPP-4i处方日期);基线期条件为index_date - 365天 ≥ 入组日期;随访结束为MIN(死亡日期, 退出日期, index_date + 730天)。这些表达式直接决定队列成员与随访人时。
总之,从PICO到可计算表型、纳入排除标准与时间锚点的转化,本质上是把临床语义逐层翻译为数据语义的过程。每一步都需要明确的对象、可执行的逻辑和可验证的时间条件。只有完成这一转化,队列才具备可复现、可审计、可分析的工程基础。