knitr::opts_chunk$set(echo = T)
tidyverse, ggridges, brms, tidybayes và ggdist
library(tidyverse)
library(ggridges)
library(rstan)
library(brms)
library(tidybayes)
library(ggdist)
rstan::rstan_options(auto_write = TRUE)
options(mc.cores = parallel::detectCores())
Bài toán này dựa trên nghiên cứu của Li Lu và cs “Which Factors Are Associated With Reproductive Outcomes of DOR Patients in ART Cycles: An Eight-Year Retrospective Study” công bố năm 2022 trên tạp chí Frontiers in Endocrinology. (doi: 10.3389/fendo.2022.796199).
Nhi trích xuất một phần dữ liệu để tạo ra một bài toán thống kê với mục tiêu khảo sát hiệu quả của chu kì ART sử dụng 4 phác đồ khác nhau, bao gồm Kích thích nhẹ bằng letrozole, đối vận GnRH, Follicular Phase Long-Acting protocol và Luteal Phase Short-Acting Long protocol, kèm theo các hiệp biến AMH, AFC và Tuổi, đối với kết cục số lượng noãn thu được sau chu kì kích thích BT.
Stim | Age | AMH | AFC | FSH | LH | Retrieved | MII | MII_rate | Clin_preg |
---|---|---|---|---|---|---|---|---|---|
1_GnRH | 39 | 0.17 | 0 | 11.88 | 4.51 | 0 | 0 | 0 | 0 |
1_GnRH | 47 | 0.04 | 4 | 13.69 | 4.89 | 1 | 1 | 1 | 0 |
1_GnRH | 44 | 0.22 | 1 | 20.50 | 9.63 | 0 | 0 | 0 | 0 |
1_GnRH | 42 | 0.08 | 2 | 14.45 | 3.90 | 1 | 1 | 1 | 0 |
1_GnRH | 44 | 0.50 | 2 | 14.39 | 6.58 | 0 | 0 | 0 | 0 |
Bài toán: So sánh số lượng noãn thu được giữa 4 loại phác đồ, số trường hợp không thu được noãn nào cả và tỷ lệ của kết quả thất bại này:
Stim | sum | zeros | p0 | mean | sd | median | p5 | p95 |
---|---|---|---|---|---|---|---|---|
0_Mild | 58 | 41 | 0.466 | 0.659 | 0.829 | 1.000 | 0.000 | 2.000 |
1_GnRH | 225 | 33 | 0.236 | 1.607 | 1.433 | 1.000 | 0.000 | 5.000 |
2_Short | 366 | 13 | 0.092 | 2.577 | 2.317 | 2.000 | 0.000 | 7.950 |
3_Long | 729 | 3 | 0.021 | 5.170 | 3.789 | 5.000 | 1.000 | 13.000 |
Kết quả cho thấy có một khuynh hướng tăng dần của số noãn trung bình, theo thứ tự : Letrozole (Mild), GnRH_ant, Luteal Phase Short-Acting Long và Follicular Phase Long-Acting. Đặc biệt, trong dữ liệu có một tần suất khá cao của những giá trị zeros (không thu được noãn nào cả)
Thực hiện 1 kiểm định phi tham số Kruskal-Wallis H và hậu kiểm (so sánh bắt cặp) bằng Wilcoxon với hiệu chỉnh Benjamini-Hogberg
##
## Kruskal-Wallis rank sum test
##
## data: Retrieved by Stim
## Kruskal-Wallis chi-squared = 181.92, df = 3, p-value < 2.2e-16
##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: df_mod$Retrieved and df_mod$Stim
##
## 0_Mild 1_GnRH 2_Short
## 1_GnRH 4.1e-08 - -
## 2_Short < 2e-16 0.00023 -
## 3_Long < 2e-16 < 2e-16 2.5e-11
##
## P value adjustment method: BH
So sánh trực quan phân phối của noãn thu được giữa 4 phân nhóm phác đồ
Mô hình ước lượng số noãn thu được như 1 biến ngẫu nhiên Y theo phân phối Negative Binomial. lạm phát giá trị 0 (ZINBI). Phân phối ZINBI có 2 bộ phận, với bộ phận NBI : Mật độ phân phối của Y được xác định bằng 2 tham số \(\mu\) và \(\phi\) theo biến thể của hàm hỗn hợp Gamma-Poisson:
\[Pr(Y=y) = \frac{Γ(𝑦+𝜙)}{𝑦!Γ(𝜙)}(1 − \frac{𝜙}{(𝜙+𝜇)})^𝜙 (\frac{𝜇}{(𝜙+𝜇)})^𝑦\] Tham số \(\mu\) tương ứng với giá trị trung bình của Y, tham số kiểu hình \(\phi\) cho phép liên kết giữa trung bình và variance của Y theo công thức:
\[\phi = \frac{\mu^2}{Var(Y) + \mu}\] Sau đó tham số \(\mu\) được ước lượng bằng một mô hình tuyến tính tổng quát (GLM) với hàm liên kết logarit
\[log(𝜇 ) = 𝛽_0+𝛽_1 𝑋_1+𝛽_2 𝑋_2+ … +𝛽_𝑗 𝑋_𝑗\]
Ghi chú: Ta có thể mô hình hóa cả 2 tham số, nhưng để đơn giản, ở đây \(\phi\) được xem như hằng số (chỉ có Intercept)
Bộ phận Zero inflated (ZI) mở rộng khả năng của phân phối NBI cơ bản bằng cách áp dụng hàm xác suất có điều kiện riêng cho trường hợp y = 0 và y > 0.
\[𝑦=0 :𝑓_𝑧 (𝑦)=𝑧+(1−𝑧)𝑓(0)\]
\[𝑦>0 :𝑓_𝑧 (𝑦)=(1−𝑧)𝑓(𝑦)\]
Với z là xác suất không thu được noãn nào cả (thất bại hoàn toàn) (y=0), và 1-z là xác suất thu được ít nhất 1 noãn (y>0).
Tham số \(z\) được ước lượng bằng một mô hình tuyến tính tổng quát với hàm liên kết là logit.
\[logit(z ) = 𝛽_0+𝛽_1 𝑋_1+𝛽_2 𝑋_2+ … +𝛽_𝑗 𝑋_𝑗\]
Tiếp theo, ta dịch chuyển thang đo của các hiệp biến về vị trí trung bình = 0
Thiết lập công thức mô hình Bayes và xem nội dung giả thuyết tiền định (priors) mặc đinh
prior | class | coef | group | resp | dpar | nlpar | lb | ub | source |
---|---|---|---|---|---|---|---|---|---|
b | default | ||||||||
b | AFC | default | |||||||
b | Age | default | |||||||
b | AMH | default | |||||||
b | Stim1_GnRH | default | |||||||
b | Stim2_Short | default | |||||||
b | Stim3_Long | default | |||||||
student_t(3, 0.7, 2.5) | Intercept | default | |||||||
gamma(0.01, 0.01) | shape | 0 | default | ||||||
b | zi | default | |||||||
b | Stim1_GnRH | zi | default | ||||||
b | Stim2_Short | zi | default | ||||||
b | Stim3_Long | zi | default | ||||||
logistic(0, 1) | Intercept | zi | default |
Cuối cùng, ta khớp mô hình với dữ liệu
Kết quả thô của mô hình Bayes ZINNBI:
## Family: zero_inflated_negbinomial
## Links: mu = log; shape = identity; zi = logit
## Formula: Retrieved ~ Stim + Age + AMH + AFC
## zi ~ Stim
## Data: df_mod (Number of observations: 511)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Population-Level Effects:
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## Intercept -0.18 0.15 -0.47 0.11 1.00 1304 1774
## zi_Intercept -8.28 5.25 -22.04 -2.34 1.01 772 605
## Stim1_GnRH 0.79 0.17 0.45 1.13 1.00 1588 2139
## Stim2_Short 1.04 0.17 0.71 1.37 1.00 1394 1819
## Stim3_Long 1.51 0.18 1.16 1.86 1.00 1374 2015
## Age -0.03 0.01 -0.04 -0.02 1.00 3309 2604
## AMH 0.90 0.16 0.57 1.21 1.00 2308 2217
## AFC 0.03 0.02 -0.02 0.08 1.00 2767 2258
## zi_Stim1_GnRH 1.22 6.57 -11.19 16.31 1.01 770 752
## zi_Stim2_Short 0.35 6.33 -11.34 15.18 1.00 787 673
## zi_Stim3_Long -0.19 6.43 -12.00 14.53 1.01 740 713
##
## Family Specific Parameters:
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## shape 4.39 0.73 3.19 6.02 1.00 3026 2562
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
Từ kết quả của mô hình này, ta có thể thực hiện những suy diễn thống kê gồm:
Incidence rate ratio (IRR) cho mỗi hiệp biến (Age, AFC, AMH), và mỗi phác đồ (GnRH, Short, Long) so với phác đồ tham chiếu là Mild stim.
Ước lượng số noãn trung bình cho mỗi phác đồ, và sự khác biệt giữa 2 phác đồ bất kì (tương tự so sánh bắt cặp tuần tự trong posthoc test của phân tích ANOVA cổ điển)
Ước tính tỉ lệ thất bại tuyệt đối (zi) cho mỗi phác đồ, và so sánh giữa 2 phác đồ bất kì
Khảo sát hiệu ứng độc lập của AMH, Age, AFC…đối với số noãn thu được
Ta có thể áp dụng hàm exponential cho các hệ số hồi quy để ước tính Incidence rate ratio (IRR):
.variable | variable | mean | median | sd | 25% | 97.5% |
---|---|---|---|---|---|---|
AFC | .value | 1.0309363 | 1.0312572 | 0.0242166 | 1.0144307 | 1.0786185 |
Age | .value | 0.9702414 | 0.9701979 | 0.0062599 | 0.9661008 | 0.9824082 |
AMH | .value | 2.4808685 | 2.4510229 | 0.4091415 | 2.1863523 | 3.3621153 |
GnRH | .value | 2.2259410 | 2.1945718 | 0.3846597 | 1.9500285 | 3.0914756 |
Long | .value | 4.6122198 | 4.5300683 | 0.8250409 | 4.0265463 | 6.4114664 |
Short | .value | 2.8767170 | 2.8355408 | 0.4894839 | 2.5282423 | 3.9351100 |
Khác biệt về số lượng noãn trung bình (\(\mu_i\)) giữa các cặp phác đồ:
.variable | variable | mean | median | sd | 25% | 97.5% |
---|---|---|---|---|---|---|
GnRH_vs_Mild | .value | 0.9900693 | 0.9929425 | 0.1963433 | 0.8644554 | 1.366586 |
Long_vs_GnRH | .value | 1.9573479 | 1.9516406 | 0.3198211 | 1.7501867 | 2.608256 |
Short_vs_GnRH | .value | 0.5342784 | 0.5363448 | 0.2251581 | 0.3828056 | 0.976336 |
Short_vs_Long | .value | 1.4230695 | 1.4156581 | 0.2983059 | 1.2197591 | 2.025322 |
Xác suất thất bại hoàn toàn (zi) của 5 phác đồ
.variable | variable | mean | median | sd | 25% | 97.5% |
---|---|---|---|---|---|---|
p0_GnRH | .value | 0.0105286 | 0.0027253 | 0.0173505 | 0.0001789 | 0.0621976 |
p0_Long | .value | 0.0030241 | 0.0005943 | 0.0055914 | 0.0000373 | 0.0202003 |
p0_Mild | .value | 0.0120355 | 0.0010459 | 0.0252059 | 0.0000253 | 0.0876489 |
p0_Short | .value | 0.0040295 | 0.0009298 | 0.0074193 | 0.0000758 | 0.0254620 |
Khảo sát trực quan phân phối hậu nghiệm của IRR cho 4 phác đồ (so với Mild), AMH và Tuổi
Khảo sát trực quan phân phối hậu nghiệm của xác suất zi (không thu được noãn nào cả) của 4 phác đồ
Khảo sát trực quan phân phối hậu nghiệm của IRR của 4 phác đồ
Hiệu ứng của loại phác đồ với số lượng noãn thu được
Hiệu ứng của AMH với số lượng noãn thu được
Hiệu ứng của Tuổi với số lượng noãn thu được
df_mod %>%
modelr::data_grid(AMH = modelr::seq_range(AMH, n = 5),
Age = modelr::seq_range(Age, n = 5),
AFC = modelr::seq_range(AFC, n = 5),
Stim = Stim,
) %>%
add_epred_draws(mod_1, )%>%
ggplot(aes(x = Age,
y = .epred)) +
stat_lineribbon(aes(y = .epred),
fill = 'purple',
.width = c(.95, .75, .50),
alpha = 1/8,
show.legend = F) +
stat_dotsinterval(quantiles = 100,
alpha = 0.5,
.width = c(0.75, 0.95),
point_interval = 'mean_qi',
show.legend = F)+
scale_y_continuous(breaks = seq(0,20,1))+
labs(y="Number of retrieved eggs", x = "Age") +
theme_bw(10)+
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) +
theme(axis.text = element_text(size = 12, color = "black"),
axis.title = element_text(size = 15, color = "black"))+
facet_wrap(~Stim, ncol = 2)
Kết thúc bài thực hành.