Chuyển đến nội dung chính

レッスン 20: CDM_SOURCE、METADATA、COHORT、および OMOP CDM 5.4 全体の概要

テーブル CDM_SOURCE はデータ ソースを記述し、METADATA は追加情報を保存し、COHORT は研究グループを管理します。 37 個の OMOP CDM 5.4 テーブルすべての概要と次のロードマップ。

🏗️ アーキテクチャ — レッスン 20 CDM_SOURCE、メタデータ、 コホートと OMOP の概要 5.4 初心者向け OMOP CDM 5.4 — A to Z を理解する パート 7: メタデータ、コホート、概要 xdev.asia

OMOP CDM 5.4 の完全な概要 — 37 テーブル、7 グループ

はじめに

シリーズ最終投稿! メタデータ グループ (CDM_SOURCE、METADATA) と COHORT (研究グループ管理テーブル) について学びます。次に、37 以上の OMOP CDM 5.4 テーブルとさらなる学習ロードマップをすべて要約します。


1. CDM_SOURCE — データソース情報

###1.1.テーブル構造

コラムタイプ必須説明
cdm_source_nameVARCHAR(255)✅データソース名
cdm_source_abbreviationVARCHAR(25)✅略称
cdm_holderVARCHAR(255)所有組織
source_descriptionクロブ詳細な説明
source_documentation_referenceVARCHAR(255)ドキュメントの URL
cdm_etl_referenceVARCHAR(255)URL ETL ドキュメント
source_release_date日付データ公開日
cdm_release_date日付CDM 変換日
cdm_versionVARCHAR(10)CDM バージョン (v5.4)
cdm_version_concept_id整数FK → コンセプト
vocabulary_versionVARCHAR(20)語彙バージョン

###1.2.ベトナムのデータ例

INSERT INTO cdm_source (
    cdm_source_name,
    cdm_source_abbreviation,
    cdm_holder,
    source_description,
    cdm_etl_reference,
    source_release_date,
    cdm_release_date,
    cdm_version,
    cdm_version_concept_id,
    vocabulary_version
) VALUES (
    'Bệnh viện Bạch Mai - Hệ thống HIS',
    'BACHMAI_HIS',
    'Bệnh viện Bạch Mai',
    'Dữ liệu EMR từ hệ thống HIS Bệnh viện Bạch Mai, '
    || 'bao gồm khám ngoại trú và nội trú từ 2020-2024. '
    || 'Chuyển đổi theo OMOP CDM 5.4 phục vụ nghiên cứu '
    || 'dịch tễ học lâm sàng.',
    'https://github.com/bachmai-etl/omop-cdm',
    '2024-06-30',       -- Ngày xuất dữ liệu nguồn
    '2024-09-15',       -- Ngày hoàn tất ETL
    'v5.4',
    756265,             -- CDM v5.4 concept_id
    'v5.0 30-AUG-24'   -- Vocabulary version từ Athena
);

###1.3. CDM_SOURCE が重要なのはなぜですか?

  • トレーサビリティ: データがどこから来たのか、ETL がいつなのかを知る
  • ネットワーク調査: サイト間の結果を比較
  • 再現性: 研究結果を再現します。
  • コンプライアンス: コンプライアンス監査

2. メタデータ — 追加情報

###2.1.テーブル構造

コラムタイプ必須説明
metadata_id整数✅PK固有の ID
metadata_concept_id整数✅タイプメタデータ (FK → CONCEPT)
metadata_type_concept_id整数✅タイプメタデータ
nameVARCHAR(250)✅キー名
value_as_stringVARCHAR(250)テキスト値
value_as_concept_id整数コンセプトバリュー
value_as_numberフロート数値
metadata_date日付記録日
metadata_datetime日時記録日時

###2.2.使用例

-- Ghi nhận thông tin ETL
INSERT INTO metadata VALUES (1, 0, 0, 'ETL_TOOL', 'WhiteRabbit + RabbitInAHat', NULL, NULL, '2024-09-15', NULL);
INSERT INTO metadata VALUES (2, 0, 0, 'ETL_VERSION', '1.2.0', NULL, NULL, '2024-09-15', NULL);
INSERT INTO metadata VALUES (3, 0, 0, 'SOURCE_PATIENT_COUNT', NULL, NULL, 125000, '2024-09-15', NULL);
INSERT INTO metadata VALUES (4, 0, 0, 'CDM_PATIENT_COUNT', NULL, NULL, 118500, '2024-09-15', NULL);
INSERT INTO metadata VALUES (5, 0, 0, 'MAPPING_COVERAGE_PCT', NULL, NULL, 94.8, '2024-09-15', NULL);
INSERT INTO metadata VALUES (6, 0, 0, 'COUNTRY', 'Vietnam', NULL, NULL, '2024-09-15', NULL);

METADATA は柔軟なキーと値のテーブルであり、CDM_SOURCE に収まらない情報を保存するために使用されます。


3. コホート — 研究チーム

###3.1.テーブル構造

コラムタイプ必須説明
cohort_definition_id整数✅FK → COHORT_DEFINITION
subject_id整数✅エンティティ ID (通常 = person_id)
cohort_start_date日付✅コホート登録日
cohort_end_date日付✅コホートのリリース日

###3.2. COHORT_DEFINITION (レッスン 16 を思い出してください)

コラムタイプ説明
cohort_definition_id整数 PK定義ID
cohort_definition_nameVARCHAR(255)コホート名
cohort_definition_descriptionクロブ説明
definition_type_concept_id整数タイプ
cohort_definition_syntaxクロブコホートを作成するロジック
subject_concept_id整数オブジェクト
cohort_initiation_date日付作成日

###3.3.使用方法: 2 型糖尿病コホートを作成する

-- Bước 1: Định nghĩa cohort
INSERT INTO cohort_definition (
    cohort_definition_id,
    cohort_definition_name,
    cohort_definition_description,
    definition_type_concept_id,
    cohort_definition_syntax,
    subject_concept_id,
    cohort_initiation_date
) VALUES (
    101,
    'Tiểu đường Type 2 mới phát hiện 2023',
    'BN có chẩn đoán T2DM lần đầu trong 2023, '
    || 'có ít nhất 365 ngày observation trước đó, '
    || 'không có T1DM.',
    0,
    '{
        "PrimaryCriteria": {
            "CriteriaList": [{
                "ConditionOccurrence": {
                    "CodesetId": 201826
                }
            }],
            "ObservationWindow": {"PriorDays": 365}
        },
        "ExclusionCriteria": [{
            "ConditionOccurrence": {
                "CodesetId": 201254
            }
        }]
    }',
    0,
    '2024-09-15'
);

-- Bước 2: Populate cohort
INSERT INTO cohort (
    cohort_definition_id,
    subject_id,
    cohort_start_date,
    cohort_end_date
)
SELECT
    101 AS cohort_definition_id,
    co.person_id AS subject_id,
    MIN(co.condition_start_date) AS cohort_start_date,
    COALESCE(
        (SELECT MAX(op.observation_period_end_date)
         FROM observation_period op
         WHERE op.person_id = co.person_id),
        MIN(co.condition_start_date)
    ) AS cohort_end_date
FROM condition_occurrence co
JOIN concept_ancestor ca
    ON co.condition_concept_id = ca.descendant_concept_id
WHERE ca.ancestor_concept_id = 201826  -- Type 2 DM
  AND co.condition_start_date BETWEEN '2023-01-01' AND '2023-12-31'
  -- Phải có 365 ngày observation trước
  AND EXISTS (
      SELECT 1 FROM observation_period op
      WHERE op.person_id = co.person_id
        AND op.observation_period_start_date
            <= co.condition_start_date - INTERVAL '365 days'
  )
  -- Loại trừ T1DM
  AND NOT EXISTS (
      SELECT 1 FROM condition_occurrence co2
      JOIN concept_ancestor ca2
          ON co2.condition_concept_id = ca2.descendant_concept_id
      WHERE ca2.ancestor_concept_id = 201254  -- Type 1 DM
        AND co2.person_id = co.person_id
        AND co2.condition_start_date <= co.condition_start_date
  )
GROUP BY co.person_id;

###3.4.コホートの分析

-- Tổng quan cohort T2DM 2023
SELECT
    cd.cohort_definition_name,
    COUNT(DISTINCT c.subject_id) AS patient_count,
    AVG(p.year_of_birth) AS avg_birth_year,
    ROUND(
        SUM(CASE WHEN p.gender_concept_id = 8507 THEN 1 ELSE 0 END)
        * 100.0 / COUNT(*), 1
    ) AS male_pct
FROM cohort c
JOIN cohort_definition cd
    ON c.cohort_definition_id = cd.cohort_definition_id
JOIN person p ON c.subject_id = p.person_id
WHERE c.cohort_definition_id = 101
GROUP BY cd.cohort_definition_name;

4. OMOP CDM 5.4 全体の概要

###4.1. 37 以上のボードのグループ別リスト

  ╔═══════════════════════════════════════════════════╗
  ║            OMOP CDM 5.4 — 37+ Bảng               ║
  ╠═══════════════════════════════════════════════════╣
  ║                                                   ║
  ║  ▎ CLINICAL DATA (16 bảng)                        ║
  ║  ├── PERSON                    Bài 4              ║
  ║  ├── OBSERVATION_PERIOD        Bài 5              ║
  ║  ├── VISIT_OCCURRENCE          Bài 6              ║
  ║  ├── VISIT_DETAIL              Bài 6              ║
  ║  ├── CONDITION_OCCURRENCE      Bài 7              ║
  ║  ├── DRUG_EXPOSURE             Bài 8              ║
  ║  ├── PROCEDURE_OCCURRENCE      Bài 9              ║
  ║  ├── MEASUREMENT               Bài 10             ║
  ║  ├── OBSERVATION               Bài 11             ║
  ║  ├── DEVICE_EXPOSURE           Bài 12             ║
  ║  ├── SPECIMEN                  Bài 12             ║
  ║  ├── NOTE                      Bài 12             ║
  ║  ├── NOTE_NLP                  Bài 12             ║
  ║  ├── DEATH                     Bài 13             ║
  ║  ├── EPISODE                   Bài 13 (CDM 5.4)  ║
  ║  └── EPISODE_EVENT             Bài 13 (CDM 5.4)  ║
  ║                                                   ║
  ║  ▎ HEALTH SYSTEM DATA (3 bảng)                    ║
  ║  ├── LOCATION                  Bài 17             ║
  ║  ├── CARE_SITE                 Bài 17             ║
  ║  └── PROVIDER                  Bài 17             ║
  ║                                                   ║
  ║  ▎ HEALTH ECONOMICS DATA (2 bảng)                 ║
  ║  ├── PAYER_PLAN_PERIOD         Bài 18             ║
  ║  └── COST                      Bài 18             ║
  ║                                                   ║
  ║  ▎ STANDARDIZED VOCABULARIES (12 bảng)            ║
  ║  ├── CONCEPT                   Bài 3, 14          ║
  ║  ├── VOCABULARY                Bài 14             ║
  ║  ├── DOMAIN                    Bài 14             ║
  ║  ├── CONCEPT_CLASS             Bài 14             ║
  ║  ├── CONCEPT_RELATIONSHIP      Bài 15             ║
  ║  ├── RELATIONSHIP              Bài 15             ║
  ║  ├── CONCEPT_SYNONYM           Bài 15             ║
  ║  ├── CONCEPT_ANCESTOR          Bài 15             ║
  ║  ├── SOURCE_TO_CONCEPT_MAP     Bài 15             ║
  ║  ├── DRUG_STRENGTH             Bài 16             ║
  ║  ├── COHORT_DEFINITION         Bài 16, 20         ║
  ║  └── ATTRIBUTE_DEFINITION      Bài 16             ║
  ║                                                   ║
  ║  ▎ DERIVED ELEMENTS (3 bảng)                      ║
  ║  ├── CONDITION_ERA             Bài 19             ║
  ║  ├── DRUG_ERA                  Bài 19             ║
  ║  └── DOSE_ERA                  Bài 19             ║
  ║                                                   ║
  ║  ▎ METADATA (2 bảng)                              ║
  ║  ├── CDM_SOURCE                Bài 20             ║
  ║  └── METADATA                  Bài 20             ║
  ║                                                   ║
  ║  ▎ COHORT (1 bảng)                                ║
  ║  └── COHORT                    Bài 20             ║
  ║                                                   ║
  ╚═══════════════════════════════════════════════════╝

###4.2. 5 つの設計原則 (繰り返し)

#原則意味
1個人中心PERSON
2観察期間追跡期間中のみの分析
3標準コンセプト語彙による標準化されたコード
4ドメインルーティングデータはドメインに従ってテーブルに入力されます
5ソース値は保持されます元のソース コードをそのまま保持します

###4.3. CDM 5.4 — 重要な変更点 (5.3 と比較)

変更詳細
エピソード / エピソード_イベント腫瘍学用の新しいテーブル
measurement_event_idMEASUREMENT
observation_event_idOBSERVATION におけるポリモーフィック FK
手続き終了日/日時手順の終了日を追加
unit_source_concept_id測定値に追加
production_idDEVICE_EXPOSURE (UDI) を追加

5. データ品質チェック (DQD)

###5.1. OHDSI データ品質ダッシュボード

  ┌──────────────────────────────────────────┐
  │         Data Quality Dashboard (DQD)      │
  │                                           │
  │  Kiểm tra 3500+ rules:                   │
  │                                           │
  │  1. Completeness  — Đầy đủ               │
  │     Bao nhiêu % records có concept != 0?  │
  │                                           │
  │  2. Conformance   — Tuân thủ              │
  │     Giá trị có hợp lệ? (date, range)     │
  │                                           │
  │  3. Plausibility  — Hợp lý               │
  │     Trẻ 5 tuổi có chẩn đoán Alzheimer?   │
  │                                           │
  │  Output: Bảng báo cáo PASS/FAIL          │
  │          cho từng rule                     │
  └──────────────────────────────────────────┘

###5.2. SQLを使ったクイックチェック

-- Mapping completeness: % records có concept_id != 0
SELECT
    'condition_occurrence' AS table_name,
    COUNT(*) AS total,
    SUM(CASE WHEN condition_concept_id = 0 THEN 1 ELSE 0 END) AS unmapped,
    ROUND(
        SUM(CASE WHEN condition_concept_id != 0 THEN 1 ELSE 0 END)
        * 100.0 / COUNT(*), 1
    ) AS mapped_pct
FROM condition_occurrence

UNION ALL

SELECT 'drug_exposure', COUNT(*),
    SUM(CASE WHEN drug_concept_id = 0 THEN 1 ELSE 0 END),
    ROUND(SUM(CASE WHEN drug_concept_id != 0 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1)
FROM drug_exposure

UNION ALL

SELECT 'procedure_occurrence', COUNT(*),
    SUM(CASE WHEN procedure_concept_id = 0 THEN 1 ELSE 0 END),
    ROUND(SUM(CASE WHEN procedure_concept_id != 0 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1)
FROM procedure_occurrence

UNION ALL

SELECT 'measurement', COUNT(*),
    SUM(CASE WHEN measurement_concept_id = 0 THEN 1 ELSE 0 END),
    ROUND(SUM(CASE WHEN measurement_concept_id != 0 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1)
FROM measurement;
-- Kiểm tra orphan records
-- (records không có observation_period tương ứng)
SELECT 'condition_occurrence' AS src, COUNT(*) AS orphan_count
FROM condition_occurrence co
WHERE NOT EXISTS (
    SELECT 1 FROM observation_period op
    WHERE op.person_id = co.person_id
      AND co.condition_start_date BETWEEN
          op.observation_period_start_date
          AND op.observation_period_end_date
)

UNION ALL

SELECT 'drug_exposure', COUNT(*)
FROM drug_exposure de
WHERE NOT EXISTS (
    SELECT 1 FROM observation_period op
    WHERE op.person_id = de.person_id
      AND de.drug_exposure_start_date BETWEEN
          op.observation_period_start_date
          AND op.observation_period_end_date
);

6. OHDSI ツールのエコシステム

ツール役割
ホワイトラビットソースデータをスキャン
ウサギの帽子ETL マッピングを設計する
うさぎソースコードマップ → 標準コンセプト
アテナ語彙のダウンロード/検索
アトラスコホートの作成、分析、特徴付け
WebAPIATLAS 用バックエンド API
アキレスデータベースプロファイリングと DQD
ハデス研究用 R パッケージ (PLE、PLP)
データ品質ダッシュボードデータ品質をチェックする

7. 次のルート

  Bạn đã hoàn thành ✅
  ──────────────────────────────────
  OMOP CDM 5.4 — 37+ bảng, 7 nhóm
  ETL concepts, Vocabulary system
  VN-specific mapping patterns

  Bước tiếp theo 📘
  ──────────────────────────────────
  1. Thực hành ETL
     → Dùng WhiteRabbit + RabbitInAHat
     → Chuyển 1 bộ dữ liệu nhỏ sang OMOP

  2. ATLAS & Cohort Building
     → Cài ATLAS + WebAPI
     → Tạo cohort definitions UI

  3. Achilles + DQD
     → Chạy database profiling
     → Kiểm tra chất lượng dữ liệu

  4. Nghiên cứu với HADES
     → Population Level Estimation
     → Patient Level Prediction
     → Characterization

  5. Tham gia cộng đồng OHDSI
     → forums.ohdsi.org
     → OHDSI Symposium hàng năm
     → Study-a-thon

概要

  1. CDM_SOURCE: データ ソース、CDM、および語彙のバージョンに関するメタデータ
  2. METADATA: キーと値のテーブルには追加情報 (ETL ツール、カバレッジなど) が格納されます。
  3. COHORT + COHORT_DEFINITION: 研究チームの管理、ATLAS の基盤
  4. OMOP CDM 5.4 には 7 つのグループに 37 以上のテーブルが含まれており、すべて PERSON を中心に展開します
  5. 新しい CDM 5.4: EPISODE/EPISODE_EVENT、ポリモーフィック FK、procedure_end_date

OMOP CDM 5.4 for Beginners シリーズの完了おめでとうございます。ここから、国際標準に従ってベトナムの医療データの ETL に着手するための強固な基盤が得られます。


参考文献