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?

Vì sao bạn nên quan tâm?

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ể:

  1. 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.
  2. 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.
  3. 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ố.
  4. 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.
  5. 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.csv và giá trị dùng chung trong kb/_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.

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)"]

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).

Tài liệu tham khảo