flowchart LR A["params/mdrtb.csv (M02)<br/>+ kb/_shared (ngưỡng, giá)"] --> B["Bài 1: thay đổi từng tham số<br/>OWSA, tornado, ngưỡng, kịch bản"] A --> C["params/psa.csv (M03)<br/>khoảng 95%, số đếm, SD công bố"] C --> D["Bài 2: fit_dist()<br/>beta, gamma, log-chuẩn, Dirichlet"] D --> E["Bài 3: draw_psa() rồi run_psa_vec()<br/>đối chiếu run_psa() = run_cea() của M02"] E --> F["Bài 4: CEAC, CEAF,<br/>tổn thất kỳ vọng, ba phác đồ"] E --> G["Bài 5: EVPI, EVPI quần thể,<br/>EVPPI (GAM)"]
M03 · Bất định, phân tích độ nhạy và giá trị thông tin
Kết luận “BPaLM tốt hơn phác đồ ngắn 9 tháng” chắc chắn đến đâu, và có đáng nghiên cứu thêm trước khi mở rộng không?
Năm 2024 cả nước phát hiện gần 4,000 người mắc lao kháng thuốc (Báo Đại biểu Nhân dân 2025), và một đợt BPaLM giá GDF chỉ khoảng 7.1 triệu VNĐ, bằng khoảng 1.3 tháng lương tối thiểu vùng I (ITPC-EECA 2025; Chính phủ 2025). Trước khi chuyển hàng nghìn người bệnh từ phác đồ ngắn 9 tháng sang BPaLM, Chương trình Chống lao và quỹ BHYT cần biết kết luận của M02 chắc đến đâu, và có đáng chờ thêm một nghiên cứu trong nước không. Module này trả lời hai câu hỏi đó bằng con số.
Tổng quan
Mọi mô hình kinh tế y tế đều dựa trên tham số ước lượng không chắc chắn và trên giả định cấu trúc có thể sai. Module này dạy cách đo và báo cáo bất định đó, rồi dùng nó để trả lời câu hỏi thứ hai của người ra quyết định: có nên chờ thêm bằng chứng không? Ta dùng lại nguyên mô hình Markov MDR/RR-TB ba phác đồ của M02 (phác đồ dài hạn 18 tháng, phác đồ ngắn 9 tháng, BPaLM 6 tháng, có điều trị lại), không sửa một dòng nào. Câu hỏi chính sách là BPaLM so với phác đồ ngắn 9 tháng, phác đồ đang dùng phổ biến tại Việt Nam; phác đồ dài hạn được giữ lại để vẽ đường biên hiệu quả và CEAC ba phương án. Chuỗi bài đi từ phân tích độ nhạy tất định, chọn phân phối, phân tích độ nhạy xác suất (PSA), đường cong chấp nhận chi phí-hiệu quả, đến giá trị thông tin (VOI). Mọi phép tính viết bằng base R; chỉ EVPPI dùng thêm mgcv.
Mục tiêu học tập
Sau module này, bạn có thể:
- Phân biệt bất định ngẫu nhiên, bất định tham số, bất định cấu trúc và tính không đồng nhất, và chọn đúng công cụ cho từng loại.
- Thực hiện phân tích độ nhạy một chiều, hai chiều, phân tích ngưỡng và phân tích kịch bản; vẽ biểu đồ tornado.
- Chọn phân phối beta, gamma, log-chuẩn, Dirichlet cho từng loại tham số và suy ra tham số phân phối từ số liệu công bố.
- Chạy PSA cho một mô hình Markov đoàn hệ ba phương án, kiểm tra hội tụ, vẽ mặt phẳng chi phí-hiệu quả, CEAC, CEAF và đường cong tổn thất kỳ vọng.
- Tính EVPI, EVPI quần thể và EVPPI bằng hồi quy GAM, và giải thích EVSI bổ sung điều gì.
Kiến thức cần có
- M00: phân phối,
set.seed, mô phỏng Monte Carlo và sai số Monte Carlo. - M01: NMB, ICER, mặt phẳng chi phí-hiệu quả, ngưỡng chi phí-hiệu quả.
- M02: mô hình MDR/RR-TB, các hàm
run_cea(),compare_regimens(),cea_frontier(), bảng tham sốparams/mdrtb.csvvà giá trị dùng chung trongkb/_shared.
Ví dụ xuyên suốt
Một Chương trình Chống lao tỉnh đang điều trị người bệnh lao kháng rifampicin bằng phác đồ ngắn 9 tháng, uống thuốc có giám sát (DOT) hằng ngày. M02 kết luận rằng, với bộ tham số cơ sở, BPaLM rẻ hơn 6.7 triệu VNĐ và thêm 0.48 QALY cho mỗi người bệnh so với phác đồ ngắn, tức là chiếm ưu thế; phác đồ dài hạn bị lấn át. M03 hỏi tiếp: kết luận đó đứng vững đến đâu khi từng tham số thay đổi, khi giả định cấu trúc thay đổi, và khi mọi tham số cùng bất định? Bảng tham số của M02 có giá trị cơ sở; M03 thêm phân phối cho từng tham số bất định trong params/psa.csv, kể cả các giá dùng chung (giá thuốc GDF, giá dịch vụ BHYT), và kiểm tra rằng giá trị cơ sở trùng M02 và kb/_shared.
Với giá GDF, BPaLM là lựa chọn tối ưu ở 100% số lần chạy PSA, nên giá trị thông tin bằng 0: không nghiên cứu nào đổi được quyết định. Để thấy các công cụ hoạt động khi quyết định thật sự bất định, Bài 3–5 thêm một kịch bản đàm phán giá (kịch bản B, minh họa): giả sử BPaLM phải mua ở giá sát giá ngưỡng tính ở Bài 1, 12.9 triệu VNĐ mỗi tháng, gấp 10.9 lần giá GDF. Đây không phải giá thật; nó chỉ tạo một quyết định sát ngưỡng để học phương pháp.
Mô hình có các trạng thái sau (sơ đồ rút gọn; chi tiết ở trang M02). Điều đáng chú ý cho M03: người thất bại hoặc bỏ điều trị (lost to follow-up) có thể được điều trị lại; tử vong sau khi khỏi đi qua một đường duy nhất (SMR).
flowchart LR T["Điều trị lần đầu<br/>Tx1 … TxD"] --> C["Khỏi bệnh"] T --> F["Thất bại"] T --> L["Bỏ điều trị"] T --> D["Tử vong"] F --> R["Điều trị lại<br/>(ReTx)"] L --> R R --> C R --> F R --> L R --> D F -->|"khỏi tự nhiên"| C L --> C F --> D L --> D C -->|"SMR sau điều trị"| D
Giới hạn cần nhớ. Nhiều khoảng bất định không phải KTC: cột “Loại khoảng” dưới đây nói rõ khoảng nào là số đếm, khoảng mượn, quy ước ±25% cho giá hay khoảng minh họa. Cỡ nhóm dùng phác đồ ngắn trong đoàn hệ toàn quốc chưa công bố trong tóm tắt bài báo nên được suy ngược thô (Bài 2). PSA coi các tham số là độc lập, trừ nhóm Dirichlet, và Dirichlet chỉ chứa sai số lấy mẫu, không chứa sai lệch báo cáo thiếu tử vong. Bất định cấu trúc (cách áp RR của thử nghiệm cho tử vong, điều trị lại) được khảo sát bằng kịch bản, không đưa vào PSA. Vì vậy các con số giá trị thông tin dùng để học phương pháp, chưa dùng được để ưu tiên nghiên cứu thật.
Bản đồ bài học
| Bài | Chủ đề | Bạn sẽ làm được | Code |
|---|---|---|---|
| 1 | Các loại bất định; phân tích độ nhạy tất định | OWSA, tornado, hai chiều, giá ngưỡng, kịch bản, phân nhóm | code/l01-deterministic-sa.R |
| 2 | Chọn phân phối | beta, gamma, log-chuẩn, Dirichlet; phương pháp mô-men; số đếm; SD công bố; tương quan | code/l02-distributions.R |
| 3 | PSA trong R | rút mẫu vectơ hóa, chạy mô hình vectơ hóa và kiểm tra với vòng lặp, mặt phẳng chi phí-hiệu quả, hội tụ | code/l03-psa.R |
| 4 | CEAC, CEAF, tổn thất kỳ vọng | ba phương án, đường biên hiệu quả kỳ vọng; báo cáo bất định cho người ra quyết định | code/l04-ceac-reporting.R |
| 5 | Giá trị thông tin | EVPI hai và ba phương án, EVPI quần thể, EVPPI bằng GAM; EVSI (khái niệm) | code/l05-voi.R |
code/model.R chỉ định nghĩa hàm; nó nạp ../_shared/R/vn_data.R và ../m02-cohort-markov/code/model.R để dùng lại mô hình M02. Mỗi script chạy độc lập từ thư mục module, ví dụ Rscript code/l05-voi.R. run_psa() chạy run_cea() của M02 một lần cho mỗi bộ tham số, chia cho nhiều lõi; run_psa_vec() chạy mọi bộ cùng lúc nên nhanh hơn nhiều, được đối chiếu với run_psa() ở Bài 3, và cho Bài 5 chạy 5,000 lần.
Tham số
M03 dùng toàn bộ tham số của M02 (xem bảng M02) cùng các giá trị dùng chung của khóa học. Hai giá trị là lựa chọn cố định, không có phân phối: ngưỡng chi phí-hiệu quả 125,500,000 VNĐ/QALY, bằng 1 × GDP bình quân đầu người năm 2025 (Cục Thống kê (Bộ Tài chính) 2026), và tỷ lệ chiết khấu 3% mỗi năm (Ong và c.s. 2026). Bảng PSA (params/psa.csv) mô tả phân phối của 27 tham số bất định. Cột “Phân phối” cho biết cách suy ra: beta, gamma và lognormal dùng khoảng thấp–cao trong bảng; beta_n dùng cỡ mẫu; gamma_py dùng số người-năm; gamma_sd dùng SD và cỡ mẫu công bố; dirichlet dùng số người trong đoàn hệ. Cột “Loại khoảng” cho biết khoảng thấp–cao có phải KTC 95% công bố hay không; một tham số có nguồn vẫn có thể có độ rộng minh họa.
| Tên | Tham số | Giá trị | Phân phối | Tham số phân phối | Khoảng 95% của phân phối | Loại khoảng | Nguồn của giá trị |
|---|---|---|---|---|---|---|---|
vn_success |
Điều trị thành công, toàn quốc 2021-2022 (mọi phác đồ) | 0.712 | dirichlet | Dirichlet, α = 3,428 | 0.698 – 0.724 | phân vị 2.5-97.5% (từ số đếm) | (Nguyen và c.s. 2026) |
vn_failure |
Thất bại điều trị, toàn quốc 2021-2022 (mọi phác đồ) | 0.036 | dirichlet | Dirichlet, α = 173.3 | 0.0309 – 0.0414 | phân vị 2.5-97.5% (từ số đếm) | (Nguyen và c.s. 2026) |
vn_death |
Tử vong trong điều trị, toàn quốc 2021-2022 (mọi phác đồ) | 0.078 | dirichlet | Dirichlet, α = 375.5 | 0.0705 – 0.0857 | phân vị 2.5-97.5% (từ số đếm) | (Nguyen và c.s. 2026) |
vn_ltfu |
Bỏ điều trị, toàn quốc 2021-2022 (mọi phác đồ) | 0.133 | dirichlet | Dirichlet, α = 640.3 | 0.123 – 0.143 | phân vị 2.5-97.5% (từ số đếm) | (Nguyen và c.s. 2026) |
vn_not_eval |
Không được đánh giá, toàn quốc 2021-2022 (mọi phác đồ) | 0.042 | dirichlet | Dirichlet, α = 202.2 | 0.0365 – 0.0478 | phân vị 2.5-97.5% (từ số đếm) | (Nguyen và c.s. 2026) |
short_success |
Điều trị thành công, phác đồ ngắn có bedaquiline (BDQ_STR), toàn quốc 2021-2022 | 0.762 | beta_n | beta(1,067, 333.2) | 0.739 – 0.784 | phân vị 2.5-97.5% (cỡ mẫu giả định) | (Nguyen và c.s. 2026) |
aor_long_vs_bdqstr |
Tỷ số chênh hiệu chỉnh (aOR) kết cục bất lợi: phác đồ dài hạn so với phác đồ ngắn có bedaquiline | 1.56 | lognormal | lognormal(0.4447, 0.08473) | 1.32 – 1.84 | KTC 95% công bố | (Nguyen và c.s. 2026) |
unf_bpalm_trial |
Kết cục bất lợi sau 72 tuần, nhóm BPaLM (mITT, kết quả cuối) | 0.117 | beta_n | beta(16.03, 121) | 0.0689 – 0.176 | phân vị 2.5-97.5% (từ số đếm) | (Nyang’wa và c.s. 2024) |
unf_soc_trial |
Kết cục bất lợi sau 72 tuần, nhóm chăm sóc chuẩn (mITT, kết quả cuối) | 0.409 | beta_n | beta(56.03, 80.97) | 0.328 – 0.492 | phân vị 2.5-97.5% (từ số đếm) | (Nyang’wa và c.s. 2024) |
ae_bpalm |
Biến cố bất lợi độ 3 trở lên hoặc nghiêm trọng, BPaLM | 0.23 | beta_n | beta(34.73, 116.3) | 0.167 – 0.3 | phân vị 2.5-97.5% (từ số đếm) | (Nyang’wa và c.s. 2024) |
ae_soc |
Biến cố bất lợi độ 3 trở lên hoặc nghiêm trọng, chăm sóc chuẩn | 0.48 | beta_n | beta(72.48, 78.52) | 0.401 – 0.56 | phân vị 2.5-97.5% (từ số đếm) | (Nyang’wa và c.s. 2024) |
cf_untreated |
Tỷ lệ tử vong 10 năm của lao phổi AFB dương không điều trị | 0.7 | beta | beta(20.04, 8.589) | 0.523 – 0.85 | khoảng giữa các nghiên cứu | (Tiemersma và c.s. 2011) |
dur_untreated |
Thời gian mắc lao không điều trị | 3 | gamma | gamma(34.57, 11.52) | 2.08 – 4.08 | khoảng minh họa | (Tiemersma và c.s. 2011) |
ltfu_mort_rate |
Tỷ suất tử vong mọi nguyên nhân sau khi bỏ điều trị lao kháng thuốc | 0.052 | gamma | gamma(143.8, 2,765) | 0.0438 – 0.0608 | KTC 95% công bố | (Adamashvili và c.s. 2022) |
retx_rate_ltfu |
Tỷ suất quay lại điều trị sau khi bỏ điều trị | 0.079 | gamma_py | gamma(212.2, 2,686) | 0.0687 – 0.09 | phân vị 2.5-97.5% (từ số đếm) | (Adamashvili và c.s. 2022) |
retx_rate_failed |
Tỷ suất bắt đầu điều trị lại sau thất bại | 4 | gamma | gamma(2.032, 0.508) | 0.497 – 11.1 | khoảng minh họa | giá trị minh họa |
smr_post |
Tỷ số tử vong chuẩn hóa (SMR) sau điều trị | 3 | lognormal | lognormal(1.099, 0.1409) | 2.28 – 3.95 | KTC 95% mượn từ nghiên cứu khác | (MacLean và c.s. 2026) |
u_tb |
Thỏa dụng khi mắc lao hoặc đang điều trị | 0.83 | beta | beta(1,999, 409.4) | 0.815 – 0.845 | KTC 95% công bố | (Vo và c.s. 2025) |
u_post |
Thỏa dụng sau điều trị | 0.9 | beta | beta(1,382, 153.6) | 0.885 – 0.914 | KTC 95% công bố | (Vo và c.s. 2025) |
d_ae |
Mức giảm thỏa dụng khi có biến cố bất lợi nặng | 0.15 | beta | beta(7.197, 40.78) | 0.0649 – 0.263 | khoảng minh họa | giá trị minh họa |
c_drug_long |
Chi phí thuốc phác đồ dài hạn mỗi tháng | 677,000 | gamma | gamma(61.46, 0.00009079) | 518,000 – 856,000 | ±25% quanh giá công bố (quy ước) | (McConnell 2025) |
c_drug_short |
Chi phí thuốc phác đồ ngắn 9 tháng mỗi tháng | 857,300 | gamma | gamma(61.46, 0.00007169) | 656,000 – 1,080,000 | ±25% quanh giá công bố (quy ước) | (McConnell 2025) |
c_drug_bpalm |
Chi phí thuốc BPaLM mỗi tháng | 1,182,000 | gamma | gamma(61.46, 0.000052) | 905,000 – 1,500,000 | ±25% quanh giá công bố (quy ước) | (ITPC-EECA 2025) |
c_monitor |
Chi phí theo dõi mỗi tháng điều trị | 565,100 | gamma | gamma(61.46, 0.0001088) | 433,000 – 715,000 | ±25% quanh giá công bố (quy ước) | (Bộ Y tế 2024) |
c_eot |
Chi phí đánh giá khi kết thúc điều trị | 499,100 | gamma | gamma(61.46, 0.0001231) | 382,000 – 631,000 | ±25% quanh giá công bố (quy ước) | (Bộ Y tế 2024) |
c_failed |
Chi phí mỗi tháng ở trạng thái Thất bại | 50,600 | gamma | gamma(3.841, 0.00007592) | 13,300 – 112,000 | khoảng minh họa | (Bộ Y tế 2024) |
c_hosp_usd |
Chi phí trực tiếp y tế một đợt nằm viện vì lao kháng thuốc (trung vị) | 707.2 | gamma_sd | gamma(65.23, 0.09224) | 546 – 889 | phân vị 2.5-97.5% (SE của trung bình từ SD công bố) | (Ngo và c.s. 2026) |
Bảng thiết lập (params/uncertainty.csv) chứa số lần chạy PSA, seed, các giá trị dùng cho kịch bản và cho EVPI quần thể.
| Tên | Thiết lập | Giá trị | Thấp – cao | Đơn vị | Nguồn |
|---|---|---|---|---|---|
n_psa |
Số lần chạy trong phân tích độ nhạy xác suất | 1,000 | lần | giá trị minh họa | |
mcse_tol_qaly |
Sai số Monte Carlo chấp nhận được cho ΔNMB trung bình, tính bằng QALY ở ngưỡng | 0.01 | QALY | giá trị minh họa | |
seed |
Seed (giá trị khởi tạo bộ sinh số ngẫu nhiên) | 20261008 | giá trị minh họa | ||
n_psa_voi |
Số lần chạy PSA dùng cho phân tích giá trị thông tin (Bài 5) | 5,000 | lần | giá trị minh họa | |
n_boot |
Số mẫu bootstrap để tính khoảng cho EVPPI | 200 | lần | giá trị minh họa | |
price_round |
Bước làm tròn giá BPaLM trong kịch bản đàm phán giá | 100,000 | VNĐ/tháng | giá trị minh họa | |
rd_trial |
Hiệu số nguy cơ kết cục bất lợi, BPaLM trừ chăm sóc chuẩn (mITT, kết quả cuối) | -0.292 | -0.398 – -0.186 | hiệu số tỷ lệ | (Nyang’wa và c.s. 2024) |
ci_level_trial |
Mức tin cậy của KTC hiệu số nguy cơ trong TB-PRACTECAL | 0.966 | tỷ lệ | (Nyang’wa và c.s. 2024) | |
c_hosp_usd_mean |
Chi phí trung bình một đợt nằm viện vì lao kháng thuốc | 1,406.8 | USD (2024) | (Nguyễn và Nguyễn 2025) | |
hosp_oop_share |
Tỷ lệ chi phí nằm viện vì lao kháng thuốc do người bệnh tự chi trả | 0.384 | tỷ lệ | (Nguyễn và Nguyễn 2025) | |
bpalm_course_usd_2022 |
Giá GDF một đợt BPaLM 6 tháng, tháng 12/2022 | 588 | USD/đợt | (European AIDS Treatment Group 2025) | |
u_tb_scen |
Thỏa dụng khi đang điều trị, kịch bản thấp | 0.7 | thỏa dụng | giá trị minh họa | |
horizon_years_scen |
Khung thời gian trong kịch bản rút ngắn | 20 | năm | (Sweeney và c.s. 2025) | |
rho_drug |
Hệ số tương quan giữa chi phí thuốc mỗi tháng của hai phác đồ | 0.5 | hệ số tương quan | giá trị minh họa | |
n_year_affected |
Số người bệnh lao kháng thuốc mỗi năm có thể chịu ảnh hưởng của quyết định | 4,000 | 2,407 – 9,400 | người/năm | (Báo Đại biểu Nhân dân 2025) |
voi_years |
Thời gian quyết định còn hiệu lực (cho EVPI quần thể) | 10 | 5 – 15 | năm | giá trị minh họa |
sweeney_saving_usd |
Chi phí tiết kiệm trung bình mỗi người (quan điểm đơn vị cung cấp dịch vụ) của phác đồ BPaL so với chăm sóc chuẩn, 20 năm | 14,868 | USD | (Sweeney và c.s. 2025) | |
sweeney_dalys_averted |
DALY tránh được trung bình mỗi người của phác đồ BPaL so với chăm sóc chuẩn, 20 năm | 1.28 | DALY | (Sweeney và c.s. 2025) |
Gói R
Mô hình và mọi phép tính bất định dùng base R (stats, utils, parallel). Hình vẽ dùng ggplot2, bảng dùng knitr, EVPPI dùng mgcv (Wood 2011). Module được kiểm tra với R version 4.5.3 (2026-03-11), ggplot2 4.0.2 và mgcv 1.9.4. Gói voi tính EVPPI và EVSI bằng nhiều phương pháp hơn và là tài liệu đọc thêm tốt (Jackson và Heath 2024).