flowchart LR
S["S: chưa nhiễm"] -- "λ(t) = β(t)·I" --> E["E: tiềm ẩn sớm"]
E -- "tiến triển nhanh" --> I["I: lao hoạt động,<br/>chưa phát hiện"]
E -- "ổn định" --> L["L: tiềm ẩn muộn"]
L -- "tái hoạt động" --> I
L -- "tái nhiễm" --> E
I -- "δ (+ sàng lọc 2X): phát hiện" --> T["T: đang điều trị"]
I -- "tự khỏi" --> R["R: đã khỏi"]
I -- "tử vong do lao" --> D(("tử vong"))
T -- "hoàn thành" --> R
T -- "tử vong do lao" --> D
R -- "tái phát" --> I
R -- "tái nhiễm" --> E
M08 · Hiệu chuẩn mô hình (calibration)
Ước lượng tham số không đo được của một mô hình lao từ số ca báo cáo và điều tra tỷ lệ hiện mắc, rồi mang bất định đó vào đánh giá kinh tế
Năm 2024, Việt Nam báo cáo 106,392 ca lao mới và tái phát, trong khi WHO ước tính khoảng 184,000 người mắc (khoảng bất định 95%: 113,000–267,000): chênh lệch cỡ 78,000 người là những ca chưa được chẩn đoán hoặc chưa được báo cáo (World Health Organization 2026b). Sàng lọc X-quang ngực rồi Xpert (chiến lược 2X) tốn khoảng 102,800 VNĐ mỗi người theo giá BHYT, bằng 2.6 bát phở (Bộ Y tế 2024; Nhadautu.vn 2025). Muốn biết có nên chi số tiền đó cho hàng triệu người hay không, ta phải ước lượng những con số không ai đếm được, như bệnh lây nhanh đến đâu và người bệnh chờ bao lâu mới được phát hiện; hiệu chuẩn mô hình là cách làm việc đó.
Tổng quan
Nhiều tham số quan trọng nhất của mô hình bệnh truyền nhiễm không đo trực tiếp được: hệ số lây truyền, tỷ suất phát hiện ca bệnh, xu hướng của dịch theo thời gian. Ta chỉ quan sát được hệ quả của chúng, như số ca được báo cáo hay tỷ lệ hiện mắc trong một cuộc điều tra. Hiệu chuẩn mô hình (calibration) suy ngược từ những quan sát đó về các tham số. Module này đi từ câu hỏi “khớp” nghĩa là gì, qua tìm kiếm và tối ưu hóa, đến hiệu chuẩn Bayes viết từ đầu trong base R, rồi đưa kết quả vào phân tích độ nhạy xác suất và thẩm định mô hình. Ví dụ xuyên suốt là bệnh lao ở Việt Nam, hiệu chuẩn theo hai bộ mục tiêu đặt cạnh nhau: một bộ mô phỏng, để kiểm tra từng phương pháp có tìm lại giá trị thật không, và một bộ thật từ WHO và điều tra quốc gia 2017–2018.
Mục tiêu học tập
Sau module này, bạn có thể:
- Xác định tham số nào cần hiệu chuẩn, chọn mục tiêu hiệu chuẩn và viết hàm hợp lý phản ánh đúng cách dữ liệu được sinh ra.
- Phát hiện tính không nhận dạng được bằng hàm hợp lý profile, nhiều điểm khởi đầu và phân phối hậu nghiệm.
- Tìm bộ tham số phù hợp nhất bằng tìm kiếm ngẫu nhiên, lấy mẫu siêu khối Latin và thuật toán Nelder–Mead, trên số liệu mô phỏng và số liệu thật của Việt Nam.
- Cài đặt hiệu chuẩn Bayes bằng thuật toán SIR và hai vòng của phiên bản rút gọn của IMIS, kèm chẩn đoán bằng cỡ mẫu hiệu dụng (effective sample size, ESS).
- Đưa hậu nghiệm vào PSA mà giữ tương quan giữa tham số, thẩm định mô hình bằng dữ liệu giữ lại, và báo cáo một hiệu chuẩn.
Kiến thức cần có
- M00: R cơ bản, hàm, vòng lặp, ma trận,
ggplot2, số ngẫu nhiên vàset.seed(). - M01: chi phí, DALY, chiết khấu, ICER và lợi ích ròng quy ra tiền (NMB).
- M02: đổi tỷ suất thành xác suất, hiệu chỉnh nửa chu kỳ, xác minh mô hình.
- M03 (nên có): PSA và đường cong chấp nhận chi phí-hiệu quả. M05 (nên có): lực lây nhiễm, mô hình lây truyền động và giải hệ phương trình vi phân bằng
deSolve.
Ví dụ xuyên suốt
Chương trình Chống lao Quốc gia có chuỗi số ca được báo cáo hằng năm và hai cuộc điều tra tỷ lệ hiện mắc quốc gia, năm 2006–2007 và 2017–2018 (Nguyen và c.s. 2020). Module dựng một “thế giới mô phỏng” giống Việt Nam năm 2017: các giá trị thật của ba tham số hiệu chuẩn được chọn gần bộ khớp nhất với số liệu thật, rồi từ đó sinh số ca báo cáo 2010–2024 và hai điều tra cộng sai số lấy mẫu. Độ chính xác của điều tra mô phỏng lấy từ hệ số thiết kế hiệu dụng của điều tra quốc gia lần 2. Bên cạnh là mục tiêu thật: số ca lao mới và tái phát mà Việt Nam báo cáo cho WHO (World Health Organization 2026b) và kết quả điều tra 2017–2018. Câu hỏi chính sách ở cuối module: mở rộng phát hiện ca bệnh chủ động (ACF) theo chiến lược 2X cho 25% dân số mỗi năm từ 2026, so với khoảng 0.8% ở Thái Nguyên hiện nay (Dương, Lê, và Phạm 2025), có chi phí-hiệu quả không, và câu trả lời phụ thuộc vào hiệu chuẩn thế nào?
Ba tham số được hiệu chuẩn: hệ số lây truyền \(\beta\), tỷ suất phát hiện \(\delta\) và tốc độ giảm lây truyền \(k_\beta\). Mọi ngăn còn chịu tử vong nền lấy từ bảng sống WHO 2023 của Việt Nam (World Health Organization 2026a); người chết được thay bằng trẻ sinh vào S. Mô hình là hệ phương trình vi phân, tích phân bằng Runge–Kutta bậc 4 (RK4) viết từ đầu với bước 0.50 năm, có 200 năm chạy khởi động; Bài 1 kiểm chứng nó.
Giới hạn cần nhớ. Mô hình không có cấu trúc tuổi, giới, HIV hay lao kháng thuốc, và giả định tỷ suất phát hiện không đổi theo thời gian. Khi hiệu chuẩn theo số liệu thật, nó khớp số ca báo cáo nhưng cho số tử vong do lao cao hơn hẳn ước tính của WHO (Bài 2). Chi phí và trọng số bệnh tật lấy từ nguồn công bố (giá BHYT, số liệu của Chương trình Chống lao Quốc gia, GBD); độ phủ sàng lọc là một kịch bản; các tham số diễn tiến tự nhiên được giữ cố định nên bất định của chúng không có trong PSA; khung thời gian đến 2035. Kết quả dùng để học phương pháp, không phải khuyến nghị chính sách.
Bản đồ bài học
| Bài | Chủ đề | Bạn sẽ làm được | Code |
|---|---|---|---|
| 1 | Vì sao phải hiệu chuẩn | chọn mục tiêu, mô phỏng và thật; hàm hợp lý và WSSE; mẫu cụm; tính nhận dạng được | code/l01-why-calibrate.R |
| 2 | Tìm kiếm tham số | tìm kiếm ngẫu nhiên; LHS từ đầu; Nelder–Mead với nhiều điểm khởi đầu; hiệu chuẩn theo số liệu Việt Nam | code/l02-search-methods.R |
| 3 | Hiệu chuẩn Bayes | tiên nghiệm, hậu nghiệm; SIR từ đầu; ESS; hai vòng của phiên bản rút gọn của IMIS; ABC, MCMC | code/l03-bayes-sir.R |
| 4 | PSA, thẩm định và báo cáo | hậu nghiệm trong PSA; đánh giá sàng lọc 2X; kiểm tra dự báo; dữ liệu giữ lại và một phép thẩm định thất bại; bảng kiểm báo cáo | code/l04-psa-validation.R |
Mọi hàm nằm trong code/model.R (chỉ định nghĩa hàm, không chạy gì khi được nạp). Hàm tb_params() đọc bảng tham số của module rồi tính thêm các giá trị lấy từ dữ liệu dùng chung của khóa học (../_shared): tử vong nền, số năm sống mất đi, ngưỡng, tỷ lệ chiết khấu, giá BHYT, tỷ giá và chỉ số giá. Hàm mô hình run_tb_model() nhận một ma trận tham số, mỗi hàng một bộ, nên cùng một lệnh chạy được một bộ hay hàng chục nghìn bộ. Mỗi script bài học chạy độc lập từ thư mục module, ví dụ Rscript code/l03-bayes-sir.R, và xong trong dưới hai phút trên máy M4 Pro.
Tham số và dữ liệu
Tham số nằm trong hai tệp. params/calibration.csv chứa 3 tham số hiệu chuẩn: cột value là giá trị thật dùng để mô phỏng mục tiêu, cột dist_p1–dist_p2 là khoảng của phân phối tiên nghiệm đều (giá trị minh họa). params/tb_natural_history.csv chứa 49 tham số cố định và thiết lập mô hình; 27 có nguồn công bố, 22 là lựa chọn mô hình hóa, kịch bản hoặc giá trị minh họa (illustrative = TRUE) vì chưa có con số công bố dùng được. Dữ liệu thật nằm trong data/vn_tb_who.csv (số ca báo cáo, ước tính tỷ lệ mới mắc và tử vong của WHO 2000–2024, dân số của Ngân hàng Thế giới (World Health Organization 2026b; World Bank 2026b)) và data/vn_tb_notif_age_2021.csv (số ca báo cáo theo tuổi và giới năm 2021).
| Tham số | Mô tả | Giá trị thật | Tiên nghiệm | Đơn vị |
|---|---|---|---|---|
| beta | Hệ số lây truyền hiệu dụng (số người bị nhiễm do một ca lao hoạt động trong một năm, khi mọi người đều cảm nhiễm) | 6.7 | Đều(4, 30) | mỗi năm |
| delta | Tỷ suất phát hiện và bắt đầu điều trị khi mắc lao hoạt động | 0.45 | Đều(0.1, 2) | mỗi năm |
| k_beta | Tốc độ giảm hệ số lây truyền sau năm 2000 | 0.02 | Đều(0, 0.1) | mỗi năm |
| Tham số | Mô tả | Giá trị | Thấp | Cao | Đơn vị | Nguồn |
|---|---|---|---|---|---|---|
| dt | Bước tích phân RK4 cho các năm được báo cáo | 0.5 | năm | lựa chọn mô hình hóa / minh họa | ||
| dt_burnin | Bước tích phân trong giai đoạn chạy khởi động | 1 | năm | lựa chọn mô hình hóa / minh họa | ||
| burnin_years | Số năm chạy khởi động (burn-in) trước năm bắt đầu báo cáo | 200 | năm | lựa chọn mô hình hóa / minh họa | ||
| year_start | Năm đầu tiên ghi kết quả | 2000 | năm | lựa chọn mô hình hóa / minh họa | ||
| year_end | Năm cuối cùng của mô phỏng | 2035 | năm | lựa chọn mô hình hóa / minh họa | ||
| year_trend | Năm lây truyền bắt đầu giảm | 2000 | năm | lựa chọn mô hình hóa / minh họa | ||
| init_S | Tỷ lệ cảm nhiễm lúc bắt đầu chạy khởi động | 0.4 | tỷ lệ | lựa chọn mô hình hóa / minh họa | ||
| init_E | Tỷ lệ nhiễm tiềm ẩn sớm lúc bắt đầu chạy khởi động | 0.02 | tỷ lệ | lựa chọn mô hình hóa / minh họa | ||
| init_L | Tỷ lệ nhiễm tiềm ẩn muộn lúc bắt đầu chạy khởi động | 0.5 | tỷ lệ | lựa chọn mô hình hóa / minh họa | ||
| init_I | Tỷ lệ mắc lao hoạt động chưa phát hiện lúc bắt đầu chạy khởi động | 0.003 | tỷ lệ | lựa chọn mô hình hóa / minh họa | ||
| init_T | Tỷ lệ đang điều trị lao lúc bắt đầu chạy khởi động | 0.001 | tỷ lệ | lựa chọn mô hình hóa / minh họa | ||
| p_fast | Tỷ lệ người mới nhiễm đi theo nhánh tiến triển nhanh | 0.14 | 0.09 | 0.14 | tỷ lệ | (Vynnycky và Fine 1997) |
| dur_early | Thời gian trung bình ở giai đoạn nhiễm tiềm ẩn sớm | 2 | 1 | 5 | năm | lựa chọn mô hình hóa / minh họa |
| nu_react | Tỷ suất tái hoạt động từ nhiễm tiềm ẩn muộn | 0.0005 | 0.0001 | 0.001 | mỗi năm | lựa chọn mô hình hóa / minh họa |
| prot_reinf | Mức bảo vệ chống bệnh sau tái nhiễm ở người đã nhiễm | 0.79 | 0.7 | 0.86 | tỷ lệ | (Andrews và c.s. 2012) |
| rho_relapse | Tỷ suất tái phát sau khi khỏi (điều trị hoặc tự khỏi) | 0.01 | 0.005 | 0.02 | mỗi năm | lựa chọn mô hình hóa / minh họa |
| cf_untreated_sp | Tỷ lệ tử vong 10 năm của lao phổi AFB dương, HIV âm, không điều trị | 0.7 | 0.53 | 0.86 | tỷ lệ | (Tiemersma và c.s. 2011) |
| cf_untreated_sn | Tỷ lệ tử vong 10 năm của lao AFB âm, cấy dương, HIV âm, không điều trị | 0.2 | tỷ lệ | (Tiemersma và c.s. 2011) | ||
| share_sp | Tỷ lệ lao AFB dương trong các ca lao hoạt động chưa phát hiện | 0.25 | 0.17 | 0.36 | tỷ lệ | (Nguyen và c.s. 2020) |
| vn_prev2017_smear | Tỷ lệ hiện mắc lao phổi AFB dương ở người từ 15 tuổi, 2017-2018 | 79 | 55 | 115 | /100,000 | (Nguyen và c.s. 2020) |
| dur_untreated | Thời gian mắc lao không điều trị đến khi tự khỏi hoặc tử vong | 3 | 2 | 4 | năm | (Tiemersma và c.s. 2011) |
| dur_tx | Thời gian điều trị lao | 0.5 | năm | lựa chọn mô hình hóa / minh họa | ||
| cf_tx | Tỷ lệ tử vong do lao trong thời gian điều trị | 0.03 | 0.01 | 0.06 | tỷ lệ | lựa chọn mô hình hóa / minh họa |
| tx_success_vn | Tỷ lệ điều trị thành công của Chương trình Chống lao Quốc gia, báo cáo năm 2024 | 0.89 | tỷ lệ | (Báo Đại biểu Nhân dân 2025) | ||
| notif_from | Năm đầu của chuỗi số ca được báo cáo (mục tiêu) | 2010 | năm | lựa chọn mô hình hóa / minh họa | ||
| notif_to | Năm cuối của chuỗi số ca được báo cáo (mục tiêu) | 2024 | năm | lựa chọn mô hình hóa / minh họa | ||
| notif_cv | Hệ số biến thiên của sai số báo cáo | 0.05 | tỷ lệ | lựa chọn mô hình hóa / minh họa | ||
| notif_excluded | Năm bị loại khỏi chuỗi số ca báo cáo thật | 2021 | năm | (Bui và c.s. 2025) | ||
| survey_year_cal | Năm điều tra tỷ lệ hiện mắc dùng để hiệu chuẩn | 2017 | năm | (Nguyen và c.s. 2020) | ||
| survey_year_val | Năm điều tra tỷ lệ hiện mắc giữ lại để thẩm định (mô phỏng) | 2007 | năm | (Nguyen và c.s. 2020) | ||
| survey_n | Số người tham gia điều tra tỷ lệ hiện mắc lao quốc gia lần 2 | 61,763 | người | (Nguyen và c.s. 2020) | ||
| vn_prev2017 | Tỷ lệ hiện mắc lao phổi có bằng chứng vi khuẩn ở người từ 15 tuổi, 2017-2018 | 322 | 260 | 399 | /100,000 | (Nguyen và c.s. 2020) |
| vn_prev2017_crude | Tỷ lệ hiện mắc thô (chưa bù trừ dữ liệu thiếu, chưa gia quyền), 2017-2018 | 358 | 295 | 434 | /100,000 | (Nguyen và c.s. 2020) |
| deff_planning | Hệ số thiết kế dự kiến khi tính cỡ mẫu của điều tra lần 2 | 1.92 | hệ số | (Nguyen và c.s. 2020) | ||
| vn_prev2007 | Tỷ lệ hiện mắc lao phổi có bằng chứng vi khuẩn ở người lớn, điều tra quốc gia lần 1 (2006-2007) | 307 | /100,000 | (Nguyen và c.s. 2020) | ||
| child_share_2017 | Tỷ lệ dân số 0-14 tuổi, năm 2017 | 0.244 | tỷ lệ | (World Bank 2026a) | ||
| acf_start | Năm bắt đầu phát hiện ca bệnh chủ động (ACF) mở rộng | 2026 | năm | lựa chọn mô hình hóa / minh họa | ||
| acf_coverage | Tỷ lệ dân số được sàng lọc 2X (X-quang ngực rồi Xpert) mỗi năm trong kịch bản ACF | 0.25 | 0.1 | 0.5 | tỷ lệ/năm | lựa chọn mô hình hóa / minh họa |
| acf_coverage_tn | Tỷ lệ dân số được khám sàng lọc 2X mỗi năm ở Thái Nguyên, 2020-2023 | 0.008 | 0.003 | 0.015 | tỷ lệ/năm | (Dương, Lê, và Phạm 2025) |
| tn_screened | Số người được khám sàng lọc 2X ở Thái Nguyên, 2020-2023 | 43,139 | người | (Dương, Lê, và Phạm 2025) | ||
| tn_found | Số người được chẩn đoán lao qua sàng lọc 2X ở Thái Nguyên, 2020-2023 | 246 | người | (Dương, Lê, và Phạm 2025) | ||
| sens_cxr | Độ nhạy của X-quang ngực (có hoặc không có phần mềm đọc) với lao có bằng chứng vi khuẩn | 0.85 | 0.77 | 0.9 | tỷ lệ | (Schwalb và c.s. 2025) |
| sens_xpert | Độ nhạy của xét nghiệm Xpert trên đờm với lao phổi ở người được sàng lọc | 0.775 | 0.676 | 0.856 | tỷ lệ | (Schwalb và c.s. 2025) |
| p_xpert | Tỷ lệ người được chụp X-quang có phim bất thường và cần làm Xpert | 0.041 | 0.016 | 0.134 | tỷ lệ | (Nguyen và c.s. 2020) |
| c_screen_programme_usd2023 | Chi phí chương trình cho mỗi người được sàng lọc X-quang rồi Xpert (ACT3/ACT5) | 1.7 | USD/người (2023) | (Schwalb và c.s. 2025) | ||
| c_tx_usd2023 | Chi phí điều trị một ca lao nhạy cảm thuốc (Chương trình Chống lao Quốc gia) | 81 | USD/ca (2023) | (Schwalb và c.s. 2025) | ||
| c_dx_usd2023 | Chi phí chẩn đoán thụ động một ca lao nhạy cảm thuốc (gồm số người phải xét nghiệm để tìm ra một ca) | 264 | USD/ca (2023) | (Schwalb và c.s. 2025) | ||
| dw_tb | Trọng số bệnh tật khi mắc lao | 0.333 | 0.224 | 0.454 | trọng số | (Tomeny và c.s. 2024) |
| alt_delta_growth | Tốc độ tăng tỷ suất phát hiện mỗi năm trong mô hình sai cấu trúc (chỉ để minh họa thẩm định thất bại) | 0.05 | mỗi năm | lựa chọn mô hình hóa / minh họa |
| Tên | Giá trị | Đơn vị | Cách tính |
|---|---|---|---|
| mu_bg | 0.01346 | mỗi năm | 1 / tuổi thọ lúc sinh, bảng sống WHO 2023 (vn_lifetable) |
| age_tb | 48.27 | tuổi | tuổi trung bình của người bệnh lao được báo cáo, WHO 2021 (data/vn_tb_notif_age_2021.csv) |
| yll_death | 29.84 | năm | kỳ vọng sống còn lại ở tuổi age_tb (vn_lifetable) |
| wtp | 125,500,000 | VNĐ/DALY | 1 × GDP bình quân đầu người (vn_context) |
| wtp_low | 62,750,000 | VNĐ/DALY | 0.5 × GDP bình quân đầu người (vn_context) |
| disc_rate | 0.03 | mỗi năm | vn_context |
| c_tx | 2,063,000 | VNĐ/ca (2025) | c_tx_usd2023 quy đổi bằng tỷ giá 2023 và CPI đến 2025 |
| c_dx | 6,723,000 | VNĐ/ca (2025) | c_dx_usd2023 quy đổi như trên |
| c_screen | 102,800 | VNĐ/người (2025) | giá X-quang ngực + p_xpert × giá Xpert (vn_prices, giá BHYT 2025) |
| c_screen_programme | 43,290 | VNĐ/người (2025) | c_screen_programme_usd2023 quy đổi như trên |
| c_acf | 25,710 | VNĐ/người dân/năm (2025) | acf_coverage × c_screen |
| sens_acf | 0.6587 | tỷ lệ | sens_cxr × sens_xpert |
| acf_add | 0.1647 | mỗi năm | acf_coverage × sens_acf |
Gói R sử dụng
- base R (
stats): mô hình, hàm hợp lý (dnorm,dbinom), tối ưu hóa (optim,optimHess), lấy mẫu (sample,runif),cov.wt,mahalanobis. - MASS:
mvrnorm()để rút từ phân phối chuẩn nhiều chiều trongimis_lite(). - deSolve: chỉ để kiểm chứng bộ tích phân RK4 với một bộ tham số (Bài 1).
- ggplot2: mọi hình vẽ, với
theme_course()vàpal_coursedùng chung cho khóa học. - knitr và Quarto: dựng bài học từ các đoạn code được đánh dấu trong
code/. - Đọc thêm, không bắt buộc: gói
lhscho các thiết kế LHS tối ưu hơn.