CHANGES:

  • Included a 2020 study
  • Added all analysis concerning parent ratings
  • Refactored some variable names for clarity (selfrep -> self, rating - > clinician)

1 Prepare environment and data

knitr::opts_chunk$set(echo = TRUE)
options(encoding = 'UTF-8')

library(tidyverse)
library(readxl)
library(metafor)
library(metaviz)
library(dmetar)
library(janitor)
library(citr)
library(osfr)
library(PRISMAstatement)
# Authenticate using a PAT
osf_pat <- read_lines("osf_pat.txt")
osf_auth(token = osf_pat)

# Retrieve data to data folder
osf_file <- 
  osf_retrieve_file("bqy2p") %>%
  osf_download(path = "data/",
               conflicts = "overwrite",
               progress = TRUE)

2 Analysis

cbt <-
  read_excel(here::here(osf_file$local_path), na = c("", "N/A")) %>%
  clean_names() %>% 
  # Get the female ratio
  mutate(female = map_dbl(female_n_total_n, ~eval(parse(text = .x))),
         sessions_completed_totalsessions = str_replace_all(sessions_completed_totalsessions, ",", "."),
         completed_sessions = map_dbl(sessions_completed_totalsessions, 
                                      ~eval(parse(text = .x))))

The meta-analyses models were recalculated using REML estimation. Using this only slghtly changes the results, but IMO it is a more appropriate and defensible choice Viechtbauer (2005).

# Model for the children self-report MA
self_df <- 
  cbt %>% 
  filter(outcome == "children") 

mod_self <-  
  rma(yi = hedges_g, 
      sei = hedges_se, 
      data = self_df, 
      method = "REML")

mod_self
## 
## Random-Effects Model (k = 19; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0883 (SE = 0.0534)
## tau (square root of estimated tau^2 value):      0.2971
## I^2 (total heterogeneity / total variability):   57.52%
## H^2 (total variability / sampling variability):  2.35
## 
## Test for Heterogeneity:
## Q(df = 18) = 45.2691, p-val = 0.0004
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.3635  0.0930  3.9099  <.0001  0.1813  0.5457  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Model for the clinician rating MA
clinician_df <- 
  cbt %>%
  filter(outcome == "clinician")

mod_clinician <-
  rma(yi = hedges_g,
      sei = hedges_se, 
      data = clinician_df,
      method = "REML")

mod_clinician
## 
## Random-Effects Model (k = 14; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 1.0029 (SE = 0.4352)
## tau (square root of estimated tau^2 value):      1.0014
## I^2 (total heterogeneity / total variability):   93.19%
## H^2 (total variability / sampling variability):  14.69
## 
## Test for Heterogeneity:
## Q(df = 13) = 55.8252, p-val < .0001
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.9766  0.2823  3.4589  0.0005  0.4232  1.5300  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Model for the clinician rating MA
parent_df <- 
  cbt %>%
  filter(outcome == "parental")

mod_parent <-
  rma(yi = hedges_g,
      sei = hedges_se, 
      data = parent_df,
      method = "REML")

mod_parent
## 
## Random-Effects Model (k = 16; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0911 (SE = 0.0601)
## tau (square root of estimated tau^2 value):      0.3018
## I^2 (total heterogeneity / total variability):   56.51%
## H^2 (total variability / sampling variability):  2.30
## 
## Test for Heterogeneity:
## Q(df = 15) = 33.9346, p-val = 0.0035
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.4990  0.1022  4.8839  <.0001  0.2987  0.6992  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

2.1 Outlier detection

Studies that has a confidence interval completely outside of the aggregated effect’s CI should be considered outliers. We identified the Cobham et al. 2012 study as an outlier for both the self-report and the clincian rated outcomes, so we removed this study, and recalculated the meta-analyses. No outliers in the parental rating studies.

# Self-report
find.outliers(mod_self)
## Identified outliers (REML) 
## ------------------------- 
## "1" 
##  
## Results with outliers removed 
## ----------------------------- 
## 
## Random-Effects Model (k = 18; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0182 (SE = 0.0271)
## tau (square root of estimated tau^2 value):      0.1349
## I^2 (total heterogeneity / total variability):   22.53%
## H^2 (total variability / sampling variability):  1.29
## 
## Test for Heterogeneity:
## Q(df = 17) = 21.4357, p-val = 0.2074
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.2779  0.0683  4.0718  <.0001  0.1441  0.4117  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Clinician rating
find.outliers(mod_clinician)
## Identified outliers (REML) 
## ------------------------- 
## "1" 
##  
## Results with outliers removed 
## ----------------------------- 
## 
## Random-Effects Model (k = 13; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0039 (SE = 0.0280)
## tau (square root of estimated tau^2 value):      0.0628
## I^2 (total heterogeneity / total variability):   5.47%
## H^2 (total variability / sampling variability):  1.06
## 
## Test for Heterogeneity:
## Q(df = 12) = 10.6055, p-val = 0.5630
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.6555  0.0743  8.8247  <.0001  0.5099  0.8011  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Clinician rating
find.outliers(mod_parent)
## No outliers detected (REML).
## No outliers detected (REML).Identified outliers (REML) 
## ------------------------- 
## "" 
##  
## Results with outliers removed 
## ----------------------------- 
## 
## Random-Effects Model (k = 16; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0911 (SE = 0.0601)
## tau (square root of estimated tau^2 value):      0.3018
## I^2 (total heterogeneity / total variability):   56.51%
## H^2 (total variability / sampling variability):  2.30
## 
## Test for Heterogeneity:
## Q(df = 15) = 33.9346, p-val = 0.0035
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.4990  0.1022  4.8839  <.0001  0.2987  0.6992  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Remove outliers from self-report data
self_df <- 
  cbt %>% 
  filter(outcome == "children") %>% 
  slice(-1)

# Corrected model for self-report data
mod_self <-  
  rma(yi = hedges_g, 
           sei = hedges_se, 
           data = self_df, 
           method = "REML")

find.outliers(mod_self)
## No outliers detected (REML).
## No outliers detected (REML).Identified outliers (REML) 
## ------------------------- 
## "" 
##  
## Results with outliers removed 
## ----------------------------- 
## 
## Random-Effects Model (k = 18; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0182 (SE = 0.0271)
## tau (square root of estimated tau^2 value):      0.1349
## I^2 (total heterogeneity / total variability):   22.53%
## H^2 (total variability / sampling variability):  1.29
## 
## Test for Heterogeneity:
## Q(df = 17) = 21.4357, p-val = 0.2074
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.2779  0.0683  4.0718  <.0001  0.1441  0.4117  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# No more outliers!
# Remove outliers from clinician-rating data
clinician_df <-   
  cbt %>% 
  filter(outcome == "clinician") %>% 
  slice(-1)

# Model for the clinician rating MA
mod_clinician <-
  rma(yi = hedges_g,
      sei = hedges_se, 
      data = clinician_df,
      method = "REML")

# No further outliers
find.outliers(mod_clinician)
## No outliers detected (REML).
## No outliers detected (REML).Identified outliers (REML) 
## ------------------------- 
## "" 
##  
## Results with outliers removed 
## ----------------------------- 
## 
## Random-Effects Model (k = 13; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0039 (SE = 0.0280)
## tau (square root of estimated tau^2 value):      0.0628
## I^2 (total heterogeneity / total variability):   5.47%
## H^2 (total variability / sampling variability):  1.06
## 
## Test for Heterogeneity:
## Q(df = 12) = 10.6055, p-val = 0.5630
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.6555  0.0743  8.8247  <.0001  0.5099  0.8011  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

2.2 Final models (without outliers)

mod_self
## 
## Random-Effects Model (k = 18; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0182 (SE = 0.0271)
## tau (square root of estimated tau^2 value):      0.1349
## I^2 (total heterogeneity / total variability):   22.53%
## H^2 (total variability / sampling variability):  1.29
## 
## Test for Heterogeneity:
## Q(df = 17) = 21.4357, p-val = 0.2074
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.2779  0.0683  4.0718  <.0001  0.1441  0.4117  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod_clinician
## 
## Random-Effects Model (k = 13; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0039 (SE = 0.0280)
## tau (square root of estimated tau^2 value):      0.0628
## I^2 (total heterogeneity / total variability):   5.47%
## H^2 (total variability / sampling variability):  1.06
## 
## Test for Heterogeneity:
## Q(df = 12) = 10.6055, p-val = 0.5630
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.6555  0.0743  8.8247  <.0001  0.5099  0.8011  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod_parent
## 
## Random-Effects Model (k = 16; tau^2 estimator: REML)
## 
## tau^2 (estimated amount of total heterogeneity): 0.0911 (SE = 0.0601)
## tau (square root of estimated tau^2 value):      0.3018
## I^2 (total heterogeneity / total variability):   56.51%
## H^2 (total variability / sampling variability):  2.30
## 
## Test for Heterogeneity:
## Q(df = 15) = 33.9346, p-val = 0.0035
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.4990  0.1022  4.8839  <.0001  0.2987  0.6992  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

3 Forest plots

3.1 Self-report

# Create tables that will be added to the forest plots
# Self-rating
self_table <-
  self_df %>% 
  select(Study = study_name, N = sample_size_total)

self_summary <- 
  self_table %>% 
  group_by(name = "Aggregated effect") %>% 
  summarise(N = sum(N))

# Clinician rating
clinician_table <-
  clinician_df %>% 
  select(Study = study_name, N = sample_size_total)

clinician_summary <- 
  clinician_table %>% 
  group_by(name = "Aggregated effect") %>% 
  summarise(N = sum(N))

# Parental rating
parent_table <-
  parent_df %>% 
  select(Study = study_name, N = sample_size_total)

parent_summary <- 
  parent_table %>% 
  group_by(name = "Aggregated effect") %>% 
  summarise(N = sum(N))

3.2 Self-report

viz_forest(mod_self, 
           study_table = self_table,
           text_size = 4, 
           annotate_CI = TRUE, 
           xlab = "Hedges's g", 
           summary_table = self_summary)

3.3 Clinician rating

viz_forest(mod_clinician, 
           study_table = clinician_table,
           text_size = 3.5, 
           xlab = "Hedges'g", 
           summary_table = clinician_summary,
           annotate_CI = TRUE)

3.4 Parental rating

viz_forest(mod_parent, 
           study_table = parent_table,
           text_size = 3.5, 
           xlab = "Hedges'g", 
           summary_table = parent_summary,
           annotate_CI = TRUE)

4 Funnel plots

4.1 Self-report

As there seems to be some publication or small study bias, we can try to correct for that. Self-report, clinician-rating, and parent-rating models were corrected by 4, 4, and 3 TAF studies, respectively.

All models remained significant after trim-and-fill imputed studies. Also, the if we compare the overall effect size with TAF studies included, the effects remain similar.

# trimandfill tails for the first model, while it work in the funnel plot 
trimfill(self_df$hedges_g,
         self_df$hedges_se,
         ma.fixed = FALSE,
         method.tau = "REML")
##                               95%-CI %W(random)
## 1           0.5637 [-0.0419; 1.1693]        3.7
## 2           0.2169 [-0.5216; 0.9555]        2.7
## 3           1.0350 [ 0.2088; 1.8611]        2.2
## 4           0.2646 [-0.2109; 0.7402]        5.3
## 5           0.6222 [-0.0012; 1.2455]        3.5
## 6           0.6803 [ 0.1031; 1.2575]        4.0
## 7           0.1739 [-0.3308; 0.6785]        4.9
## 8           0.3480 [-0.1579; 0.8539]        4.8
## 9           0.4094 [ 0.0309; 0.7879]        7.0
## 10          0.1461 [-0.3523; 0.6444]        5.0
## 11          0.5486 [ 0.1346; 0.9626]        6.3
## 12          0.4547 [-0.0396; 0.9489]        5.0
## 13         -0.0400 [-0.4411; 0.3611]        6.6
## 14         -0.1424 [-0.6022; 0.3173]        5.5
## 15          0.1750 [-0.3870; 0.7370]        4.2
## 16          0.0161 [-0.2623; 0.2945]        9.6
## 17          0.5854 [-0.0648; 1.2356]        3.3
## 18         -0.1011 [-0.7576; 0.5555]        3.3
## Filled: 17 -0.1789 [-0.8291; 0.4713]        3.3
## Filled: 5  -0.2157 [-0.8390; 0.4077]        3.5
## Filled: 6  -0.2738 [-0.8510; 0.3034]        4.0
## Filled: 3  -0.6284 [-1.4546; 0.1978]        2.2
## 
## Number of studies combined: k = 22 (with 4 added studies)
## 
##                                       95%-CI    z p-value
## Random effects model 0.2078 [0.0756; 0.3400] 3.08  0.0021
## 
## Quantifying heterogeneity:
##  tau^2 = 0.0272 [0.0000; 0.1908]; tau = 0.1650 [0.0000; 0.4368]
##  I^2 = 34.2% [0.0%; 60.8%]; H = 1.23 [1.00; 1.60]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  31.92   21  0.0597
## 
## Details on meta-analytical method:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-profile method for confidence interval of tau^2 and tau
## - Trim-and-fill method to adjust for funnel plot asymmetry
# Egger's test
regtest(mod_self, model = "lm")
## 
## Regression Test for Funnel Plot Asymmetry
## 
## Model:     weighted regression with multiplicative dispersion
## Predictor: standard error
## 
## Test for Funnel Plot Asymmetry: t = 2.2691, df = 16, p = 0.0374
## Limit Estimate (as sei -> 0):   b = -0.2304 (CI: -0.7041, 0.2434)
viz_funnel(mod_self, 
           method = "RE",
           sig_contours = TRUE, 
           contours = TRUE,
           trim_and_fill = TRUE,
           text_size = 4)

4.2 Clinician rating

trimfill(clinician_df$hedges_g,
         clinician_df$hedges_se,
         ma.fixed = FALSE,
         method.tau = "REML")
##                              95%-CI %W(random)
## 1          1.0013 [ 0.3704; 1.6322]        4.4
## 2          1.0559 [ 0.2276; 1.8842]        2.7
## 3          0.6849 [ 0.1975; 1.1723]        6.8
## 4          0.7249 [ 0.1183; 1.3316]        4.7
## 5          0.6749 [ 0.1096; 1.2402]        5.3
## 6          0.5496 [ 0.0363; 1.0629]        6.2
## 7          0.6856 [ 0.1985; 1.1728]        6.8
## 8          0.6435 [ 0.2240; 1.0630]        8.6
## 9          0.7200 [ 0.2307; 1.2092]        6.8
## 10         0.2278 [-0.1527; 0.6084]       10.0
## 11         0.8613 [ 0.4328; 1.2899]        8.4
## 12         0.4001 [-0.1045; 0.9047]        6.4
## 13         1.0844 [ 0.4018; 1.7671]        3.8
## Filled: 11 0.2610 [-0.1676; 0.6895]        8.4
## Filled: 1  0.1210 [-0.5099; 0.7519]        4.4
## Filled: 2  0.0664 [-0.7619; 0.8947]        2.7
## Filled: 13 0.0378 [-0.6448; 0.7205]        3.8
## 
## Number of studies combined: k = 17 (with 4 added studies)
## 
##                                       95%-CI    z  p-value
## Random effects model 0.5651 [0.4251; 0.7051] 7.91 < 0.0001
## 
## Quantifying heterogeneity:
##  tau^2 = 0.0133 [0.0000; 0.1574]; tau = 0.1152 [0.0000; 0.3967]
##  I^2 = 18.3% [0.0%; 54.0%]; H = 1.11 [1.00; 1.47]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  19.59   16  0.2391
## 
## Details on meta-analytical method:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-profile method for confidence interval of tau^2 and tau
## - Trim-and-fill method to adjust for funnel plot asymmetry
# Egger's test
regtest(mod_clinician, model = "lm")
## 
## Regression Test for Funnel Plot Asymmetry
## 
## Model:     weighted regression with multiplicative dispersion
## Predictor: standard error
## 
## Test for Funnel Plot Asymmetry: t = 2.9029, df = 11, p = 0.0144
## Limit Estimate (as sei -> 0):   b = -0.1342 (CI: -0.7419, 0.4734)
viz_funnel(mod_clinician, 
           method = "RE",
           sig_contours = TRUE, 
           trim_and_fill = TRUE,
           contours = TRUE,
           text_size = 4)

4.3 Parental rating

trimfill(parent_df$hedges_g,
         parent_df$hedges_se,
         ma.fixed = FALSE,
         method.tau = "REML")
##                              95%-CI %W(random)
## 1          0.7797 [ 0.0564; 1.5030]        4.3
## 2          0.5402 [-0.0644; 1.1448]        5.0
## 3          1.2164 [ 0.3707; 2.0622]        3.6
## 4          0.6610 [ 0.1746; 1.1475]        5.8
## 5          1.0911 [ 0.4376; 1.7447]        4.7
## 6          1.0903 [ 0.4885; 1.6922]        5.0
## 7          0.3045 [-0.2478; 0.8567]        5.4
## 8          0.4022 [-0.1048; 0.9093]        5.7
## 9          0.3547 [-0.0229; 0.7322]        6.7
## 10         0.1359 [-0.3623; 0.6342]        5.8
## 11         0.6435 [ 0.2240; 1.0630]        6.3
## 12         0.7525 [ 0.2619; 1.2432]        5.8
## 13        -0.0008 [-0.4019; 0.4002]        6.5
## 14         0.0000 [-0.4592; 0.4592]        6.0
## 15        -0.2129 [-0.7755; 0.3496]        5.3
## 16         0.9951 [ 0.3680; 1.6222]        4.9
## Filled: 6 -0.3160 [-0.9179; 0.2858]        5.0
## Filled: 5 -0.3168 [-0.9703; 0.3368]        4.7
## Filled: 3 -0.4421 [-1.2879; 0.4036]        3.6
## 
## Number of studies combined: k = 19 (with 3 added studies)
## 
##                                       95%-CI    z p-value
## Random effects model 0.3940 [0.1821; 0.6059] 3.64  0.0003
## 
## Quantifying heterogeneity:
##  tau^2 = 0.1384 [0.0484; 0.4801]; tau = 0.3721 [0.2201; 0.6929]
##  I^2 = 62.7% [38.9%; 77.3%]; H = 1.64 [1.28; 2.10]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  48.32   18  0.0001
## 
## Details on meta-analytical method:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-profile method for confidence interval of tau^2 and tau
## - Trim-and-fill method to adjust for funnel plot asymmetry
# Egger's test
regtest(mod_parent, model = "lm")
## 
## Regression Test for Funnel Plot Asymmetry
## 
## Model:     weighted regression with multiplicative dispersion
## Predictor: standard error
## 
## Test for Funnel Plot Asymmetry: t = 2.4229, df = 14, p = 0.0295
## Limit Estimate (as sei -> 0):   b = -0.5600 (CI: -1.4761, 0.3561)
viz_funnel(mod_parent, 
           method = "RE",
           sig_contours = TRUE, 
           trim_and_fill = TRUE,
           contours = TRUE,
           text_size = 4)

5 Moderation analyses

5.1 Self-report

# Intervention characteristics
## Family or youth focus (focus)
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~focus) %>% 
  anova()
## 
## Test of Moderators (coefficients 2:4):
## QM(df = 3) = 1.5512, p-val = 0.6705
## Therapist involvement (therapist_involvement)
rma.uni(hedges_g, sei = hedges_se, data = self_df, 
        mods = ~therapist_involvement) %>% 
  anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.1722, p-val = 0.6782
## Place of delivery
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~placeof_delivery) %>% anova()
## 
## Test of Moderators (coefficients 2:4):
## QM(df = 3) = 3.5285, p-val = 0.3171
## Average length
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~completed_sessions)  %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0079, p-val = 0.9293
# Study characteristics
## Study quality
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~risk_of_bias) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 5.3805, p-val = 0.0679
## Anxiety measure
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~anxiety_measure) %>%  anova()
## 
## Test of Moderators (coefficients 2:4):
## QM(df = 3) = 1.3576, p-val = 0.7155
## Intended length
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~intervention_length_n_of_modules) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.9302, p-val = 0.3348
# Participant characteristics
## Age
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~avg_age_pop) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 1.6154, p-val = 0.2037
## Female ratio
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~female) %>% anova()
## Warning: Studies with NAs omitted from model fitting.
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 1.0564, p-val = 0.3040
## Clinical status
rma.uni(hedges_g, sei = hedges_se, data = self_df, mods = ~clinical_status) %>% anova()
## 
## Test of Moderators (coefficients 2:6):
## QM(df = 5) = 2.1704, p-val = 0.8251

5.2 Clinician rating

## Method
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~method) %>% anova()
## 
## Test of Moderators (coefficients 2:8):
## QM(df = 7) = 8.3156, p-val = 0.3056
## Family or youth focus (focus)
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~focus) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 0.9824, p-val = 0.6119
## Therapist involvement (therapist_involvement)
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~therapist_involvement) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.9109, p-val = 0.3399
## Clinical status
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~clinical_status) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 1.1721, p-val = 0.5565
## Place of delivery
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~placeof_delivery) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.5389, p-val = 0.4629
## Intended length
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~intervention_length_n_of_modules) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0208, p-val = 0.8854
## Study quality
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~risk_of_bias) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 0.9367, p-val = 0.6260
## Clinician blinding
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~clinician_blinding) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0716, p-val = 0.7891
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~intervention_length_n_of_modules) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0208, p-val = 0.8854
## Average length
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~completed_sessions) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.3264, p-val = 0.5678
## Age
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~avg_age_pop) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0003, p-val = 0.9870
## Female ratio
rma.uni(hedges_g, sei = hedges_se, data = clinician_df, mods = ~female) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.1728, p-val = 0.6776

5.3 Parent rating

## Method is significant!
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~method) %>% anova()
## 
## Test of Moderators (coefficients 2:11):
## QM(df = 10) = 19.3381, p-val = 0.0362
## Family or youth focus (focus)
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~focus) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 3.2097, p-val = 0.2009
## Therapist involvement (therapist_involvement)
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~therapist_involvement) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 0.4098, p-val = 0.8147
## Clinical status
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~clinical_status) %>% anova()
## 
## Test of Moderators (coefficients 2:5):
## QM(df = 4) = 0.2913, p-val = 0.9904
## Place of delivery
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~placeof_delivery) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 1.9987, p-val = 0.3681
## Intended length
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~intervention_length_n_of_modules) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.4620, p-val = 0.4967
## Study quality
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~risk_of_bias) %>% anova()
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 1.4511, p-val = 0.4841
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~intervention_length_n_of_modules) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.4620, p-val = 0.4967
## Average length
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~completed_sessions) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.1490, p-val = 0.6995
## Age
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~avg_age_pop) %>% anova()
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.5834, p-val = 0.4450
## Female ratio
rma.uni(hedges_g, sei = hedges_se, data = parent_df, mods = ~female) %>% anova()
## Warning: Studies with NAs omitted from model fitting.
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0862, p-val = 0.7691

5.4 Dropout analysis

5.5 Dropouts and intervention length association

5.6 All dropouts as moderator

6 Flowcart

WIP

References

Viechtbauer, W. (2005). Bias and Efficiency of Meta-Analytic Variance Estimators in the Random-Effects Model. Journal of Educational and Behavioral Statistics, 30(3), 261–293. https://doi.org/10.3102/10769986030003261