什么东西.123 2025-12-06 13:11 采纳率: 0%
浏览 2

关于MIMIC数据库复现练手遇到的问题!

学习了数据库相关文章和数据提取分析后想自己练手试一试
想复现以下文章

img

提取筛选数据的过程中就遇到了问题
,原文的纳排为下图

img

其他我都能自己提取到
唯一就是既往有房颤史的患者我没有思路排除
好像数据库本身是没有既往史相关记录的
恳求各位能人解答

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2025-12-06 13:12
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你提到在复现文章时,既往有房颤史的患者的排除是一个难点。确实,在MIMIC数据库中,既往病史(如房颤)的记录并不是像“诊断”那样直接存储在一个字段中,而是需要通过ICD-9/10编码文本描述临床注释等方式进行推断和提取。

    下面我将详细说明如何从MIMIC数据库中筛选出既往有房颤史的患者,并给出具体步骤和代码示例,帮助你完成数据清洗和筛选。


    一、问题分析

    1. MIMIC数据库的特点

    • MIMIC数据库中没有专门的“既往病史”表。
    • 房颤(Atrial Fibrillation, AF)通常以以下方式出现:
      • 诊断表(diagnoses_icd):包含ICD-9/10编码
      • 实验室检查(labevents):某些指标可能间接提示房颤
      • 临床注释(noteevents):医生笔记中可能提及房颤史
      • 药物表(medevents):某些抗凝药物可能与房颤相关

    二、解决方案(详细步骤)

    1. 使用ICD-9/10编码识别房颤

    房颤的ICD-9和ICD-10编码如下:

    | ICD版本 | 编码 | 说明 | |---------|------------|----------------| | ICD-9 | 427.31 | 心房颤动 | | ICD-10 | I48.0 | 心房颤动 |

    SQL查询示例(基于diagnoses_icd表):

    SELECT DISTINCT subject_id
    FROM diagnoses_icd
    WHERE (icd9_code = '427.31' OR icd10_code = 'I48.0')
    AND hospital_expire_flag = 0; -- 排除已死亡患者
    

    注意: 需要根据你的MIMIC版本(如MIMIC-III或MIMIC-IV)选择对应的编码。


    2. 使用临床注释(noteevents)查找房颤史

    有些患者在入院前的门诊记录入院评估中会提到“既往有房颤史”。

    SQL查询示例(基于noteevents表):

    SELECT DISTINCT subject_id
    FROM noteevents
    WHERE (text LIKE '%atrial fibrillation%' OR text LIKE '%房颤%')
    AND category = 'Discharge summary'; -- 或其他合适的类别
    

    注意: 需要结合具体注释类型(如“Admission Note”、“Discharge Summary”等)来提高准确性。


    3. 结合药物表(medevents)辅助判断

    某些抗凝药物(如华法林、达比加群)可能提示患者有房颤史。

    SQL查询示例(基于medevents表):

    SELECT DISTINCT subject_id
    FROM medevents
    WHERE drug IN ('warfarin', 'dabigatran', 'rivaroxaban');
    

    注意: 药物使用可能不完全反映房颤史,需结合其他数据源。


    4. 综合所有信息,构建房颤史筛选逻辑

    你可以将上述方法结合起来,构建一个更全面的筛选逻辑。

    示例SQL(综合多个来源):

    WITH af_patients AS (
        SELECT DISTINCT subject_id
        FROM diagnoses_icd
        WHERE icd9_code = '427.31' OR icd10_code = 'I48.0'
        UNION
        SELECT DISTINCT subject_id
        FROM noteevents
        WHERE text LIKE '%atrial fibrillation%' OR text LIKE '%房颤%'
        AND category = 'Discharge summary'
        UNION
        SELECT DISTINCT subject_id
        FROM medevents
        WHERE drug IN ('warfarin', 'dabigatran', 'rivaroxaban')
    )
    SELECT * 
    FROM patients
    WHERE subject_id NOT IN (SELECT * FROM af_patients);
    

    注意: 上述SQL是示例,具体字段名和表结构可能因MIMIC版本而异,需根据实际数据库调整。


    三、关键点总结(重点部分)

    ✅ 关键点一:ICD编码是识别房颤的主要手段

    • 使用diagnoses_icd表中的ICD-9/10编码(如427.31或I48.0)可以有效识别房颤患者。

    ✅ 关键点二:临床注释可补充房颤史信息

    • 通过noteevents表中的文本内容(如“房颤史”、“心房颤动”等)可以进一步确认患者是否有房颤史。

    ✅ 关键点三:药物使用可作为辅助判断依据

    • 抗凝药物(如华法林)可能提示患者有房颤史,但不能单独作为判断依据。

    ✅ 关键点四:需结合多种数据源进行交叉验证

    • 单一数据源可能遗漏信息,建议结合ICD、注释、药物等多个来源进行筛选。

    四、推荐学习资源(供参考)

    1. MIMIC-III Documentation
    2. MIMIC-IV Documentation
    3. ICD-9/10 Code Lookup
    4. MIMIC-III Example Queries

    五、修改后的代码示例(假设使用MIMIC-III)

    如果你使用的是MIMIC-III数据库,可以尝试以下SQL语句:

    -- 提取有房颤史的患者
    WITH af_patients AS (
        SELECT DISTINCT subject_id
        FROM diagnoses_icd
        WHERE icd9_code = '427.31'
        UNION
        SELECT DISTINCT subject_id
        FROM noteevents
        WHERE text LIKE '%atrial fibrillation%' OR text LIKE '%房颤%'
        AND category = 'Discharge summary'
        UNION
        SELECT DISTINCT subject_id
        FROM medevents
        WHERE drug IN ('warfarin', 'dabigatran', 'rivaroxaban')
    )
    -- 最终筛选:排除有房颤史的患者
    SELECT *
    FROM patients
    WHERE subject_id NOT IN (SELECT * FROM af_patients);
    

    六、注意事项

    • 数据质量:不同医院的注释格式可能不同,需灵活处理。
    • 时间范围:房颤史可能发生在入院前,需确保时间戳正确。
    • 去重:使用DISTINCT避免重复计数。

    如果你能提供具体的MIMIC版本(如MIMIC-III或MIMIC-IV),我可以进一步帮你优化SQL查询和筛选逻辑。希望以上内容对你有所帮助!如果还有其他问题,欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 12月6日