Độ Chính Xác Của Xét Nghiệm: Dữ Liệu Nhị Phân và Thứ Bậc

Author

🌀

Published

April 19, 2026

1 Phần I

Phần này giới thiệu phương pháp Bayes trong ước lượng và kiểm định các giả thuyết liên quan đến những thước đo cơ bản của độ chính xác xét nghiệm, bao gồm:

  1. Xác suất phân loại (classification probabilities). Bao gồm:
    • Dương tính giả (FPF - false positive fraction)
    • Dương tính thật (TPF - true positive fraction)
  2. các thước đo dự đoán (predictive measures). Bao gồm:
    • Giá trị dự đoán dương (PPV - positive predictive value)
    • Giá trị dự đoán âm tính (NPV - negative predictive value)
  3. Tỉ số khả năng chẩn đoán (Diagnostic likelihood ratios (DLR))
    • Tỷ số khả năng chẩn đoán dương (PDLR - positive diagnostic likelihood ratio)
    • Tỷ số khả năng chẩn đoán âm (NDLR - negative diagnostic likelihood ratio)

Xem xét bảng phân loại (Table 1) bên dưới:

Table 1: Bảng phân loại.
\text{Xét nghiệm}
\text{Bệnh}
D = 0 D = 1
X = 0 (n_{00}, \theta_{00}) (n_{01}, \theta_{01})
X = 1 (n_{10}, \theta_{10}) (n_{11}, \theta_{11})

Trong mỗi trường hợp ta có n_{ij}\theta_{ij} (i,j = 0,1) là số bệnh nhân và xác suất. Số bệnh nhân n_{ij} chính là dữ liệu đã quan sát, còn xác xuất \theta_{ij} là tham số ta cần ước lượng.

Trong thống kê có 2 trường phái phân tích là frequentist và Bayes, cả 2 có cách nhìn nhận vấn đề khác nhau.

1.1 Phương pháp tần suất luận (Frequentist)

  • Tham số \theta_{ij} là đại lượng tất định, chưa biết (và không có yếu tố ngẫu nhiên).
  • Dữ liệu n_{ij} là yếu tố ngẫu nhiên. Các giá trị n_{ij} quan sát được chính là một mẫu (sample) từ quần thể (population).
  • \theta_{ij} sẽ được ước lượng dựa trên dữ liệu đã quan sát.
  • Vì được ước lượng dựa trên một mẫu nhỏ so với quần thể lớn, nên giá trị ước lượng \widehat\theta_{ij} của \theta_{ij} có yếu tố ngẫu nhiên, và được ước lượng kèm theo một khoản tin cậy.
  • Về mặt thống kê, ta ước lượng \theta_{ij} bằng một hàm số của dữ liệu quan sát, mà dữ liệu quan sát lại có yếu tố ngẫu nhiên, nên \widehat\theta_{ij} cũng ngẫu nhiên.
  • Khoảng tin cậy đó được hiểu là nếu ta đến quần thể lấy một mẫu dữ liệu để ước lượng tham số (nghĩa là tính khoảng tin cậy 95%), và ta lập lại điều này vô số lần thì trong số những khoảng tin cậy đó, sẽ có 95% là chứa giá trị đúng của \theta_{ij}.

1.2 Phương pháp Bayes

  • \theta_{ij}, mặc dù là tất định, có thể biểu diễn theo một hàm số xác suất để thể hiện niềm tin của ta vào các giá trị có thể của \theta_{ij}. Như vậy, ta có thể xem \theta_{ij} có yếu tố ngẫu nhiên. Lưu ý: ngẫu nhiên ở đây là thể hiện khả năng xảy ra cho từng chọn lựa, chứ không mang ý nghĩa ngẫu nhiên trong mối liên hệ mẫu-quần thể.
    • Ví dụ ta biết \theta_{ij} là một trong 3 giá trị \theta_{ij}^a, \theta_{ij}^b\theta_{ij}^c; trong đó \theta_{ij}^a có nhiều khả năng nhất rồi tới \theta_{ij}^b và cuối cùng là \theta_{ij}^c. Ta có thể gán một hàm xac suất cho 3 giá trị này để biểu thị khả năng xảy ra của từng cái như sau:
Table 2: Hai hàm số xác suất thể hiện khả năng xảy ra của 3 giá trị của tham số \theta_{ij}.
\theta_{ij} p_1(\theta_{ij}) p_2(\theta_{ij})
\theta_{ij}^a 0.5 0.6
\theta_{ij}^b 0.3 0.35
\theta_{ij}^c 0.2 0.05
  • Dữ liệu n_{ij} là đại lượng tất định. Vai trò của nó trong Bayes như là “bằng chứng”. Ta càng có nhiều bằng chứng thì niềm tin của ta sẽ càng lớn.
    • Trong cả Frequentist và Bayes, dữ liệu được biểu diễn qua hàm số likelihood p(n_{ij};\theta_{ij}).
    • Với Bayes, p(n_{ij};\theta_{ij}) cũng có thể viết theo dạng xác suất điều kiện p(n_{ij}|\theta_{ij}).
  • Hàm số xác suất p(\theta_{ij}) được xác định trước khi ta quan sát dữ liệu. Nó đóng vai trò là niềm tin của ta vào các lựa chọn của \theta_{ij} trườc khi ta nhìn thấy bất kỳ bằng chứng thực nghiệm nào. Vì thế nó được gọi là xác suất tiên nghiệm (prior distribution).
  • Sau khi ta đã có bằng chứng p(n_{ij}|\theta_{ij}), ta sẽ “update” niềm tin của chúng ta về tham số \theta_{ij}. Cụ thể là ta dùng công thức Bayes

p(\theta^k_{ij}| n_{ij}) = \frac{p(n_{ij}|\theta^k_{ij})p(\theta^k_{ij})}{\sum_{k=1,2,3}p(n_{ij}|\theta^k_{ij})p(\theta_{ij}^k)}

  • Xác suất p(\theta_{ij}| n_{ij}) được gọi xác suất hậu nghiệm (posterior distribution).
  • Xác suất hậu nghiệm p(\theta_{ij}| n_{ij}) chứa toàn bộ thông tin cần thiết về \theta_{ij} thông qua 2 nguồn thông tin:
    • Thông tin của ta về tham số trước khi quan sát dữ liệu,
    • Thông tin về tham số từ bằng chứng chứa trong dữ liệu đã quan sát.
  • Mọi suy luận về \theta_{ij} như khoảng tin cậy đều sẽ được xác định dựa trên xác suất hậu nghiệm của nó.
  • Ý nghĩa của khoảng tin cậy Bayes rất trực quan: Xác suất mà giá trị đúng của \theta_{ij} nằm trong khoảng tin cậy này là 95%.
  • Tóm lại, phương pháp Bayes cung cấp một phương pháp thống kê rất trực quan:
    • Trước khi đi thu thập bằng chứng, ta hãy xác định niềm tin của ta vào các lựa chọn khả dĩ của tham số.
    • Sau khi thu thập bằng chứng, ta tiến hành cập nhật lại niềm tin của ta dựa trên bằng chứng đó.
    • Cuối cùng là đưa ra kết luận về tham số đó.

Giả sử rằng ta chưa quan sát Table 1, nghĩa là ta chưa có các giá trị n_{ij}. Ta xác định xác suất tiên nghiệm của \theta_{ij}. Lưu ý \theta_{ij} là xác suất của từng trường hợp, nên ta cũng có thể biểu diễn nó thông qua con số bệnh nhân của từng trường hợp như trong Table 3, ta có các m_{ij} chính là số bệnh nhận ta dự đoán trước khi ta quan sát được bằng chứng.

Table 3: Bảng phân loại của thông tin tiên nghiệm.
\text{Xét nghiệm}
\text{Bệnh}
D = 0 D = 1
X = 0 (m_{00}, \theta_{00}) (m_{01}, \theta_{01})
X = 1 (m_{10}, \theta_{10}) (m_{11}, \theta_{11})

1.3 Tính toán và phân tích

  • Ta giả sử n_{ij} là một phân phối đa thức n_{ij} \sim MBin(n, \boldsymbol \theta), trong đó n = \sum_{i,j = 0,1}n_{ij}\boldsymbol\theta = (\theta_{00}, \theta_{10},\theta_{01}, \theta_{11}).
  • Ta cũng giả sử \theta_{ij} là phân phối Dirichlet \theta_{ij} \sim Dirichlet(m_{00}, m_{10}, m_{01}, m_{11})
  • Phân bố này có phương sai là V(\theta_{ij}) = \frac{\frac{m_{ij}}{m}\times(1-\frac{m_{ij}}{m})}{m+1}, \quad m = \sum_{i,j = 0,1}m_{ij}
  • m_{ij} đại diện cho niềm tin của ta trước khi quan sát bằng chứng, nên để công bằng ta sẽ chọn m_{ij} = 1 cho mọi i,j = 0,1.
  • Điều này cho thấy mọi trường hợp đều có số bệnh nhân ngang nhau.
Note

Câu hỏi đặc ra là tại sao m_{ij} =1 mà không phải là 2, 3, hay thậm chí 100. Nếu tất cả m_{ij} bằng nhau thì đều thể hiện 4 nhóm đều có khả năng xảy ra ngang nhau. Ta hãy xem xét phương sai của \theta_{ij} theo m_{ij}:

Khi m_{ij} tăng thì phương sai của tham số giảm dần, và điều này chứng minh rằng khi số bệnh nhân giả định trước khi có bằng chứng càng nhiều, thì niềm tin hay tính chắc chắn của ta về các nhóm có bệnh nhân ngang nhau là rất cao. Điều này rất nguy hiểm, bời vì trước khi quan sát dữ liệu ta không nên đặc niềm tin quá cao vào các lựa chọn của tham số. Điều này đồng nghĩa với việc ta nén độ tin cậy của các bằng chứng trong tương lai về 0. Điều này được thực hiện dễ dàng băng cách điều chỉnh xác suất tiên nghiệm sao cho phương sai của nó vô cùng lớn, nghĩa là độ tin cậy rất bất định.

Xác suất hậu nghiệm trong trường hợp này có công thức xác định. Tuy nhiên ta sẽ giả sử nó không có dạng xác định và ta sẽ tính bằng phương pháp Markov chain Monte Carlo (MCMC) bằng stan.

1.3.1 Stan code

Nhắc lại:

  • Hàm likelihood: p(\{n_{ij}\}_{i,j = 0,1}) = MBin(\boldsymbol\theta; (327, 208, 115, 818))
  • Xác suất tiên nghiệm: \boldsymbol\theta \sim Dirichlet(1,1,1,1)
Code
stan_code <- "
data {
  int<lower=1> K;
  array[K] int<lower=0> n;
  vector<lower=0>[K] alpha;
}

parameters {
  simplex[K] theta;
}

model {
  theta ~ dirichlet(alpha);
  n ~ multinomial(theta);
}

generated quantities {
  real theta00 = theta[1];
  real theta01 = theta[2];
  real theta10 = theta[3];
  real theta11 = theta[4];

  real tpf;
  real se;
  real fpf;
  real sp;
  real tnf;
  real fnf;
  real ppv;
  real npv;
  real pdlr;
  real ndlr;

  tpf  = theta11 / (theta11 + theta01);
  se   = tpf;

  fpf  = theta10 / (theta10 + theta00);
  sp   = 1 - fpf;

  tnf  = theta00 / (theta00 + theta10);
  fnf  = theta01 / (theta01 + theta11);

  ppv  = theta11 / (theta10 + theta11);
  npv  = theta00 / (theta00 + theta01);

  pdlr = tpf / fpf;
  ndlr = fnf / tnf;
}
"

mod <- cmdstan_model(write_stan_file(stan_code))
data_stan <- list(
  n = c(327, 208, 115, 818),
  K= 4,
  alpha = c(1, 1, 1, 1)   # flat Dirichlet prior
)
fit <- mod$sample(
  data = data_stan,
  chains = 4,
  parallel_chains = 4,
  iter_warmup = 4000,
  iter_sampling = 1000,
  seed = 123,
  show_messages = F
)

Mean và khoảng tin cậy Bayes của các tham số là:

Code
fit$summary(c("theta00", "theta10", "theta01", "theta11"), mean, hdi)|>
  mutate(across(mean:upper, ~round(.,2)))%>%
  gt::gt()%>%
  gt::tab_spanner(label = "Highest density interval", column = c("lower", "upper"))
Table 4: mean và khoảng tin cậy Bayes của thm số \theta_{ij}.
variable mean
Highest density interval
lower upper
theta00 0.22 0.20 0.24
theta10 0.08 0.07 0.09
theta01 0.14 0.12 0.16
theta11 0.56 0.53 0.58

1.3.2 Phân tích

Dựa vào Table 1, TPF và FPF được tính như sau:

\mathrm{TPF}(\theta) = \frac{\theta_{11}}{\theta_{11} + \theta_{01}} = P(X = 1 \mid D = 1),

\mathrm{FPF}(\theta) = \frac{\theta_{10}}{\theta_{00} + \theta_{10}} = P(X = 1 \mid D = 0)

Như vậy ta cũng có thể tính toán độ tin cậy của TPF và FPF như sau:

Code
fit$summary(c("tpf", "fpf"), mean, hdi)|>
  mutate(across(mean:upper, ~round(.,2)))%>%
  gt::gt()%>%
  gt::tab_spanner(label = "Highest density interval", column = c("lower", "upper"))
Table 5: mean và khoảng tin cậy Bayes của dương tính giả và dương tính thật.
variable mean
Highest density interval
lower upper
tpf 0.80 0.77 0.82
fpf 0.26 0.22 0.30

Như vậy ta có kết luận sau

  • Một người có dương tính thì trung bình khả năng người đó xét nghiệm ra dương tính là khoảng 80%. Xác suất này dao động trong khoảng 77% đến 82% với độ tin cậy lên đến 95%.
  • Một người nếu là âm tính thì trung bình khả năng người đó xét nghiệm ra dương tính khoảng 26% dao động từ 22% đến 30%.