1. Load Required Packages

2. Data Set 1: GSHt Blood and Cognitive Measures

2.1 Create Meta-Analysis Objects

# Panel A: "GSHt Blood and Global Cognitive Score"
dat1A <- data.frame(
  author = c("Nucifora et al. 2017", "Coughlin et al. 2021", "Gares-Caballer et al. 2022"),
  r = c(0.245, 0.57, 0.34),
  n = c(51, 24, 30)
)
meta1A <- metacor(r, n, data = dat1A, studlab = author,
                  common = FALSE,  # was comb.fixed=FALSE
                  random = TRUE,   # was comb.random=TRUE
                  method.tau = "REML", 
                  sm = "ZCOR")

meta1A
## Number of studies: k = 3
## Number of observations: o = 105
## 
##                         COR           95%-CI    z p-value
## Random effects model 0.3553 [0.1574; 0.5258] 3.42  0.0006
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 = 0.0037 [0.0000; 1.6395]; tau = 0.0608 [0.0000; 1.2804]
##  I^2 = 13.5% [0.0%; 91.0%]; H = 1.08 [1.00; 3.33]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  2.31    2  0.3146
## 
## 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
## - Fisher's z transformation of correlations
# Panel B: "GSHt Blood and Executive Function"
dat1B <- data.frame(
  author = c("Martinez-Cengotitobengoa et al. 2012", "Gonzalez-Liencres et al. 2014",
             "Coughlin et al. 2021", "Gares-Caballer et al. 2022"),
  r = c(0.072, 0.171, 0.45, 0.4),
  n = c(28, 41, 24, 30)
)
meta1B <- metacor(r, n, data = dat1B, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")

meta1B
## Number of studies: k = 4
## Number of observations: o = 123
## 
##                         COR           95%-CI    z p-value
## Random effects model 0.2637 [0.0839; 0.4269] 2.85  0.0044
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 < 0.0001 [0.0000; 0.5017]; tau = 0.0007 [0.0000; 0.7083]
##  I^2 = 0.0% [0.0%; 84.7%]; H = 1.00 [1.00; 2.56]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  2.94    3  0.4003
## 
## 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
## - Fisher's z transformation of correlations

2.2 Generate Forest Plots

Forest Plot 1A

png("temp_Forest_1A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta1A,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_1A.png")
Forest Plot 1A: GSHt Blood and Global Cognitive Score

Forest Plot 1A: GSHt Blood and Global Cognitive Score

Forest Plot 1B

png("temp_Forest_1B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta1B,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_1B.png")
Forest Plot 1B: GSHt Blood and Executive Function

Forest Plot 1B: GSHt Blood and Executive Function

2.3 Generate Funnel Plots

Funnel Plot 1A

png("temp_Funnel_1A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta1A,
       main = "GSHt Blood and Global Cognitive Score",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_1A.png")
Funnel Plot 1A: GSHt Blood and Global Cognitive Score

Funnel Plot 1A: GSHt Blood and Global Cognitive Score

Funnel Plot 1B

png("temp_Funnel_1B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta1B,
       main = "GSHt Blood and Executive Function",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_1B.png")
Funnel Plot 1B: GSHt Blood and Executive Function

Funnel Plot 1B: GSHt Blood and Executive Function


3. Data Set 2: GSHt Blood and Total Symptoms

3.1 Create Meta-Analysis Objects

dat2A <- data.frame(
  author = c("Ballesteros et al. 2013", "Tsai et al. 2013", "Tuncel et al. 2015", 
             "Nucifora et al. 2017", "Hendouei et al. 2018", "Hendouei et al. 2018*", 
             "Hendouei et al. 2018**", "Kizilpinar et al. 2023", "Lin et al. 2023", 
             "Lin et al. 2023"),
  r = c(0.15, -0.413, -0.106, -0.311, -0.1, -0.1, 0.1, 0.016, 0.068, -0.047),
  n = c(29, 41, 18, 51, 34, 34, 32, 26, 92, 219)
)
meta2A <- metacor(r, n, data = dat2A, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")
meta2A
## Number of studies: k = 10
## Number of observations: o = 576
## 
##                          COR            95%-CI     z p-value
## Random effects model -0.0769 [-0.1871; 0.0353] -1.34  0.1788
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 = 0.0094 [0.0000; 0.0866]; tau = 0.0969 [0.0000; 0.2943]
##  I^2 = 27.3% [0.0%; 65.1%]; H = 1.17 [1.00; 1.69]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  12.39    9  0.1923
## 
## 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
## - Fisher's z transformation of correlations
dat2B <- data.frame(
  author = c("Raffa et al. 2011", "Tsai et al. 2013", "Fathy et al. 2015", 
             "Nucifora et al. 2017", "Hendouei et al. 2018", "Hendouei et al. 2018*", 
             "Hendouei et al. 2018**", "Chien et al. 2020", "Chien et al. 2020*", 
             "Coughlin et al. 2021", "Gares-Caballer et al. 2022", 
             "Kizilpinar et al. 2023", "Lin et al. 2023", "Lin et al. 2023"),
  r = c(-0.02, -0.349, -0.805, -0.203, 0.07, -0.1, -0.1, 0, -0.17, -0.06, 0.01, 
        -0.038, -0.027, -0.055),
  n = c(23, 41, 30, 51, 34, 34, 32, 43, 19, 24, 30, 26, 92, 219)
)
meta2B <- metacor(r, n, data = dat2B, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")
meta2B
## Number of studies: k = 14
## Number of observations: o = 698
## 
##                          COR             95%-CI     z p-value
## Random effects model -0.1485 [-0.2876; -0.0034] -2.00  0.0450
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 = 0.0477 [0.0112; 0.1917]; tau = 0.2184 [0.1060; 0.4378]
##  I^2 = 61.3% [30.6%; 78.4%]; H = 1.61 [1.20; 2.15]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  33.55   13  0.0014
## 
## 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
## - Fisher's z transformation of correlations

3.2 Generate Forest Plots

Forest Plot 2A

png("temp_Forest_2A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta2A,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_2A.png")
Forest Plot 2A: GSHt Blood and Total Symptoms

Forest Plot 2A: GSHt Blood and Total Symptoms

Forest Plot 2B

png("temp_Forest_2B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta2B,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_2B.png")
Forest Plot 2B: GSHt Blood and Negative Symptoms

Forest Plot 2B: GSHt Blood and Negative Symptoms

3.3 Generate Funnel Plots

Funnel Plot 2A

png("temp_Funnel_2A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta2A,
       main = "GSHt Blood and Total Symptoms",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_2A.png")
Funnel Plot 2A: GSHt Blood and Total Symptoms

Funnel Plot 2A: GSHt Blood and Total Symptoms

Funnel Plot 2B

png("temp_Funnel_2B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta2B,
       main = "GSHt Blood and Negative Symptoms",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_2B.png")
Funnel Plot 2B: GSHt Blood and Negative Symptoms

Funnel Plot 2B: GSHt Blood and Negative Symptoms


4. Data Set 3: GHS Brain and Symptom Measures

4.1 Create Meta-Analysis Objects

dat3A <- data.frame(
  author = c("Matsuzawa et al. 2008", "Reyes-Madrigal et al. 2019", "Iwata et al. 2021",
             "Lesh et al. 2021", "Ravanfar et al. 2022"),
  r = c(-0.41, 0.42, -0.08, -0.293, -0.286),
  n = c(20, 10, 67, 33, 12)
)
meta3A <- metacor(r, n, data = dat3A, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")
meta3A
## Number of studies: k = 5
## Number of observations: o = 142
## 
##                          COR            95%-CI     z p-value
## Random effects model -0.1662 [-0.3331; 0.0108] -1.84  0.0655
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 = 0.0013 [0.0000; 0.8861]; tau = 0.0359 [0.0000; 0.9414]
##  I^2 = 20.7% [0.0%; 66.4%]; H = 1.12 [1.00; 1.72]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  5.05    4  0.2827
## 
## 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
## - Fisher's z transformation of correlations
dat3B <- data.frame(
  author = c("Matsuzawa et al. 2008", "Reyes-Madrigal et al. 2019", "Coughlin et al. 2021",
             "Iwata et al. 2021", "Lesh et al. 2021", "Ravanfar et al. 2022"),
  r = c(-0.6, 0.36, 0.21, 0.15, -0.01, -0.348),
  n = c(20, 10, 16, 67, 33, 12)
)
meta3B <- metacor(r, n, data = dat3B, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")
meta3B
## Number of studies: k = 6
## Number of observations: o = 158
## 
##                          COR            95%-CI     z p-value
## Random effects model -0.0553 [-0.3428; 0.2417] -0.36  0.7193
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 = 0.0814 [0.0000; 0.8864]; tau = 0.2852 [0.0000; 0.9415]
##  I^2 = 59.7% [1.0%; 83.6%]; H = 1.58 [1.00; 2.47]
## 
## Test of heterogeneity:
##      Q d.f. p-value
##  12.40    5  0.0296
## 
## 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
## - Fisher's z transformation of correlations

4.2 Generate Forest Plots

Forest Plot 3A

png("temp_Forest_3A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta3A,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_3A.png")
Forest Plot 3A: GHS Brain and Total Symptoms

Forest Plot 3A: GHS Brain and Total Symptoms

Forest Plot 3B

png("temp_Forest_3B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta3B,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_3B.png")
Forest Plot 3B: GHS Brain and Negative Symptoms

Forest Plot 3B: GHS Brain and Negative Symptoms

4.3 Generate Funnel Plots

Funnel Plot 3A

png("temp_Funnel_3A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta3A,
       main = "GHS Brain and Total Symptoms",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_3A.png")
Funnel Plot 3A: GHS Brain and Total Symptoms

Funnel Plot 3A: GHS Brain and Total Symptoms

Funnel Plot 3B

png("temp_Funnel_3B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta3B,
       main = "GHS Brain and Negative Symptoms",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_3B.png")
Funnel Plot 3B: GHS Brain and Negative Symptoms

Funnel Plot 3B: GHS Brain and Negative Symptoms


5. Data Set 4: GSHt Blood and Global Cognitive Score / Clinical Global Impression

5.1 Create Meta-Analysis Objects

dat4A <- data.frame(
  author = c("Nucifora et al. 2017", "Coughlin et al. 2021", "Gares-Caballer et al. 2022"),
  r = c(0.245, 0.57, 0.34),
  n = c(51, 24, 30)
)
meta4A <- metacor(r, n, data = dat4A, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")
meta4A
## Number of studies: k = 3
## Number of observations: o = 105
## 
##                         COR           95%-CI    z p-value
## Random effects model 0.3553 [0.1574; 0.5258] 3.42  0.0006
## 
## Quantifying heterogeneity (with 95%-CIs):
##  tau^2 = 0.0037 [0.0000; 1.6395]; tau = 0.0608 [0.0000; 1.2804]
##  I^2 = 13.5% [0.0%; 91.0%]; H = 1.08 [1.00; 3.33]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  2.31    2  0.3146
## 
## 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
## - Fisher's z transformation of correlations
dat4B <- data.frame(
  author = c("Raffa et al. 2009", "Gares-Caballer et al. 2022"),
  r = c(-0.28, -0.08),
  n = c(88, 30)
)
meta4B <- metacor(r, n, data = dat4B, studlab = author,
                  common = FALSE,
                  random = TRUE,
                  method.tau = "REML", 
                  sm = "ZCOR")
meta4B
## Number of studies: k = 2
## Number of observations: o = 118
## 
##                          COR             95%-CI     z p-value
## Random effects model -0.2333 [-0.3993; -0.0524] -2.52  0.0119
## 
## Quantifying heterogeneity:
##  tau^2 = 0; tau = 0; I^2 = 0.0%; H = 1.00
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  0.88    1  0.3476
## 
## Details of meta-analysis methods:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Calculation of I^2 based on Q
## - Fisher's z transformation of correlations

5.2 Generate Forest Plots

Forest Plot 4A

png("temp_Forest_4A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta4A,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_4A.png")
Forest Plot 4A: GSHt Blood and Global Cognitive Score

Forest Plot 4A: GSHt Blood and Global Cognitive Score

Forest Plot 4B

png("temp_Forest_4B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5.5, 5, 3, 2) + 0.1)
forest(meta4B,
       xlab        = "Effect Size (Fisher's Z)",
       hetstat.pos = "outside",
       cex         = 0.9,
       cex.lab     = 1.0,
       cex.axis    = 0.9,
       fs.hetstat  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Forest_4B.png")
Forest Plot 4B: GSHt Blood and Clinical Global Impression

Forest Plot 4B: GSHt Blood and Clinical Global Impression

5.3 Generate Funnel Plots

Funnel Plot 4A

png("temp_Funnel_4A.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta4A,
       main = "GSHt Blood and Global Cognitive Score",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_4A.png")
Funnel Plot 4A: GSHt Blood and Global Cognitive Score

Funnel Plot 4A: GSHt Blood and Global Cognitive Score

Funnel Plot 4B

png("temp_Funnel_4B.png", width = 8, height = 5.5, units = "in", res = 300)
par(mar = c(5, 5, 3, 2) + 0.1)
funnel(meta4B,
       main = "GSHt Blood and Clinical Global Impression",
       xlab = "Effect Size (Fisher's Z)",
       cex  = 0.9)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("temp_Funnel_4B.png")
Funnel Plot 4B: GSHt Blood and Clinical Global Impression

Funnel Plot 4B: GSHt Blood and Clinical Global Impression