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

レッスン 16: DRUG_STRENGTH と残りの語彙テーブル

DRUG_STRENGTH は、薬剤の投与量情報、CONCEPT_SYNONYM、RELATIONSHIP テーブル、および 12 個すべての標準化された語彙テーブルの概要を提供します。

🏗️ アーキテクチャ — レッスン 16 DRUG_STRENGTH とテーブル 語彙が残っている 初心者向け OMOP CDM 5.4 — A to Z を理解する パート 5: 標準化された語彙 xdev.asia

はじめに

語彙セクションの最後の記事では、テーブル DRUG_STRENGTH (RxNorm から抽出された投与量情報) について説明し、標準化語彙グループの 12 のテーブルすべてをまとめています。この記事を読み終えると、OMOP 辞書システムの全体像がわかるようになります。


1. DRUG_STRENGTH — 薬剤の投与量

###1.1.テーブル構造

コラムタイプ説明
drug_concept_id整数FK → CONCEPT(ドラッグ)
ingredient_concept_id整数FK → CONCEPT(有効成分)
amount_valueフロート内容物(錠剤、カプセル)
amount_unit_concept_id整数単位 (mg、g、IU)
numerator_valueフロート分子 (解)
numerator_unit_concept_id整数単位分子
denominator_valueフロート型番
denominator_unit_concept_id整数単位分母
box_size整数1 箱あたりの錠剤数
valid_start_date日付
valid_end_date日付
invalid_reasonVARCHAR(1)

###1.2. 2種類の線量表現

タイプ 1: 固体 (錠剤、カプセル) → amount_value

-- Metformin 500mg Oral Tablet
SELECT
    c_drug.concept_name AS drug_name,
    c_ing.concept_name AS ingredient,
    ds.amount_value,
    c_unit.concept_name AS unit
FROM drug_strength ds
JOIN concept c_drug ON ds.drug_concept_id = c_drug.concept_id
JOIN concept c_ing ON ds.ingredient_concept_id = c_ing.concept_id
LEFT JOIN concept c_unit ON ds.amount_unit_concept_id = c_unit.concept_id
WHERE ds.drug_concept_id = 1503328;
-- Kết quả: Metformin | 500 | milligram

タイプ 2: 液体 (溶液、注射) → 分子/分母

-- Amoxicillin 250mg/5mL Oral Suspension
SELECT
    c_drug.concept_name,
    ds.numerator_value,
    c_num.concept_name AS num_unit,
    ds.denominator_value,
    c_den.concept_name AS den_unit
FROM drug_strength ds
JOIN concept c_drug ON ds.drug_concept_id = c_drug.concept_id
LEFT JOIN concept c_num ON ds.numerator_unit_concept_id = c_num.concept_id
LEFT JOIN concept c_den ON ds.denominator_unit_concept_id = c_den.concept_id
WHERE ds.drug_concept_id = 19077795;
-- Kết quả: 250 mg / 5 mL

###1.3.アプリケーション: 実際の線量を計算する

-- Tính tổng mg Metformin BN đã dùng
SELECT
    de.person_id,
    SUM(
        de.quantity *
        COALESCE(ds.amount_value, ds.numerator_value)
    ) AS total_mg,
    SUM(de.days_supply) AS total_days
FROM drug_exposure de
JOIN drug_strength ds
    ON de.drug_concept_id = ds.drug_concept_id
WHERE ds.ingredient_concept_id = 1503297  -- Metformin ingredient
  AND de.person_id = 100001
GROUP BY de.person_id;

###1.4.有効成分のすべての配合を検索する

-- Tất cả dạng bào chế chứa Metformin
SELECT DISTINCT
    c_drug.concept_id,
    c_drug.concept_name,
    c_drug.concept_class_id,
    ds.amount_value,
    c_unit.concept_name AS unit
FROM drug_strength ds
JOIN concept c_drug ON ds.drug_concept_id = c_drug.concept_id
JOIN concept c_unit ON ds.amount_unit_concept_id = c_unit.concept_id
WHERE ds.ingredient_concept_id = 1503297  -- Metformin
  AND c_drug.standard_concept = 'S'
ORDER BY c_drug.concept_class_id, ds.amount_value;

2. 標準化された語彙の 12 の表の要約

#表記録 (~)役割
1コンセプト~10Mすべての医療概念の辞書
2語彙~70語彙ソースリスト
3ドメイン~50ドメインのリスト (状態、薬物...)
4コンセプトクラス~400語彙による分類
5コンセプト_リレーションシップ~60M概念間の関係
6関係~600関係タイプの定義
7CONCEPT_SYNONYM~10M同義名
8CONCEPT_ANCESTOR~80M事前に計算された階層
9ソース_TO_CONCEPT_MAPカスタムカスタムマッピング
10DRUG_STRENGTH~1.5M薬物投与量
11COHORT_DEFINITIONカスタムコホートの定義
12属性_定義カスタム属性定義 (めったに使用されない)

3. COHORT_DEFINITION

コラムタイプ説明
cohort_definition_id整数PK
cohort_definition_nameVARCHAR(255)コホート名
cohort_definition_descriptionクロブ詳細な説明
definition_type_concept_id整数型の定義
cohort_definition_syntaxクロブJSON/SQL クエリがコホートを作成する
subject_concept_id整数件名 (通常 = 人)
cohort_initiation_date日付作成日

COHORT テーブル (派生要素内) と組み合わせて使用​​します — 詳細についてはレッスン 20 で説明します。


4. ER 図 — 語彙

  ┌──────────┐     ┌──────────────────┐
  │ VOCABULARY│────→│     CONCEPT      │←─── DOMAIN
  └──────────┘     │                  │←─── CONCEPT_CLASS
                   │ concept_id (PK)  │
                   │ concept_name     │
                   │ domain_id        │
                   │ vocabulary_id    │
                   │ concept_class_id │
                   │ standard_concept │
                   └─────────┬────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
              ↓              ↓              ↓
  ┌────────────────┐ ┌──────────────┐ ┌──────────────┐
  │CONCEPT_        │ │CONCEPT_      │ │CONCEPT_      │
  │RELATIONSHIP    │ │ANCESTOR      │ │SYNONYM       │
  │                │ │              │ │              │
  │concept_id_1 →  │ │ancestor →    │ │concept_id →  │
  │concept_id_2 →  │ │descendant →  │ │synonym_name  │
  │relationship_id │ │min_levels    │ │language       │
  └────────────────┘ │max_levels    │ └──────────────┘
         │           └──────────────┘
         ↓
  ┌──────────────┐
  │ RELATIONSHIP │    ┌──────────────┐
  └──────────────┘    │DRUG_STRENGTH │
                      │              │
                      │drug_concept→ │
                      │ingredient → │
                      │amount_value  │
                      │numerator     │
                      │denominator   │
                      └──────────────┘
  ┌─────────────────────┐
  │SOURCE_TO_CONCEPT_MAP│  (custom mapping)
  │source_code          │
  │target_concept_id →  │
  └─────────────────────┘

5. 語彙管理のベストプラクティス

###5.1.語彙を更新する

  1. Download từ athena.ohdsi.org (CPT4 cần license)
  2. Load vào schema vocabulary riêng
  3. Chạy script consistency check
  4. KHÔNG tự modify bảng CONCEPT / CONCEPT_RELATIONSHIP
  5. Dùng SOURCE_TO_CONCEPT_MAP cho mã tùy chỉnh

###5.2.語彙の質をチェックする

-- Kiểm tra concepts hết hạn đang được dùng
SELECT
    'condition_occurrence' AS source_table,
    COUNT(*) AS invalid_concept_count
FROM condition_occurrence co
JOIN concept c ON co.condition_concept_id = c.concept_id
WHERE c.invalid_reason IS NOT NULL

UNION ALL

SELECT 'drug_exposure', COUNT(*)
FROM drug_exposure de
JOIN concept c ON de.drug_concept_id = c.concept_id
WHERE c.invalid_reason IS NOT NULL;

-- Kiểm tra mapping completeness
SELECT
    c.vocabulary_id,
    COUNT(*) AS total_concepts,
    SUM(CASE WHEN cr.concept_id_2 IS NOT NULL THEN 1 ELSE 0 END) AS mapped,
    ROUND(
        SUM(CASE WHEN cr.concept_id_2 IS NOT NULL THEN 1 ELSE 0 END) * 100.0
        / COUNT(*), 1
    ) AS mapped_pct
FROM concept c
LEFT JOIN concept_relationship cr
    ON c.concept_id = cr.concept_id_1
    AND cr.relationship_id = 'Maps to'
    AND cr.invalid_reason IS NULL
WHERE c.vocabulary_id IN ('ICD10CM', 'ICD10', 'CPT4')
  AND c.invalid_reason IS NULL
GROUP BY c.vocabulary_id;

概要

  1. DRUG_STRENGTH: 固体 (量) および液体 (分子/分母) の投与量
  2. 12 の語彙テーブル は、約 1,000 万の医療概念の管理システムを構成します
  3. VN 内部コードの SOURCE_TO_CONCEPT_MAP → 標準コンセプト
  4. 語彙は自己修正ではなく、Athena からの定期的な更新が必要です
  5. DRUG_STRENGTH と DRUG_EXPOSURE を組み合わせて実際の線量を計算する

次の記事: パート 6 — LOCATION、CARE_SITE、PROVIDER、および Health System グループ。


参考文献