Packages

pacman::p_load(tidyverse, 
               meta, 
               gtsummary, 
               janitor)
theme_set(theme_minimal())

Dataset and cleaning

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)

Create two datasets: cont and bin

Dataset continuous

df_cont <- df %>%
  select(author_year:n_e,
         year, 
         risk_bias)

Dataset binary

df_bin <- df %>% 
  select(author_year, 
         time, 
         event_c:n_e_2, 
         year, 
         risk_bias)

EDA

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")

Continuous metanalysis

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

Binary metanalysis

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)