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

Bài 17: Network Studies & Best Practices — Nghiên cứu Đa trung tâm

Network study workflow, distributed research model, study packages, data governance & privacy, OHDSI community, best practices triển khai OHDSI tại Việt Nam.

🏗️ Kiến trúc — Bài 17 Bài 17: Network Studies & Best Practices — Nghiên cứu Đa trung tâm

OHDSI & OMOP CDM — Phân tích Dữ liệu Y tế Toàn diện

Phần 6: Production & Network Studies

xdev.asia

Bài 17: Network Studies — Nghiên cứu đa trung tâm

Giới thiệu

Sức mạnh thực sự của OHDSI nằm ở nghiên cứu đa trung tâm (network studies) — cùng một câu hỏi nghiên cứu được trả lời đồng thời trên hàng chục databases từ nhiều quốc gia, mà không cần chia sẻ dữ liệu bệnh nhân.

OHDSI Network Research Model:

                  ┌─────────────┐
                  │  Study Lead │
                  │  (Protocol  │
                  │   + R Pkg)  │
                  └──────┬──────┘
                         │
              Study Package (code only)
                         │
          ┌──────────────┼──────────────┐
          ▼              ▼              ▼
   ┌─────────────┐┌─────────────┐┌─────────────┐
   │  Site A     ││  Site B     ││  Site C     │
   │  (US)       ││  (Korea)    ││  (Vietnam)  │
   │             ││             ││             │
   │  CDM ──→    ││  CDM ──→    ││  CDM ──→    │
   │  Run study  ││  Run study  ││  Run study  │
   │  ──→ Results││  ──→ Results││  ──→ Results│
   └──────┬──────┘└──────┬──────┘└──────┬──────┘
          │              │              │
          └──── Aggregate results only ─┘
                         │
                  ┌──────▼──────┐
                  │  Study Lead │
                  │  Meta-      │
                  │  analysis   │
                  └─────────────┘

→ Dữ liệu BN KHÔNG BAO GIỜ rời site
→ Chỉ chia sẻ code (study package) và aggregate results

1. Network Study Workflow

1.1 Các bước thực hiện

Phase 1: Protocol Design
─────────────────────────
1. Đặt câu hỏi nghiên cứu (PICO)
   P: Population (Target cohort)
   I: Intervention/Exposure
   C: Comparator
   O: Outcome

2. Viết study protocol
   - Background & rationale
   - Study design (cohort, case-control, etc.)
   - Cohort definitions (JSON)
   - Analysis plan
   - Statistical methods

3. Đăng ký protocol (EU PAS Register, preprint)

Phase 2: Study Package Development
────────────────────────────────────
4. Tạo study package trong ATLAS hoặc viết R code
5. Test trên Eunomia (synthetic data)
6. Peer review code & cohort definitions
7. Chạy CohortDiagnostics trên ≥1 site

Phase 3: Execution
──────────────────
8. Gửi study package đến participating sites
9. Mỗi site: install, configure, execute
10. Sites gửi aggregate results về study lead

Phase 4: Analysis & Publication
────────────────────────────────
11. Meta-analysis kết quả từ nhiều sites
12. Viết manuscript / technical report
13. Publish & share trên OHDSI forums

1.2 Ví dụ Network Study

LEGEND Study (Large-scale Evidence Generation
            and Evaluation in a Network of Databases)

Câu hỏi: So sánh hiệu quả & an toàn của thuốc hạ áp
         (ACEi vs ARB vs thiazide vs CCB)

Sites tham gia: 12 databases, 6 triệu BN
  - CPRD (UK)
  - Optum (US)
  - MDCD (US Medicaid)
  - CCAE (US Commercial)
  - JMDC (Japan)
  - AUSOM (South Korea)
  - ...

Kết quả:
  - 3,000+ hazard ratios cho các cặp thuốc-outcome
  - Xác nhận CCB/thiazide first-line cho HTN chưa biến chứng
  - ACEi/ARB preferred nếu có DM hoặc CKD
  - Phát hiện signals an toàn mới

Published: The Lancet, 2019

2. Study Package Structure

2.1 Standard Study Package

my-network-study/
├── DESCRIPTION                  # R package metadata
├── NAMESPACE                    # Exports
├── R/
│   ├── Main.R                   # Entry point
│   ├── CohortConstruction.R     # Build cohorts
│   ├── RunDiagnostics.R         # CohortDiagnostics
│   ├── RunEstimation.R          # CohortMethod analysis
│   ├── RunPrediction.R          # PLP analysis (if applicable)
│   └── Export.R                 # Package results for sharing
├── inst/
│   ├── settings/
│   │   ├── cohortDefinitionSet.csv
│   │   ├── negativeControlOutcomes.csv
│   │   └── analysisSpecifications.json
│   ├── cohorts/
│   │   ├── targetCohort.json
│   │   ├── comparatorCohort.json
│   │   └── outcomeCohort.json
│   └── sql/
│       └── CreateCohorts.sql
├── extras/
│   ├── CodeToRun.R              # Site-specific execution script
│   └── PackageMaintenance.R     # Developer utilities
├── tests/
│   └── testthat/
│       └── test-cohorts.R
└── README.md                    # Hướng dẫn cho sites

2.2 CodeToRun.R cho mỗi Site

# extras/CodeToRun.R
# ═══════════════════════════════════════════
# Mỗi site EDIT file này cho phù hợp local
# ═══════════════════════════════════════════

library(MyNetworkStudy)

# ── 1. Connection Details ──
connectionDetails <- DatabaseConnector::createConnectionDetails(
  dbms = "postgresql",          # Sửa theo site
  server = "localhost/ohdsi",   # Sửa theo site
  user = "ohdsi_app",           # Sửa theo site
  password = keyring::key_get("ohdsi"),
  port = 5432
)

# ── 2. Schema Config ──
cdmDatabaseSchema <- "cdm"
cohortDatabaseSchema <- "results"
cohortTable <- "network_study_cohort"
databaseId <- "Hospital_VN_2024"  # Tên site (unique)
databaseName <- "Hospital Vietnam 2024"
databaseDescription <- "Hospital system EHR data 2015-2024"

# ── 3. Output ──
outputFolder <- file.path(getwd(), "output", databaseId)
dir.create(outputFolder, recursive = TRUE)

# ── 4. Execute ──
execute(
  connectionDetails = connectionDetails,
  cdmDatabaseSchema = cdmDatabaseSchema,
  cohortDatabaseSchema = cohortDatabaseSchema,
  cohortTable = cohortTable,
  outputFolder = outputFolder,
  databaseId = databaseId,
  databaseName = databaseName,
  databaseDescription = databaseDescription,
  createCohorts = TRUE,
  runDiagnostics = TRUE,
  runAnalyses = TRUE,
  minCellCount = 5,         # Privacy: ẩn cells < 5
  maxCores = 4
)

# ── 5. Export Results ──
# Gửi thư mục output/ đến study lead
# KHÔNG gửi patient-level data!

3. Data Governance & Privacy

3.1 Nguyên tắc bảo mật

┌──────────────────────────────────────────────────────┐
│         OHDSI Data Governance Principles             │
│                                                      │
│  1. DATA STAYS LOCAL                                 │
│     Dữ liệu BN không rời site                       │
│     Chỉ share code + aggregate results               │
│                                                      │
│  2. MINIMUM CELL COUNT                               │
│     Ẩn counts < 5 (configurable)                     │
│     Tránh re-identification                          │
│                                                      │
│  3. NO PATIENT-LEVEL EXPORT                          │
│     Results chỉ có aggregate statistics              │
│     Hazard ratios, counts, proportions               │
│                                                      │
│  4. IRB/ETHICS APPROVAL                              │
│     Mỗi site cần approval riêng                      │
│     Study protocol phải được review                  │
│                                                      │
│  5. DATA USE AGREEMENT                               │
│     Giữa study lead và mỗi site                     │
│     Quy định rõ mục đích sử dụng                    │
└──────────────────────────────────────────────────────┘

3.2 Minimum Cell Count

# Trong study package:
minCellCount <- 5

# Khi export results:
exportResults <- function(outputFolder, minCellCount = 5) {
  results <- readRDS(file.path(outputFolder, "results.rds"))

  # Censor cells nhỏ
  results$cohortCount[results$cohortCount > 0 &
                      results$cohortCount < minCellCount] <- paste0("<", minCellCount)

  # Remove individual-level data
  results$patientLevelData <- NULL

  saveRDS(results, file.path(outputFolder, "results_censored.rds"))
}

3.3 Quy trình phê duyệt

Site muốn tham gia network study:

1. Nhận study protocol từ study lead
2. Nộp IRB/Ethics review tại site
3. Ký Data Use Agreement (DUA)
4. Cài study package
5. Chạy CohortDiagnostics → review
6. Chạy full analysis
7. Review results trước khi gửi
8. Gửi aggregate results (censored)

4. Meta-Analysis

4.1 Tổng hợp kết quả đa site

library(EvidenceSynthesis)

# Collect results từ các sites
siteResults <- list()
sites <- c("Site_US", "Site_KR", "Site_VN", "Site_JP")

for (site in sites) {
  siteResults[[site]] <- readRDS(
    file.path("results", site, "estimationResults.rds")
  )
}

# Fixed-effects meta-analysis
metaResult <- computeFixedEffectMetaAnalysis(
  logRr = sapply(siteResults, function(x) x$logRr),
  logLb95Ci = sapply(siteResults, function(x) x$logLb95Ci),
  logUb95Ci = sapply(siteResults, function(x) x$logUb95Ci),
  seLogRr = sapply(siteResults, function(x) x$seLogRr)
)

# Kết quả
cat("Meta-analysis HR:", exp(metaResult$logRr), "\n")
cat("95% CI:", exp(metaResult$logLb95Ci), "-",
    exp(metaResult$logUb95Ci), "\n")
cat("P-value:", metaResult$p, "\n")

4.2 Forest Plot

Forest Plot: Metformin vs SU → MI Risk

Study              HR [95% CI]         Weight
────────────────────────────────────────────────
Site US (N=12,000)  0.58 [0.35-0.96]   ──●──   35%
Site KR (N=5,200)   0.71 [0.38-1.33]    ──●──  20%
Site VN (N=3,800)   0.55 [0.28-1.08]   ──●──   18%
Site JP (N=6,500)   0.65 [0.40-1.06]    ──●──  27%
────────────────────────────────────────────────
Meta (Fixed)        0.62 [0.47-0.82]    ◆      100%
                                    │
                    0.25  0.5   1.0  2.0
                    ← Favors Met   Favors SU →

I² = 0% → Không có heterogeneity đáng kể
Q-test p = 0.85 → Kết quả nhất quán giữa sites

5. OHDSI Community

5.1 Tham gia cộng đồng

Kênh tham gia:

1. OHDSI Forums (forums.ohdsi.org)
   - Hỏi đáp kỹ thuật
   - Thảo luận study design
   - Announcements

2. OHDSI Workgroups
   - Vocabulary WG
   - CDM WG
   - Patient-Level Prediction WG
   - Population-Level Estimation WG
   - Data Quality WG

3. OHDSI Symposium (hàng năm)
   - Presentations, workshops, tutorials
   - Networking

4. OHDSI Studies
   - Tham gia network studies đang mở
   - Đề xuất study mới

5. GitHub (github.com/OHDSI)
   - Contribute code
   - Report issues
   - Feature requests

5.2 Tài nguyên học tập

1. The Book of OHDSI (ohdsi.github.io/TheBookOfOhdsi/)
   → Sách tham khảo chính thức (free, open-source)

2. EHDEN Academy (academy.ehden.eu)
   → Khóa học online CDM, ETL, Vocabularies

3. OHDSI Tutorials
   → Video workshops trên YouTube

4. Forums Q&A
   → Cộng đồng trả lời câu hỏi kỹ thuật

6. Best Practices triển khai OHDSI tại Việt Nam

6.1 Thách thức

Thách thức đặc thù Việt Nam:

1. Dữ liệu EMR/HIS
   - Nhiều hệ thống HIS khác nhau (VietIS, Sáng, FPT.eHospital...)
   - Format dữ liệu không chuẩn hóa
   - Mã ICD-10 hay bị sử dụng sai

2. Vocabulary mapping
   - Tên thuốc tiếng Việt → RxNorm mapping
   - Mã BHYT → OMOP concept mapping
   - Local lab codes → LOINC mapping

3. Nhân lực
   - Ít chuyên gia OHDSI/OMOP
   - Cần đào tạo ETL engineers
   - Cần clinical informaticists

4. Pháp lý
   - Quy định về chia sẻ dữ liệu y tế
   - HIPAA không áp dụng → dùng Luật ATTT VN
   - IRB/Ethics board processing time

6.2 Lộ trình triển khai

Phase 1: Pilot (3-6 tháng)
──────────────────────────
☐ Chọn 1 bệnh viện pilot
☐ Cài OHDSI stack (Docker Compose)
☐ ETL 1-2 năm dữ liệu
☐ Chạy ACHILLES + DQD
☐ Đào tạo team (2-3 người)

Phase 2: Validate (3-6 tháng)
─────────────────────────────
☐ Cải thiện ETL dựa trên DQD
☐ Mapping vocabularies (Usagi)
☐ Tạo cohort definitions đầu tiên
☐ Chạy 1 replication study
☐ Kiểm tra kết quả với clinical experts

Phase 3: Expand (6-12 tháng)
────────────────────────────
☐ Thêm 2-3 bệnh viện
☐ Chuẩn hóa ETL pipeline
☐ Tham gia 1 OHDSI network study
☐ Kubernetes production deployment
☐ Monitoring & alerting

Phase 4: Network (ongoing)
──────────────────────────
☐ OHDSI Vietnam node chính thức
☐ Propose original studies
☐ Contribute Vietnamese vocabulary mappings
☐ Training & community building
☐ Publish research papers

6.3 ETL cho dữ liệu Việt Nam

Nguồn dữ liệu phổ biến:

HIS Database → Staging → OMOP CDM
    │                        │
    ├─ benh_nhan            → person
    ├─ kham_benh            → visit_occurrence
    ├─ chan_doan (ICD-10)   → condition_occurrence
    ├─ don_thuoc            → drug_exposure
    ├─ xet_nghiem           → measurement
    ├─ thu_thuat            → procedure_occurrence
    └─ vien_phi (BHYT)      → cost

Mapping challenges:
┌────────────────────────────┬────────────────────────────┐
│ Vietnamese Source          │ OMOP Standard              │
├────────────────────────────┼────────────────────────────┤
│ Giới tính: Nam/Nữ         │ 8507 (Male) / 8532 (Female)│
│ ICD-10: E11.9             │ 201826 (Type 2 DM)         │
│ Thuốc: "Metformin 500mg"  │ RxNorm: 860975             │
│ XN: "HbA1c"               │ LOINC: 4548-4              │
│ BHYT: mã DV "XN001"       │ Custom mapping required    │
└────────────────────────────┴────────────────────────────┘

Tóm tắt khóa học

Bạn đã hoàn thành 17 bài học OHDSI & OMOP CDM:

Phần 1: Tổng quan (Bài 1-3)
  ✓ OHDSI ecosystem, OMOP CDM, Athena vocabularies

Phần 2: ETL (Bài 4-6)
  ✓ WhiteRabbit, Usagi, ETL pipeline

Phần 3: Platform (Bài 7-9)
  ✓ PostgreSQL CDM, WebAPI, ATLAS

Phần 4: Analysis (Bài 10-12)
  ✓ Concept Sets, Cohorts, Characterization,
    Incidence Rates, Pathways, Estimation, Prediction

Phần 5: Data Quality (Bài 13-15)
  ✓ ACHILLES, DQD, HADES R packages

Phần 6: Production (Bài 16-17)
  ✓ Docker/K8s deployment, Network Studies

Bước tiếp theo:
  1. Cài đặt OHDSI stack local (Docker Compose)
  2. Tải Eunomia synthetic data → thực hành
  3. ETL dữ liệu thực từ HIS
  4. Tham gia OHDSI community
  5. Propose & contribute studies