This practical demonstrates a single-arm proportion meta-analysis.
Training question: Among women who received hyaluronidase, what proportion had an episiotomy?
Effect measure: Pooled proportion, shown as a percentage.
Important distinction: A pooled proportion is descriptive. It is not a treatment-effect estimate. To compare hyaluronidase with placebo or no intervention, use the binary risk-ratio practical.
Important modelling note: This file uses
metaprop()withsm = "PLOGIT"andmethod = "Inverse". This keeps the workflow simple and allows REML, DL, and SJ tau2 estimators. Ifmethod = "Inverse"is omitted,metaprop()may use a GLMM workflow that requiresmethod.tau = "ML".
packages <- c("readxl", "dplyr", "meta", "knitr")
missing <- packages[!sapply(packages, requireNamespace, quietly = TRUE)]
if (length(missing) > 0) install.packages(missing)
library(readxl)
library(dplyr)
library(meta)
library(knitr)
metaprop() from the {meta} package.data_file <- "Hyaluronidase_MetaAnalysis_Dataset_statafinal1_1.xlsx"
if (!file.exists(data_file)) stop("Put the Hyaluronidase Excel file in the same folder as this Rmd.")
df <- read_excel(data_file, sheet = 1, range = "A5:P45", col_names = TRUE)
names(df) <- c(
"Study", "ROBOverall", "aHAaseevents", "n1HAasetotal",
"cControlevents", "n2Controltotal", "RiskHAase", "RiskControl",
"RR", "lnRR", "SElnRR", "CILower", "CIUpper",
"Outcome", "TypeofStudy", "RCT_design"
)
aHAaseevents and
n1HAasetotal.df <- df %>%
mutate(
Study = trimws(Study),
Outcome = trimws(Outcome),
RCT_design = trimws(RCT_design),
ROBOverall = trimws(ROBOverall),
aHAaseevents = as.numeric(aHAaseevents),
n1HAasetotal = as.numeric(n1HAasetotal)
)
df %>%
select(Study, Outcome, RCT_design, aHAaseevents, n1HAasetotal, ROBOverall) %>%
head(12) %>%
kable(caption = "First 12 rows relevant to the proportion analysis")
| Study | Outcome | RCT_design | aHAaseevents | n1HAasetotal | ROBOverall |
|---|---|---|---|---|---|
| Chatfield 1966* | Perineal_Trauma | Placebo | 58 | 67 | High |
| Colacioppo 2011* | Perineal_Trauma | Placebo | 86 | 115 | Low |
| Kwon 2020* | Perineal_Trauma | Placebo | 61 | 88 | Low |
| Martinez 2019 (sim) | Perineal_Trauma | Placebo | 70 | 95 | Low |
| Chen 2020 (sim) | Perineal_Trauma | Placebo | 82 | 110 | Some Concerns |
| Kumar 2021 (sim) | Perineal_Trauma | Placebo | 55 | 80 | High |
| Johansson 2018 (sim) | Perineal_Trauma | Placebo | 48 | 70 | Some Concerns |
| Patel 2022 (sim) | Perineal_Trauma | Placebo | 66 | 92 | Low |
| Nguyen 2021 (sim) | Perineal_Trauma | Placebo | 44 | 65 | High |
| Osei 2020 (sim) | Perineal_Trauma | Placebo | 35 | 55 | High |
| Chatfield 1966* | Episiotomy | Placebo | 22 | 67 | High |
| Colacioppo 2011* | Episiotomy | Placebo | 41 | 115 | Low |
df %>%
summarise(
rows = n(),
missing_events = sum(is.na(aHAaseevents)),
missing_totals = sum(is.na(n1HAasetotal)),
events_exceed_total = sum(aHAaseevents > n1HAasetotal, na.rm = TRUE),
zero_or_negative_total = sum(n1HAasetotal <= 0, na.rm = TRUE)
) %>%
kable(caption = "Basic checks for single-arm proportion data")
| rows | missing_events | missing_totals | events_exceed_total | zero_or_negative_total |
|---|---|---|---|---|
| 40 | 0 | 0 | 0 | 0 |
episiotomy_raw <- df %>%
filter(Outcome == "Episiotomy")
episiotomy_raw %>%
select(Study, RCT_design, aHAaseevents, n1HAasetotal, ROBOverall) %>%
kable(caption = "Episiotomy rows before duplicate-arm checking")
| Study | RCT_design | aHAaseevents | n1HAasetotal | ROBOverall |
|---|---|---|---|---|
| Chatfield 1966* | Placebo | 22 | 67 | High |
| Colacioppo 2011* | Placebo | 41 | 115 | Low |
| Kwon 2020* | Placebo | 27 | 88 | Low |
| Martinez 2019 (sim) | Placebo | 32 | 95 | Low |
| Chen 2020 (sim) | Placebo | 38 | 110 | Some Concerns |
| Kumar 2021 (sim) | Placebo | 24 | 80 | High |
| Johansson 2018 (sim) | Placebo | 20 | 70 | Some Concerns |
| Patel 2022 (sim) | Placebo | 29 | 92 | Low |
| Nguyen 2021 (sim) | Placebo | 18 | 65 | High |
| Osei 2020 (sim) | Placebo | 14 | 55 | High |
| Chatfield 1966* | No Intervention | 22 | 67 | High |
| O’Leary 1965* | No Intervention | 14 | 50 | High |
| Scarabotto 2008* | No Intervention | 18 | 69 | Some Concerns |
| Fernando 2017 (sim) | No Intervention | 11 | 60 | Some Concerns |
| Diallo 2019 (sim) | No Intervention | 10 | 52 | High |
| Park 2018 (sim) | No Intervention | 15 | 70 | Some Concerns |
| Ahmed 2020 (sim) | No Intervention | 12 | 58 | High |
| Rossi 2021 (sim) | No Intervention | 16 | 72 | Some Concerns |
| Williams 2022 (sim) | No Intervention | 13 | 65 | High |
| Tanaka 2016 (sim) | No Intervention | 9 | 48 | High |
episiotomy_raw %>%
count(Study, aHAaseevents, n1HAasetotal) %>%
filter(n > 1) %>%
kable(caption = "Duplicated HAase arms in the episiotomy dataset")
| Study | aHAaseevents | n1HAasetotal | n |
|---|---|---|---|
| Chatfield 1966* | 22 | 67 | 2 |
episiotomy_df <- episiotomy_raw %>%
distinct(Study, aHAaseevents, n1HAasetotal, .keep_all = TRUE) %>%
mutate(StudyLabel = make.unique(Study))
episiotomy_df %>%
select(StudyLabel, Study, aHAaseevents, n1HAasetotal, ROBOverall) %>%
kable(caption = "Final episiotomy dataset: one row per unique HAase arm")
| StudyLabel | Study | aHAaseevents | n1HAasetotal | ROBOverall |
|---|---|---|---|---|
| Chatfield 1966* | Chatfield 1966* | 22 | 67 | High |
| Colacioppo 2011* | Colacioppo 2011* | 41 | 115 | Low |
| Kwon 2020* | Kwon 2020* | 27 | 88 | Low |
| Martinez 2019 (sim) | Martinez 2019 (sim) | 32 | 95 | Low |
| Chen 2020 (sim) | Chen 2020 (sim) | 38 | 110 | Some Concerns |
| Kumar 2021 (sim) | Kumar 2021 (sim) | 24 | 80 | High |
| Johansson 2018 (sim) | Johansson 2018 (sim) | 20 | 70 | Some Concerns |
| Patel 2022 (sim) | Patel 2022 (sim) | 29 | 92 | Low |
| Nguyen 2021 (sim) | Nguyen 2021 (sim) | 18 | 65 | High |
| Osei 2020 (sim) | Osei 2020 (sim) | 14 | 55 | High |
| O’Leary 1965* | O’Leary 1965* | 14 | 50 | High |
| Scarabotto 2008* | Scarabotto 2008* | 18 | 69 | Some Concerns |
| Fernando 2017 (sim) | Fernando 2017 (sim) | 11 | 60 | Some Concerns |
| Diallo 2019 (sim) | Diallo 2019 (sim) | 10 | 52 | High |
| Park 2018 (sim) | Park 2018 (sim) | 15 | 70 | Some Concerns |
| Ahmed 2020 (sim) | Ahmed 2020 (sim) | 12 | 58 | High |
| Rossi 2021 (sim) | Rossi 2021 (sim) | 16 | 72 | Some Concerns |
| Williams 2022 (sim) | Williams 2022 (sim) | 13 | 65 | High |
| Tanaka 2016 (sim) | Tanaka 2016 (sim) | 9 | 48 | High |
metainf() to fail with duplicate row
names.episiotomy_df %>%
mutate(Proportion = aHAaseevents / n1HAasetotal) %>%
select(StudyLabel, aHAaseevents, n1HAasetotal, Proportion) %>%
mutate(Proportion = fmt_pct(Proportion)) %>%
kable(caption = "Observed episiotomy proportion in each HAase arm")
| StudyLabel | aHAaseevents | n1HAasetotal | Proportion |
|---|---|---|---|
| Chatfield 1966* | 22 | 67 | 32.8% |
| Colacioppo 2011* | 41 | 115 | 35.7% |
| Kwon 2020* | 27 | 88 | 30.7% |
| Martinez 2019 (sim) | 32 | 95 | 33.7% |
| Chen 2020 (sim) | 38 | 110 | 34.5% |
| Kumar 2021 (sim) | 24 | 80 | 30.0% |
| Johansson 2018 (sim) | 20 | 70 | 28.6% |
| Patel 2022 (sim) | 29 | 92 | 31.5% |
| Nguyen 2021 (sim) | 18 | 65 | 27.7% |
| Osei 2020 (sim) | 14 | 55 | 25.5% |
| O’Leary 1965* | 14 | 50 | 28.0% |
| Scarabotto 2008* | 18 | 69 | 26.1% |
| Fernando 2017 (sim) | 11 | 60 | 18.3% |
| Diallo 2019 (sim) | 10 | 52 | 19.2% |
| Park 2018 (sim) | 15 | 70 | 21.4% |
| Ahmed 2020 (sim) | 12 | 58 | 20.7% |
| Rossi 2021 (sim) | 16 | 72 | 22.2% |
| Williams 2022 (sim) | 13 | 65 | 20.0% |
| Tanaka 2016 (sim) | 9 | 48 | 18.8% |
m_prop_epi <- metaprop(
event = aHAaseevents,
n = n1HAasetotal,
studlab = StudyLabel,
data = episiotomy_df,
sm = "PLOGIT",
method = "Inverse",
common = FALSE,
random = TRUE,
method.tau = "REML",
method.random.ci = "HK",
backtransf = TRUE
)
summary(m_prop_epi)
## proportion 95%-CI %W(random)
## Chatfield 1966* 0.3284 [0.2185; 0.4540] 5.5
## Colacioppo 2011* 0.3565 [0.2694; 0.4512] 8.5
## Kwon 2020* 0.3068 [0.2129; 0.4142] 6.6
## Martinez 2019 (sim) 0.3368 [0.2431; 0.4411] 7.3
## Chen 2020 (sim) 0.3455 [0.2574; 0.4421] 8.1
## Kumar 2021 (sim) 0.3000 [0.2026; 0.4128] 6.1
## Johansson 2018 (sim) 0.2857 [0.1840; 0.4062] 5.4
## Patel 2022 (sim) 0.3152 [0.2223; 0.4204] 6.9
## Nguyen 2021 (sim) 0.2769 [0.1731; 0.4019] 5.0
## Osei 2020 (sim) 0.2545 [0.1467; 0.3900] 4.1
## O'Leary 1965* 0.2800 [0.1623; 0.4249] 4.0
## Scarabotto 2008* 0.2609 [0.1625; 0.3806] 5.1
## Fernando 2017 (sim) 0.1833 [0.0952; 0.3044] 3.6
## Diallo 2019 (sim) 0.1923 [0.0963; 0.3253] 3.3
## Park 2018 (sim) 0.2143 [0.1252; 0.3287] 4.6
## Ahmed 2020 (sim) 0.2069 [0.1117; 0.3335] 3.8
## Rossi 2021 (sim) 0.2222 [0.1327; 0.3356] 4.8
## Williams 2022 (sim) 0.2000 [0.1110; 0.3177] 4.1
## Tanaka 2016 (sim) 0.1875 [0.0895; 0.3263] 3.0
##
## Number of studies: k = 19
## Number of observations: o = 1381
## Number of events: e = 383
##
## proportion 95%-CI
## Random effects model 0.2773 [0.2497; 0.3068]
##
## Quantifying heterogeneity (with 95%-CIs):
## tau^2 = 0.0175 [0.0000; 0.1215]; tau = 0.1323 [0.0000; 0.3486]
## I^2 = 18.6% [0.0%; 53.0%]; H = 1.11 [1.00; 1.46]
##
## Test of heterogeneity:
## Q d.f. p-value
## 22.12 18 0.2269
##
## Details of meta-analysis methods:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-Profile method for confidence interval of tau^2 and tau
## - Calculation of I^2 based on Q
## - Hartung-Knapp adjustment for random effects model (df = 18)
## - Logit transformation
## - Clopper-Pearson confidence interval for individual studies
summary_prop(m_prop_epi, "Episiotomy proportion in HAase arm") %>%
mutate(
Pooled_proportion = fmt_pct(Pooled_proportion),
Lower_95_CI = fmt_pct(Lower_95_CI),
Upper_95_CI = fmt_pct(Upper_95_CI),
Tau2 = fmt_num(Tau2, 4),
I2_percent = fmt_num(I2_percent, 1),
Q_p_value = fmt_p(Q_p_value)
) %>%
kable(caption = "Pooled episiotomy proportion using random-effects REML and Hartung-Knapp CI")
| Analysis | Studies | Pooled_proportion | Lower_95_CI | Upper_95_CI | Tau2 | I2_percent | Q_p_value |
|---|---|---|---|---|---|---|---|
| Episiotomy proportion in HAase arm | 19 | 27.7% | 25.0% | 30.7% | 0.0175 | 18.6 | 0.227 |
forest(
m_prop_epi,
prediction = TRUE,
print.tau2 = TRUE,
print.I2 = TRUE,
leftcols = c("studlab", "event", "n"),
leftlabs = c("Study", "Events", "Total"),
xlab = "Proportion with episiotomy in the HAase arm",
backtransf = TRUE
)
This section checks whether the pooled proportion changes when the between-study variance estimator changes.
fit_prop <- function(data, tau_method = "REML") {
metaprop(
event = aHAaseevents,
n = n1HAasetotal,
studlab = StudyLabel,
data = data,
sm = "PLOGIT",
method = "Inverse",
common = FALSE,
random = TRUE,
method.tau = tau_method,
method.random.ci = "HK",
backtransf = TRUE
)
}
prop_tau <- bind_rows(
summary_prop(fit_prop(episiotomy_df, "REML"), "REML"),
summary_prop(fit_prop(episiotomy_df, "DL"), "DL"),
summary_prop(fit_prop(episiotomy_df, "SJ"), "SJ")
)
prop_tau %>%
mutate(
Pooled_proportion = fmt_pct(Pooled_proportion),
Lower_95_CI = fmt_pct(Lower_95_CI),
Upper_95_CI = fmt_pct(Upper_95_CI),
Tau2 = fmt_num(Tau2, 4),
I2_percent = fmt_num(I2_percent, 1),
Q_p_value = fmt_p(Q_p_value)
) %>%
kable(caption = "Sensitivity of pooled proportion to tau2 estimator")
| Analysis | Studies | Pooled_proportion | Lower_95_CI | Upper_95_CI | Tau2 | I2_percent | Q_p_value |
|---|---|---|---|---|---|---|---|
| REML | 19 | 27.7% | 25.0% | 30.7% | 0.0175 | 18.6 | 0.227 |
| DL | 19 | 27.8% | 25.0% | 30.7% | 0.0161 | 18.6 | 0.227 |
| SJ | 19 | 27.3% | 24.6% | 30.3% | 0.0483 | 18.6 | 0.227 |
method = "Inverse" when using REML, DL, or SJ with
metaprop() and sm = "PLOGIT".loo_prop <- metainf(m_prop_epi, pooled = "random")
summary(loo_prop)
## Leave-one-out meta-analysis
##
## proportion 95%-CI tau^2 tau I^2
## Omitting Chatfield 1966* 0.2738 [0.2453; 0.3043] 0.0211 0.1452 20.4%
## Omitting Colacioppo 2011* 0.2720 [0.2449; 0.3009] 0.0088 0.0936 8.6%
## Omitting Kwon 2020* 0.2743 [0.2452; 0.3054] 0.0232 0.1523 22.1%
## Omitting Martinez 2019 (sim) 0.2727 [0.2445; 0.3029] 0.0187 0.1368 17.3%
## Omitting Chen 2020 (sim) 0.2722 [0.2444; 0.3018] 0.0147 0.1214 13.6%
## Omitting Kumar 2021 (sim) 0.2749 [0.2457; 0.3061] 0.0233 0.1525 22.6%
## Omitting Johansson 2018 (sim) 0.2759 [0.2467; 0.3072] 0.0228 0.1509 23.1%
## Omitting Patel 2022 (sim) 0.2737 [0.2449; 0.3047] 0.0225 0.1499 21.1%
## Omitting Nguyen 2021 (sim) 0.2765 [0.2473; 0.3078] 0.0222 0.1489 23.1%
## Omitting Osei 2020 (sim) 0.2779 [0.2488; 0.3089] 0.0201 0.1419 22.4%
## Omitting O'Leary 1965* 0.2765 [0.2474; 0.3076] 0.0214 0.1462 23.1%
## Omitting Scarabotto 2008* 0.2775 [0.2483; 0.3088] 0.0212 0.1456 22.6%
## Omitting Fernando 2017 (sim) 0.2827 [0.2554; 0.3118] 0.0103 0.1013 11.7%
## Omitting Diallo 2019 (sim) 0.2814 [0.2536; 0.3110] 0.0131 0.1145 15.2%
## Omitting Park 2018 (sim) 0.2813 [0.2529; 0.3115] 0.0140 0.1184 17.1%
## Omitting Ahmed 2020 (sim) 0.2810 [0.2528; 0.3111] 0.0142 0.1193 17.0%
## Omitting Rossi 2021 (sim) 0.2807 [0.2521; 0.3112] 0.0154 0.1240 18.4%
## Omitting Williams 2022 (sim) 0.2821 [0.2541; 0.3118] 0.0120 0.1097 14.7%
## Omitting Tanaka 2016 (sim) 0.2813 [0.2535; 0.3108] 0.0132 0.1150 15.1%
##
## Random effects model 0.2773 [0.2497; 0.3068] 0.0175 0.1323 18.6%
##
## Details of meta-analysis methods:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Calculation of I^2 based on Q
## - Hartung-Knapp adjustment for random effects model (df = {17, 18})
## - Logit transformation
forest(loo_prop, xlab = "Proportion with episiotomy", backtransf = TRUE)
galbraith_plot(m_prop_epi, main = "Galbraith plot: episiotomy proportion")
funnel(m_prop_epi, xlab = "Logit proportion", main = "Funnel plot: episiotomy proportion")
egger_prop <- metabias(m_prop_epi, method.bias = "linreg", k.min = 3)
egger_prop
## Linear regression test of funnel plot asymmetry
##
## Test result: t = -9.62, df = 17, p-value < 0.0001
## Bias estimate: -5.4187 (SE = 0.5634)
##
## Details:
## - multiplicative residual heterogeneity variance (tau^2 = 0.2020)
## - predictor: standard error
## - weight: inverse variance
## - reference: Egger et al. (1997), BMJ
tf_prop <- trimfill(m_prop_epi)
summary(tf_prop)
## proportion 95%-CI %W(random)
## Chatfield 1966* 0.3284 [0.2270; 0.4487] 4.4
## Colacioppo 2011* 0.3565 [0.2745; 0.4480] 5.7
## Kwon 2020* 0.3068 [0.2196; 0.4105] 5.0
## Martinez 2019 (sim) 0.3368 [0.2492; 0.4373] 5.2
## Chen 2020 (sim) 0.3455 [0.2627; 0.4388] 5.6
## Kumar 2021 (sim) 0.3000 [0.2099; 0.4088] 4.7
## Johansson 2018 (sim) 0.2857 [0.1923; 0.4019] 4.3
## Patel 2022 (sim) 0.3152 [0.2287; 0.4168] 5.1
## Nguyen 2021 (sim) 0.2769 [0.1820; 0.3974] 4.1
## Osei 2020 (sim) 0.2545 [0.1569; 0.3851] 3.6
## O'Leary 1965* 0.2800 [0.1734; 0.4189] 3.6
## Scarabotto 2008* 0.2609 [0.1710; 0.3766] 4.2
## Fernando 2017 (sim) 0.1833 [0.1045; 0.3015] 3.3
## Diallo 2019 (sim) 0.1923 [0.1067; 0.3218] 3.1
## Park 2018 (sim) 0.2143 [0.1335; 0.3256] 3.9
## Ahmed 2020 (sim) 0.2069 [0.1214; 0.3299] 3.4
## Rossi 2021 (sim) 0.2222 [0.1408; 0.3324] 4.0
## Williams 2022 (sim) 0.2000 [0.1198; 0.3146] 3.6
## Tanaka 2016 (sim) 0.1875 [0.1005; 0.3227] 2.9
## Filled: Park 2018 (sim) 0.4161 [0.2870; 0.5577] 3.9
## Filled: Ahmed 2020 (sim) 0.4269 [0.2830; 0.5844] 3.4
## Filled: Williams 2022 (sim) 0.4374 [0.2974; 0.5880] 3.6
## Filled: Diallo 2019 (sim) 0.4494 [0.2905; 0.6193] 3.1
## Filled: Tanaka 2016 (sim) 0.4571 [0.2897; 0.6348] 2.9
## Filled: Fernando 2017 (sim) 0.4640 [0.3104; 0.6247] 3.3
##
## Number of studies: k = 25 (with 6 added studies)
##
## proportion 95%-CI
## Random effects model 0.3029 [0.2688; 0.3394]
##
## Quantifying heterogeneity (with 95%-CIs):
## tau^2 = 0.0628 [0.0134; 0.2649]; tau = 0.2506 [0.1160; 0.5147]
## I^2 = 46.5% [14.5%; 66.5%]; H = 1.37 [1.08; 1.73]
##
## Test of heterogeneity:
## Q d.f. p-value
## 44.85 24 0.0061
##
## Details of meta-analysis methods:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-Profile method for confidence interval of tau^2 and tau
## - Calculation of I^2 based on Q
## - Hartung-Knapp adjustment for random effects model (df = 24)
## - Trim-and-fill method to adjust for funnel plot asymmetry (L-estimator)
## - Logit transformation
funnel(tf_prop, xlab = "Logit proportion", main = "Trim-and-fill: episiotomy proportion")
The main analysis above uses one row per unique HAase arm to avoid double-counting. The following subgroup analysis uses the original comparison rows, with unique labels, only to demonstrate subgroup syntax.
episiotomy_design_df <- episiotomy_raw %>%
mutate(StudyLabel = make.unique(paste(Study, RCT_design, sep = " | ")))
m_prop_design <- metaprop(
event = aHAaseevents,
n = n1HAasetotal,
studlab = StudyLabel,
data = episiotomy_design_df,
sm = "PLOGIT",
method = "Inverse",
common = FALSE,
random = TRUE,
method.tau = "REML",
method.random.ci = "HK",
subgroup = RCT_design,
backtransf = TRUE
)
summary(m_prop_design)
## proportion 95%-CI %W(random)
## Chatfield 1966* | Placebo 0.3284 [0.2185; 0.4540] 5.2
## Colacioppo 2011* | Placebo 0.3565 [0.2694; 0.4512] 8.2
## Kwon 2020* | Placebo 0.3068 [0.2129; 0.4142] 6.3
## Martinez 2019 (sim) | Placebo 0.3368 [0.2431; 0.4411] 7.0
## Chen 2020 (sim) | Placebo 0.3455 [0.2574; 0.4421] 7.9
## Kumar 2021 (sim) | Placebo 0.3000 [0.2026; 0.4128] 5.8
## Johansson 2018 (sim) | Placebo 0.2857 [0.1840; 0.4062] 5.1
## Patel 2022 (sim) | Placebo 0.3152 [0.2223; 0.4204] 6.6
## Nguyen 2021 (sim) | Placebo 0.2769 [0.1731; 0.4019] 4.7
## Osei 2020 (sim) | Placebo 0.2545 [0.1467; 0.3900] 3.9
## Chatfield 1966* | No Intervention 0.3284 [0.2185; 0.4540] 5.2
## O'Leary 1965* | No Intervention 0.2800 [0.1623; 0.4249] 3.8
## Scarabotto 2008* | No Intervention 0.2609 [0.1625; 0.3806] 4.8
## Fernando 2017 (sim) | No Intervention 0.1833 [0.0952; 0.3044] 3.4
## Diallo 2019 (sim) | No Intervention 0.1923 [0.0963; 0.3253] 3.1
## Park 2018 (sim) | No Intervention 0.2143 [0.1252; 0.3287] 4.3
## Ahmed 2020 (sim) | No Intervention 0.2069 [0.1117; 0.3335] 3.6
## Rossi 2021 (sim) | No Intervention 0.2222 [0.1327; 0.3356] 4.5
## Williams 2022 (sim) | No Intervention 0.2000 [0.1110; 0.3177] 3.9
## Tanaka 2016 (sim) | No Intervention 0.1875 [0.0895; 0.3263] 2.8
## RCT_design
## Chatfield 1966* | Placebo Placebo
## Colacioppo 2011* | Placebo Placebo
## Kwon 2020* | Placebo Placebo
## Martinez 2019 (sim) | Placebo Placebo
## Chen 2020 (sim) | Placebo Placebo
## Kumar 2021 (sim) | Placebo Placebo
## Johansson 2018 (sim) | Placebo Placebo
## Patel 2022 (sim) | Placebo Placebo
## Nguyen 2021 (sim) | Placebo Placebo
## Osei 2020 (sim) | Placebo Placebo
## Chatfield 1966* | No Intervention No Intervention
## O'Leary 1965* | No Intervention No Intervention
## Scarabotto 2008* | No Intervention No Intervention
## Fernando 2017 (sim) | No Intervention No Intervention
## Diallo 2019 (sim) | No Intervention No Intervention
## Park 2018 (sim) | No Intervention No Intervention
## Ahmed 2020 (sim) | No Intervention No Intervention
## Rossi 2021 (sim) | No Intervention No Intervention
## Williams 2022 (sim) | No Intervention No Intervention
## Tanaka 2016 (sim) | No Intervention No Intervention
##
## Number of studies: k = 20
## Number of observations: o = 1448
## Number of events: e = 405
##
## proportion 95%-CI
## Random effects model 0.2805 [0.2537; 0.3089]
##
## Quantifying heterogeneity (with 95%-CIs):
## tau^2 = 0.0140 [0.0000; 0.1154]; tau = 0.1182 [0.0000; 0.3397]
## I^2 = 16.7% [0.0%; 51.1%]; H = 1.10 [1.00; 1.43]
##
## Test of heterogeneity:
## Q d.f. p-value
## 22.81 19 0.2459
##
## Results for subgroups (random effects model):
## k proportion 95%-CI tau^2 tau Q
## RCT_design = Placebo 10 0.3174 [0.2955; 0.3402] 0 0 3.38
## RCT_design = No Intervention 10 0.2318 [0.1994; 0.2678] 0 0 6.91
## I^2
## RCT_design = Placebo 0.0%
## RCT_design = No Intervention 0.0%
##
## Test for subgroup differences (random effects model):
## Q d.f. p-value
## Between groups 20.13 1 < 0.0001
##
## Details of meta-analysis methods:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-Profile method for confidence interval of tau^2 and tau
## - Calculation of I^2 based on Q
## - Hartung-Knapp adjustment for random effects model (df = 19)
## - Logit transformation
## - Clopper-Pearson confidence interval for individual studies
forest(
m_prop_design,
xlab = "Proportion with episiotomy",
prediction = TRUE,
print.tau2 = TRUE,
backtransf = TRUE
)
Using a random-effects single-arm proportion meta-analysis with logit transformation, inverse-variance pooling, REML estimation of between-study variance, and Hartung-Knapp confidence intervals, the pooled proportion of episiotomy in the HAase arm was 27.7% (95% CI 25.0% to 30.7%). Heterogeneity was I2 = 18.6%, tau2 = 0.0175, Q-test p = 0.227. This estimate describes the event proportion among HAase participants and should not be interpreted as a comparative treatment effect.
metaprop() for single-arm proportions.method = "Inverse" when using PLOGIT
with REML, DL, or SJ in this teaching workflow.