3.1. Summary of Pooled PrevalenceDescription:
We synthesized data from all included studies. The pooled prevalence
estimates, along with heterogeneity statistics (\(I^2\)) and p-values, are summarized in
Table 1 below.
Table 1: Pooled prevalence of menstrual disorders among
female medical students in SEA
# --- PHẦN TẠO BẢNG CHUẨN (WORD + HTML ĐỀU CHẠY TỐT) ---
# 1. Tạo dữ liệu cho bảng
mods <- list("Overall"=m_rlkn, "Dysmenorrhea"=m_dys, "Irregular"=m_irr, "PMS"=m_pms)
tbl_data <- purrr::imap_dfr(mods, function(m, l) {
if(is.null(m)) return(NULL)
data.frame(
Outcome = l,
Studies = m$k,
Participants = format(sum(m$n), big.mark=","),
`Prevalence (95% CI)` = sprintf("%.2f%% (%.2f-%.2f)",
plogis(m$TE.random)*100,
plogis(m$lower.random)*100,
plogis(m$upper.random)*100),
`Heterogeneity (I2)` = sprintf("%.1f%%", m$I2*100),
`P-value (Q)` = ifelse(m$pval.Q < 0.001, "< 0.001", sprintf("%.3f", m$pval.Q)),
check.names = FALSE
)
})
# 2. Vẽ bảng bằng Flextable (Siêu thích hợp cho Word)
ft <- flextable(tbl_data) %>%
autofit() %>%
theme_vanilla() %>%
bold(part = "header") %>% # Đậm tiêu đề
bold(j = 1) %>% # Đậm cột Outcome
align(align = "center", part = "all") %>% # Căn giữa
fontsize(size = 10, part = "all") %>% # Cỡ chữ 10 cho gọn trong Word
font(fontname = "Times New Roman", part = "all") # Font chuẩn báo cáo
ft # In bảng ra
Outcome | Studies | Participants | Prevalence (95% CI) | Heterogeneity (I2) | P-value (Q) |
|---|
Overall | 19 | 7,719 | 57.61% (45.66-68.73) | 98.8% | < 0.001 |
Dysmenorrhea | 8 | 3,519 | 77.36% (67.49-84.91) | 96.8% | < 0.001 |
Irregular | 8 | 3,845 | 30.92% (21.06-42.89) | 98.0% | < 0.001 |
PMS | 6 | 1,853 | 39.32% (23.00-58.42) | 98.1% | < 0.001 |
The meta-analysis revealed a high burden of menstrual health issues
among medical students. The pooled prevalence of overall menstrual
disorders was 57.61% (95% CI: 45.66%–68.73%). Among specific subtypes,
dysmenorrhea was the most common condition, with a prevalence of 77.36%
(95% CI: 67.49%–84.91%), followed by PMS/PMDD (39.32%) and irregular
menstrual cycles (30.92%). Given the substantial heterogeneity observed
across all outcomes (\(I^2 >
96\%\)), random-effects models were applied, and subgroup
analyses were conducted to explore potential sources of variation.
3.2. Primary Outcome:
Overall Menstrual Disorders
A total of 19 studies provided data on the
prevalence of menstrual disorders. The pooled analysis showed a
prevalence of 57.61% (95% CI 45.66%–68.73%). This shows
that approximately 58% of the total population of
included female medical students suffered from some form of menstrual
disorder. The studies showed a high heterogeneity (\(Q=1488.73\), \(df=18\), \(p<0.001\), and \(I^2=98.8\%\)) (Figure 2).
The prevalence estimates ranged widely across studies. The lowest
prevalence was reported by Ngo et al. (2022) in Vietnam
(11.6%; 95% CI 8.2%–15.7%), while the highest was
reported by Situmorang et al. (2024) in Indonesia
(91.3%; 95% CI 88.8%–93.4%). There was no evidence of
publication bias found by the Egger test (\(p=0.876\)).
Figure 2. Forest plot of pooled prevalence of overall
menstrual disorders
par(mar=c(5,6,4,2))
forest(m_rlkn, backtransf=TRUE, pscale=100, xlim=c(0,100), xlab="Prevalence (%)",
main="Pooled prevalence of menstrual disorders",
leftcols=c("studlab","event","n"), leftlabs=c("Study","Events","Total"),
rightlabs=c("Prevalence", "95% CI"),
overall=TRUE, print.prediction=TRUE,
fontsize=11, spacing=1.3, col.square = "dodgerblue4",col.square.lines = "dodgerblue4", col.inside = "black", col.diamond = "seagreen", col.diamond.lines = "seagreen", col.predict = "firebrick")

Subgroup Analysis by Country
Students from Indonesia and Malaysia had higher prevalence rates of
menstrual disorders (approximately 74-76%). In contrast, students from
Thailand and Vietnam showed a relatively lower prevalence level (though
Vietnam showed significant variation within studies). Finally, the
prevalence varied significantly across different study settings,
reflecting the influence of local academic environments (Figure 3).
Figure 3. Forest plot for comparing countries in terms of menstrual
disorders prevalence
par(mar=c(5,4,4,2))
cts <- unique(as.character(m_rlkn$data$country)); m_rlkn$data$country <- factor(m_rlkn$data$country, levels=c("Vietnam", sort(cts[cts!="Vietnam"])))
forest(update(m_rlkn, byvar=m_rlkn$data$country), layout="JAMA", sortvar=TE, pscale=100, xlim=c(0,100), digits=1, xlab="Prevalence (%)", main="Pooled Prevalence of Menstrual Disorders by Country", leftcols=c("studlab","event","n"), leftlabs=c("Study","Events","Total"), rightcols=c("effect.ci","w.random","i2"), rightlabs=c("Prevalence (95% CI)","Weight","I2"), just.addcols="right", overall=TRUE, test.subgroup=TRUE, addrow.subgroups=TRUE, print.prediction=TRUE, col.square="navy", col.square.lines="navy", col.diamond="forestgreen", col.diamond.lines="forestgreen", col.predict="firebrick", fontsize=11, spacing=1.3)

Publication Bias Assessment
The publication bias was evaluated through the funnel plot and
Egger’s test. The funnel plot (Figure 4) showed a symmetrical pattern ,
indicating no significant publication bias. This was supported by
Egger’s test result (P = 0.876).
Figure 4. Funnel plot of included studies showing a symmetrical
pattern including no publication bias
if(!is.null(m_rlkn) && m_rlkn$k >= 10) {
cols <- c("gray95", "gray85", "gray75")
funnel(m_rlkn, xlab="Logit Transformed Prevalence", ylab="Standard Error", studlab=FALSE, contour=c(0.9, 0.95, 0.99), col.contour=cols, pch=21, bg="navy", col="black", cex=1.3, lwd=1, lty.ref=2, col.ref="darkred", lwd.ref=2)
legend("topright", legend=c("p < 0.10", "p < 0.05", "p < 0.01"), fill=cols, title="Significance Levels", bty="n", cex=0.8)
title(main="Funnel Plot of Menstrual Disorders", sub="Egger's Test p-value = 0.876 (No evidence of publication bias)", col.main="black", col.sub="forestgreen", font.sub=3)
} else {
plot(1, type="n", axes=FALSE, xlab="", ylab=""); text(1, 1, "Insufficient data for Funnel Plot")
}

3.3. Secondary Outcomes: Dysmenorrhea, Irregular Cycles, and
PMS/PMDD
We identified 8 studies that reported dysmenorrhea
with a random effect of pooled prevalence estimate of 77.36% (95% CI
67.49%-84.91%) (Figure 5). The prevalence estimates
ranged from 39.7% to 91.3% and there was substantial heterogeneity among
those estimates (Q=217.98, d.f.=7, p<0.001 and I2=96.8%). Egger’s
test was not performed due to the limited number of studies (k < 10).
We identified 8 studies that reported irregular menstrual
cycles (Figure 6). The prevalence estimates
ranged from 13.0% to 48.9%. The random effects of pooled prevalence
estimate was 30.92% (95% CI 21.06%-42.89%) (Q=352.77, d.f.=7, p<0.001
and I2=98.0%). Egger’s test was not performed (k < 10). Overall
prevalence of PMS / PMDD was 39.32% (95% CI
23.00%-58.42%), ranging from 11.6% to 84.9%. There was substantial
heterogeneity among studies (Q=268.71, d.f.=5, p<0.001 and I2=98.1%)
(Figure 7). Egger’s test was not performed (k <
10).
Figure 5. Forest plot of pooled prevalence of dysmenorrhea showed a
significant effect of 77.36% (67.49%, 84.91%)
par(mar=c(5,6,4,2))
forest(m_dys, backtransf=TRUE, pscale=100, xlim=c(0,100), xlab="Prevalence (%)", main="Pooled prevalence of dysmenorrhea", leftcols=c("studlab","event","n"), leftlabs=c("Study","Events","Total"), rightlabs=c("Prevalence", "95% CI"), overall=TRUE, print.prediction=TRUE, fontsize=11, spacing=1.3, col.square = "dodgerblue4",col.square.lines = "dodgerblue4", col.inside = "black", col.diamond = "seagreen", col.diamond.lines = "seagreen", col.predict = "firebrick")

Figure 6. Forest plot of pooled prevalence of irregular menstrual
cycles showed a significant effect of 30.92% (21.06%, 42.89%)
par(mar=c(5,6,4,2))
forest(m_irr, backtransf=TRUE, pscale=100, xlim=c(0,100), xlab="Prevalence (%)", main="Pooled prevalence of irregular cycles", leftcols=c("studlab","event","n"), leftlabs=c("Study","Events","Total"), rightlabs=c("Prevalence", "95% CI"), overall=TRUE, print.prediction=TRUE, fontsize=11, spacing=1.3, col.square = "dodgerblue4",col.square.lines = "dodgerblue4", col.inside = "black", col.diamond = "seagreen", col.diamond.lines = "seagreen", col.predict = "firebrick")

Figure 7. Forest plot of pooled prevalence of PMS / PMDD showed a
significant effect of 39.32% (23.00%, 58.42%)
par(mar=c(5,6,4,2))
forest(m_pms, backtransf=TRUE, pscale=100, xlim=c(0,100), xlab="Prevalence (%)", main="Pooled prevalence of PMS / PMDD", leftcols=c("studlab","event","n"), leftlabs=c("Study","Events","Total"), rightlabs=c("Prevalence", "95% CI"), overall=TRUE, print.prediction=TRUE, fontsize=11, spacing=1.3,col.square = "dodgerblue4",col.square.lines = "dodgerblue4", col.inside = "black", col.diamond = "seagreen", col.diamond.lines = "seagreen", col.predict = "firebrick")
