pacman::p_load(tidyverse,
meta,
gtsummary,
janitor)
theme_set(theme_minimal())
Load the data
df <- read_csv("2021_aravena_systematic_review_data_sinus.csv")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## .default = col_character(),
## mean_c = col_double(),
## sd_c = col_double(),
## n_c = col_double(),
## mean_e = col_double(),
## sd_e = col_double(),
## n_e = col_double(),
## `Riss_Bias(0High_7Low)` = col_double(),
## event.c = col_double(),
## n.c = col_double(),
## event.e = col_double(),
## n.e = col_double()
## )
## ℹ Use `spec()` for the full column specifications.
df <- df %>%
janitor::clean_names() %>%
rename(risk_bias = riss_bias_0high_7low)
Extract the year
df <- df %>%
mutate(year = as.numeric(str_extract(author_year, "[0-9]+"))) %>%
relocate(year, .after = author_year)
df_cont <- df %>%
select(author_year:n_e,
year,
risk_bias)
df_bin <- df %>%
select(author_year,
time,
event_c:n_e_2,
year,
risk_bias)
df %>%
pivot_longer(c(n_c, n_e),
names_to = "sample",
values_to = "sample_values") %>%
mutate(sample = recode(sample, n_c = "Control", n_e = "Intervention")) %>%
ggplot(aes(x = sample_values)) +
geom_histogram(bins = 5) +
facet_grid(sample ~ .) +
labs(title = "Sample size per groups, Cont",
y = "Count",
x = "Sample size")
df %>%
pivot_longer(c(n_c_2, n_e_2),
names_to = "sample",
values_to = "sample_values") %>%
mutate(sample = recode(sample, n_c_2 = "Control", n_e_2 = "Intervention")) %>%
ggplot(aes(x = sample_values)) +
geom_histogram(bins = 5) +
facet_grid(sample ~ .) +
facet_grid(sample ~ .) +
labs(title = "Sample size per groups, Bin",
y = "Count",
x = "Sample size")
mean difference (argument sm = “MD”)
m_cont <- meta::metacont(n_e,
mean_e,
sd_e,
n_c,
mean_c,
sd_c,
studlab = author_year,
data = df_cont,
sm = "SMD")
m_cont
## SMD 95%-CI %W(fixed) %W(random)
## Borges F., et al. (2011) 0.1239 [-0.5925; 0.8404] 15.9 13.7
## Fouad W., et al. (2018) 5.6721 [ 3.5236; 7.8206] 1.8 8.4
## Khaled H., et al. (2019) 1.5935 [ 0.5581; 2.6288] 7.6 12.6
## Trinh H., et al. (2019) 5.1838 [ 3.5744; 6.7932] 3.1 10.4
## Millán A., et al. (2020) 0.3334 [-0.2309; 0.8977] 25.6 14.2
## Ranaan J., et al. (2018) 1.3817 [ 0.6654; 2.0981] 15.9 13.7
## Nedir R., et al. (2017) 0.8603 [-0.0912; 1.8118] 9.0 12.9
## Quian S., et al. (2020) -0.0527 [-0.6734; 0.5680] 21.1 14.0
##
## Number of studies combined: k = 8
##
## SMD 95%-CI z p-value
## Fixed effect model 0.7750 [0.4895; 1.0604] 5.32 < 0.0001
## Random effects model 1.5713 [0.6351; 2.5076] 3.29 0.0010
##
## Quantifying heterogeneity:
## tau^2 = 1.5268 [1.1016; 13.4936]; tau = 1.2356 [1.0496; 3.6734];
## I^2 = 89.4% [81.6%; 94.0%]; H = 3.08 [2.33; 4.07]
##
## Test of heterogeneity:
## Q d.f. p-value
## 66.33 7 < 0.0001
##
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
## - Jackson method for confidence interval of tau^2 and tau
## - Hedges' g (bias corrected standardised mean difference)
forest(m_cont,
leftcols = c("author_year", "n_c", "n_e") ,
leftlabs = c("Author (Year)", "n (control)", "n (experimental)"),
sortvar = TE,
comb.random = TRUE,
comb.fixed = FALSE,
test.overall.random = TRUE,
label.right = "Favours experimental",
label.left = "Favours control",
predict = TRUE)
Verificar que pasa con Trihn y Fuad
MA sin esos dos
df_cont %>%
filter(author_year != "Fouad W., et al. (2018)") %>%
filter(author_year != "Trinh H., et al. (2019)") %>%
# el ma
meta::metacont(n_e,
mean_e,
sd_e,
n_c,
mean_c,
sd_c,
studlab = author_year,
data = .,
sm = "SMD")
## SMD 95%-CI %W(fixed) %W(random)
## Borges F., et al. (2011) 0.1239 [-0.5925; 0.8404] 16.7 17.3
## Khaled H., et al. (2019) 1.5935 [ 0.5581; 2.6288] 8.0 12.8
## Millán A., et al. (2020) 0.3334 [-0.2309; 0.8977] 26.9 19.8
## Ranaan J., et al. (2018) 1.3817 [ 0.6654; 2.0981] 16.7 17.3
## Nedir R., et al. (2017) 0.8603 [-0.0912; 1.8118] 9.5 13.9
## Quian S., et al. (2020) -0.0527 [-0.6734; 0.5680] 22.2 18.9
##
## Number of studies combined: k = 6
##
## SMD 95%-CI z p-value
## Fixed effect model 0.5382 [0.2455; 0.8309] 3.60 0.0003
## Random effects model 0.6405 [0.1174; 1.1635] 2.40 0.0164
##
## Quantifying heterogeneity:
## tau^2 = 0.2772 [0.0224; 2.5556]; tau = 0.5265 [0.1497; 1.5986];
## I^2 = 66.7% [20.7%; 86.0%]; H = 1.73 [1.12; 2.68]
##
## Test of heterogeneity:
## Q d.f. p-value
## 15.03 5 0.0102
##
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
## - Jackson method for confidence interval of tau^2 and tau
## - Hedges' g (bias corrected standardised mean difference)
Esos dos le dan toda la heterogeneidad, hay que explicar porque esos dos muestran que la intervención es efectiva, mientras que el resto no
df_bin %>%
metabin(event_e,
n_e_2,
event_c,
n_c_2,
data = .,
sm = "OR",
method = "Inverse",
studlab = author_year)
## OR 95%-CI %W(fixed) %W(random)
## Borges F., et al. (2011) 3.3529 [0.1307; 86.0329] 14.3 14.3
## Fouad W., et al. (2018) NA 0.0 0.0
## Khaled H., et al. (2019) NA 0.0 0.0
## Trinh H., et al. (2019) NA 0.0 0.0
## Millán A., et al. (2020) NA 0.0 0.0
## Ranaan J., et al. (2018) 1.1176 [0.1492; 8.3734] 37.1 37.1
## Nedir R., et al. (2017) 0.5625 [0.0465; 6.8057] 24.2 24.2
## Quian S., et al. (2020) 0.5278 [0.0440; 6.3372] 24.4 24.4
##
## Number of studies combined: k = 4
##
## OR 95%-CI z p-value
## Fixed effect model 0.9224 [0.2704; 3.1459] -0.13 0.8973
## Random effects model 0.9224 [0.2704; 3.1459] -0.13 0.8973
##
## Quantifying heterogeneity:
## tau^2 = 0 [0.0000; 7.0901]; tau = 0 [0.0000; 2.6627];
## I^2 = 0.0% [0.0%; 53.5%]; H = 1.00 [1.00; 1.47]
##
## Test of heterogeneity:
## Q d.f. p-value
## 0.99 3 0.8042
##
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
## - Jackson method for confidence interval of tau^2 and tau
## - Continuity correction of 0.5 in studies with zero cell frequencies
df_bin %>%
metabin(event_e,
n_e_2,
event_c,
n_c_2,
data = .,
sm = "OR",
method = "Inverse",
studlab = author_year) %>%
forest(.,
leftcols = c("author_year", "n_c_2", "n_e_2") ,
leftlabs = c("Author (Year)", "n (control)", "n (experimental)"),
sortvar = TE,
comb.random = TRUE,
comb.fixed = FALSE,
test.overall.random = TRUE,
label.right = "Favours experimental",
label.left = "Favours control",
predict = TRUE)