This document demonstrates how you can do meta-analyses on randomised controlled trails using the {meta}, {metafor},{dmetar} packages in R. Further documentation for the packages can be found in Harrer et al.
Study details can be found her:
PROSPERO: https://www.crd.york.ac.uk/prospero/display_record.php?RecordID=64681
Final publication:
Liljehult J, Christensen T, Molsted S, Overgaard D, Mesot Liljehult M, Møller T. Effect and efficacy of lifestyle interventions as secondary prevention. Acta Neurol Scand. 2020 Oct;142(4):299-313. doi: 10.1111/ane.13308. Epub 2020 Jul 15. PMID: 32620044; PMCID: PMC7540464.
https://PubMed.ncbi.nlm.nih.gov/32620044/ or
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7540464/
Litteratur:
Harrer, M., Cuijpers, P., Furukawa, T.A., & Ebert, D.D. (2021). Doing Meta-Analysis with R: A Hands-On Guide. Boca Raton, FL and London: Chapmann & Hall/CRC Press. ISBN 978-0-367-61007-4. https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/
Following libraries are used:
{dplyr}, {meta}, {metafor}, {dmetar}, {robvis}, {ggplot2}
library(dplyr)
library(meta)
library(metafor)
library(dmetar)
library(robvis)
library(ggplot2)
Meta-analysis of the effect of behavioural interventions on systolic blood pressure on patients with stroke or TIA
behavMeta <- data.frame(
#Systolic blood pressure
domain = rep("SBP",14),
author = c("Adie et al 2010", "Barker-Collo et al 2015", "Boss et al 2014",
"Chanruengvanich et al 2006", "Cheng et al 2018", "Faulkner et al 2014","Holzemer et al 2011",
"Hornnes et al 2011", "Irewall et al 2015", "Joubert et al 2006",
"Joubert et al 2006", "Kirk et al 2014", "Kono et al 2013", "McManus et al 2009"),
n.e = c(29,172,10,31,204,30,12,145,241,35,91,12,35,49),
est.e = c(142,137.41,120,141.19,132.3,129,138.7,139.4,131.9,132.34,128.5,131.92,122.1,143),
sd.e = c(19.3,18.79,12.6,16.77,20.5,12,31,21.3,15.7,0,13.7,15.2,15.9,18.8),
n.c = c(27,172,10,31,200,30,15,158,243,45,95,12,35,53),
est.c = c(142.4,138.42,127,137.94,136.1,138,144.7,142.4,135,136.58,134.5,131.92,138.9,139),
sd.c = c(17.2,17.69,21.3,22.74,20.8,15,30.2,22.2,17.5,0,19.4,18.1,13.8,21.6),
year = c(2010,2015,2014,2006,2018,2014,2011,2011,2015,2006,2009,2014,2013,2009),
recruitment = factor(c(2,2,1,9,3,2,1,9,2,1,1,2,1,3),
levels = c(1,2,3,9), labels = c("Early","Medium","Late","Unclear")),
intlength = factor(c(2,2,1,1,3,1,1,2,3,3,3,1,2,2),
levels = c(1,2,3), labels = c("Short","Medium","Long")),
training = factor(c(2,2,1,2,2,1,2,2,2,2,2,1,1,2),
levels = c(1,2), labels = c("Yes","No")),
theory = factor(c(1,1,1,1,1,1,1,2,2,2,2,2,2,2),
levels = c(1,2), labels = c("Yes","No")),
support = factor(c(2,2,2,1,2,2,2,2,2,1,1,2,2,2),
levels = c(1,2), labels = c("Yes","No")),
population = factor(c(1,3,1,1,2,1,3,2,2,2,2,1,1,3), levels = c(1,2,3), labels = c("Minor/TIA","All","Unknown"))
)
behavMeta
m.behav.sbp <- behavMeta %>%
filter(domain == "SBP") %>%
metacont(n.e = n.e,
mean.e = est.e,
sd.e = sd.e,
n.c = n.c,
mean.c = est.c,
sd.c = sd.c,
studlab = author,
#data = behavMeta,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Systolic Blood Pressure")
Warning in metacont(., n.e = n.e, mean.e = est.e, sd.e = sd.e, n.c = n.c, :
Note, studies with non-positive values for sd.e or sd.c get no weight in meta-analysis.
m.behav.sbp
Review: Systolic Blood Pressure
MD 95%-CI %W(random)
Adie et al 2010 -0.4000 [ -9.9620; 9.1620] 5.7
Barker-Collo et al 2015 -1.0100 [ -4.8667; 2.8467] 11.9
Boss et al 2014 -7.0000 [-22.3385; 8.3385] 2.9
Chanruengvanich et al 2006 3.2500 [ -6.6963; 13.1963] 5.4
Cheng et al 2018 -3.8000 [ -7.8278; 0.2278] 11.7
Faulkner et al 2014 -9.0000 [-15.8739; -2.1261] 8.1
Holzemer et al 2011 -6.0000 [-29.2639; 17.2639] 1.4
Hornnes et al 2011 -3.0000 [ -7.8992; 1.8992] 10.5
Irewall et al 2015 -3.1000 [ -6.0615; -0.1385] 13.0
Joubert et al 2006 -4.2400 0.0
Joubert et al 2006 -6.0000 [-10.8106; -1.1894] 10.6
Kirk et al 2014 0.0000 [-13.3730; 13.3730] 3.6
Kono et al 2013 -16.8000 [-23.7749; -9.8251] 8.0
McManus et al 2009 4.0000 [ -3.8438; 11.8438] 7.1
Number of studies combined: k = 13
Number of observations: o = 2222
MD 95%-CI z p-value
Random effects model -3.8489 [-6.7383; -0.9596] -2.61 0.0090
Quantifying heterogeneity:
tau^2 = 14.4022 [0.9895; 64.6695]; tau = 3.7950 [0.9947; 8.0417]
I^2 = 52.7% [11.1%; 74.8%]; H = 1.45 [1.06; 1.99]
Test of heterogeneity:
Q d.f. p-value
25.36 12 0.0132
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
The warning means that a study (Joubert et al 2006) has been omitted from the meta-analysis because no SD was stated. A mean difference has been calculated, but no confidence interval, and the study is not included in the random effects model (weight = 0%).
Forest plot
forest.meta(m.behav.sbp, # Model to be plotted
sortvar = author, # The studies are sorted alphabetically by author
predict = FALSE, # Prediction interval is omitted from the plot
print.tau2 = FALSE, # Tau is omitted from the text
colgap = "3mm", # Regulates the space between the columns
leftlabs = # Column labels
c("Study", "mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = # Defines the content of the columns on the left
c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","TE","ci"),
digits.sd = 2, # Number of digits after SD, default is 4
col.square = "blue", # Colour of the squares
col.square.lines = "blue", # Colour of the square lines
col.diamond = "black", # Colour of the summary diamond
layout = "RevMan5" # Using the Review Manager 5 layout
)
#' Note: In markdown the forest plot is not re-sized to fit the window and in most
#' cases the sides will be cut off. This can be prevented by forcing the size of the
#' plot by adding fig.width and fig.height arguments to the chuck code.
Sub-group analysis is done by making an updated model and adding a strata variable with the argument {byvar}. The strata variable must be a factor variable for this to work and adding labels is highly recommended.
m.behav.sbp2 <- update.meta(m.behav.sbp, # name of model
byvar = population, # stratifying variable
tau.common = FALSE)
m.behav.sbp2
Review: Systolic Blood Pressure
MD 95%-CI %W(random) population
Adie et al 2010 -0.4000 [ -9.9620; 9.1620] 5.7 Minor/TIA
Barker-Collo et al 2015 -1.0100 [ -4.8667; 2.8467] 11.9 Unknown
Boss et al 2014 -7.0000 [-22.3385; 8.3385] 2.9 Minor/TIA
Chanruengvanich et al 2006 3.2500 [ -6.6963; 13.1963] 5.4 Minor/TIA
Cheng et al 2018 -3.8000 [ -7.8278; 0.2278] 11.7 All
Faulkner et al 2014 -9.0000 [-15.8739; -2.1261] 8.1 Minor/TIA
Holzemer et al 2011 -6.0000 [-29.2639; 17.2639] 1.4 Unknown
Hornnes et al 2011 -3.0000 [ -7.8992; 1.8992] 10.5 All
Irewall et al 2015 -3.1000 [ -6.0615; -0.1385] 13.0 All
Joubert et al 2006 -4.2400 0.0 All
Joubert et al 2006 -6.0000 [-10.8106; -1.1894] 10.6 All
Kirk et al 2014 0.0000 [-13.3730; 13.3730] 3.6 Minor/TIA
Kono et al 2013 -16.8000 [-23.7749; -9.8251] 8.0 Minor/TIA
McManus et al 2009 4.0000 [ -3.8438; 11.8438] 7.1 Unknown
Number of studies combined: k = 13
Number of observations: o = 2222
MD 95%-CI z p-value
Random effects model -3.8489 [-6.7383; -0.9596] -2.61 0.0090
Quantifying heterogeneity:
tau^2 = 14.4022 [0.9895; 64.6695]; tau = 3.7950 [0.9947; 8.0417]
I^2 = 52.7% [11.1%; 74.8%]; H = 1.45 [1.06; 1.99]
Test of heterogeneity:
Q d.f. p-value
25.36 12 0.0132
Results for subgroups (random effects model):
k MD 95%-CI tau^2 tau Q I^2
population = Minor/TIA 6 -5.6853 [-12.3393; 0.9686] 42.6628 6.5317 14.83 66.3%
population = All 4 -3.7306 [ -5.6898; -1.7715] 0 0 1.12 0.0%
population = Unknown 3 -0.1154 [ -3.6853; 3.4545] 0.4110 0.6411 1.51 0.0%
Test for subgroup differences (random effects model):
Q d.f. p-value
Between groups 3.66 2 0.1603
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
Forest plot
#' Drawing a forest plot from a sub-group model
forest.sbp2 <- forest.meta(m.behav.sbp2,
sortvar = population,
colgap = "3mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5"
)
m.behav.sbp.recriut <- update.meta(m.behav.sbp, # name of model
byvar = recruitment, # stratifying variable
tau.common = FALSE)
m.behav.sbp.recriut
Review: Systolic Blood Pressure
MD 95%-CI %W(random) recruitment
Adie et al 2010 -0.4000 [ -9.9620; 9.1620] 5.7 Medium
Barker-Collo et al 2015 -1.0100 [ -4.8667; 2.8467] 11.9 Medium
Boss et al 2014 -7.0000 [-22.3385; 8.3385] 2.9 Early
Chanruengvanich et al 2006 3.2500 [ -6.6963; 13.1963] 5.4 Unclear
Cheng et al 2018 -3.8000 [ -7.8278; 0.2278] 11.7 Late
Faulkner et al 2014 -9.0000 [-15.8739; -2.1261] 8.1 Medium
Holzemer et al 2011 -6.0000 [-29.2639; 17.2639] 1.4 Early
Hornnes et al 2011 -3.0000 [ -7.8992; 1.8992] 10.5 Unclear
Irewall et al 2015 -3.1000 [ -6.0615; -0.1385] 13.0 Medium
Joubert et al 2006 -4.2400 0.0 Early
Joubert et al 2006 -6.0000 [-10.8106; -1.1894] 10.6 Early
Kirk et al 2014 0.0000 [-13.3730; 13.3730] 3.6 Medium
Kono et al 2013 -16.8000 [-23.7749; -9.8251] 8.0 Early
McManus et al 2009 4.0000 [ -3.8438; 11.8438] 7.1 Late
Number of studies combined: k = 13
Number of observations: o = 2222
MD 95%-CI z p-value
Random effects model -3.8489 [-6.7383; -0.9596] -2.61 0.0090
Quantifying heterogeneity:
tau^2 = 14.4022 [0.9895; 64.6695]; tau = 3.7950 [0.9947; 8.0417]
I^2 = 52.7% [11.1%; 74.8%]; H = 1.45 [1.06; 1.99]
Test of heterogeneity:
Q d.f. p-value
25.36 12 0.0132
Results for subgroups (random effects model):
k MD 95%-CI tau^2 tau Q I^2
recruitment = Early 4 -9.9053 [-16.9802; -2.8303] 24.8239 4.9824 6.41 53.2%
recruitment = Medium 5 -2.8145 [ -4.9517; -0.6774] 0 0 4.40 9.1%
recruitment = Late 2 -0.6560 [ -8.1548; 6.8429] 20.3003 4.5056 3.01 66.7%
recruitment = Unclear 2 -1.4354 [ -6.7421; 3.8713] 3.5307 1.8790 1.22 18.1%
Test for subgroup differences (random effects model):
Q d.f. p-value
Between groups 4.40 3 0.2216
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
forest.meta(m.behav.sbp.recriut,
sortvar = recruitment,
colgap = "3mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
m.behav.sbp.length <- update.meta(m.behav.sbp, # name of model
byvar = intlength, # stratifying variable
tau.common = FALSE)
m.behav.sbp.length
Review: Systolic Blood Pressure
MD 95%-CI %W(random) intlength
Adie et al 2010 -0.4000 [ -9.9620; 9.1620] 5.7 Medium
Barker-Collo et al 2015 -1.0100 [ -4.8667; 2.8467] 11.9 Medium
Boss et al 2014 -7.0000 [-22.3385; 8.3385] 2.9 Short
Chanruengvanich et al 2006 3.2500 [ -6.6963; 13.1963] 5.4 Short
Cheng et al 2018 -3.8000 [ -7.8278; 0.2278] 11.7 Long
Faulkner et al 2014 -9.0000 [-15.8739; -2.1261] 8.1 Short
Holzemer et al 2011 -6.0000 [-29.2639; 17.2639] 1.4 Short
Hornnes et al 2011 -3.0000 [ -7.8992; 1.8992] 10.5 Medium
Irewall et al 2015 -3.1000 [ -6.0615; -0.1385] 13.0 Long
Joubert et al 2006 -4.2400 0.0 Long
Joubert et al 2006 -6.0000 [-10.8106; -1.1894] 10.6 Long
Kirk et al 2014 0.0000 [-13.3730; 13.3730] 3.6 Short
Kono et al 2013 -16.8000 [-23.7749; -9.8251] 8.0 Medium
McManus et al 2009 4.0000 [ -3.8438; 11.8438] 7.1 Medium
Number of studies combined: k = 13
Number of observations: o = 2222
MD 95%-CI t p-value
Random effects model -3.8489 [-7.0505; -0.6473] -2.62 0.0224
Quantifying heterogeneity:
tau^2 = 14.4022 [0.9895; 64.6695]; tau = 3.7950 [0.9947; 8.0417]
I^2 = 52.7% [11.1%; 74.8%]; H = 1.45 [1.06; 1.99]
Test of heterogeneity:
Q d.f. p-value
25.36 12 0.0132
Results for subgroups (random effects model):
k MD 95%-CI tau^2 tau Q I^2
intlength = Short 5 -3.9265 [-11.1294; 3.2764] 14.7935 3.8462 4.53 11.7%
intlength = Medium 5 -3.5206 [-13.1754; 6.1341] 47.3062 6.8780 19.40 79.4%
intlength = Long 3 -3.8697 [ -7.2108; -0.5286] 0 0 1.01 0.0%
Test for subgroup differences (random effects model):
Q d.f. p-value
Between groups 0.01 2 0.9948
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
- Hartung-Knapp adjustment for random effects model
forest.meta(m.behav.sbp.length,
sortvar = intlength,
colgap = "3mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
m.behav.sbp.training <- update.meta(m.behav.sbp, # name of model
byvar = training, # stratifying variable
tau.common = FALSE)
m.behav.sbp.training
Review: Systolic Blood Pressure
MD 95%-CI %W(random) training
Adie et al 2010 -0.4000 [ -9.9620; 9.1620] 5.7 No
Barker-Collo et al 2015 -1.0100 [ -4.8667; 2.8467] 11.9 No
Boss et al 2014 -7.0000 [-22.3385; 8.3385] 2.9 Yes
Chanruengvanich et al 2006 3.2500 [ -6.6963; 13.1963] 5.4 No
Cheng et al 2018 -3.8000 [ -7.8278; 0.2278] 11.7 No
Faulkner et al 2014 -9.0000 [-15.8739; -2.1261] 8.1 Yes
Holzemer et al 2011 -6.0000 [-29.2639; 17.2639] 1.4 No
Hornnes et al 2011 -3.0000 [ -7.8992; 1.8992] 10.5 No
Irewall et al 2015 -3.1000 [ -6.0615; -0.1385] 13.0 No
Joubert et al 2006 -4.2400 0.0 No
Joubert et al 2006 -6.0000 [-10.8106; -1.1894] 10.6 No
Kirk et al 2014 0.0000 [-13.3730; 13.3730] 3.6 Yes
Kono et al 2013 -16.8000 [-23.7749; -9.8251] 8.0 Yes
McManus et al 2009 4.0000 [ -3.8438; 11.8438] 7.1 No
Number of studies combined: k = 13
Number of observations: o = 2222
MD 95%-CI t p-value
Random effects model -3.8489 [-7.0505; -0.6473] -2.62 0.0224
Quantifying heterogeneity:
tau^2 = 14.4022 [0.9895; 64.6695]; tau = 3.7950 [0.9947; 8.0417]
I^2 = 52.7% [11.1%; 74.8%]; H = 1.45 [1.06; 1.99]
Test of heterogeneity:
Q d.f. p-value
25.36 12 0.0132
Results for subgroups (random effects model):
k MD 95%-CI tau^2 tau Q I^2
training = Yes 4 -9.7748 [-20.6051; 1.0556] 23.6442 4.8625 5.84 48.6%
training = No 9 -2.6095 [ -4.4753; -0.7437] 0 0 7.38 0.0%
Test for subgroup differences (random effects model):
Q d.f. p-value
Between groups 4.20 1 0.0405
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
- Hartung-Knapp adjustment for random effects model
forest.meta(m.behav.sbp.training,
sortvar = training,
colgap = "3mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
m.behav.sbp.theory <- update.meta(m.behav.sbp, # name of model
byvar = theory, # stratifying variable
tau.common = FALSE)
m.behav.sbp.theory
Review: Systolic Blood Pressure
MD 95%-CI %W(random) theory
Adie et al 2010 -0.4000 [ -9.9620; 9.1620] 5.7 Yes
Barker-Collo et al 2015 -1.0100 [ -4.8667; 2.8467] 11.9 Yes
Boss et al 2014 -7.0000 [-22.3385; 8.3385] 2.9 Yes
Chanruengvanich et al 2006 3.2500 [ -6.6963; 13.1963] 5.4 Yes
Cheng et al 2018 -3.8000 [ -7.8278; 0.2278] 11.7 Yes
Faulkner et al 2014 -9.0000 [-15.8739; -2.1261] 8.1 Yes
Holzemer et al 2011 -6.0000 [-29.2639; 17.2639] 1.4 Yes
Hornnes et al 2011 -3.0000 [ -7.8992; 1.8992] 10.5 No
Irewall et al 2015 -3.1000 [ -6.0615; -0.1385] 13.0 No
Joubert et al 2006 -4.2400 0.0 No
Joubert et al 2006 -6.0000 [-10.8106; -1.1894] 10.6 No
Kirk et al 2014 0.0000 [-13.3730; 13.3730] 3.6 No
Kono et al 2013 -16.8000 [-23.7749; -9.8251] 8.0 No
McManus et al 2009 4.0000 [ -3.8438; 11.8438] 7.1 No
Number of studies combined: k = 13
Number of observations: o = 2222
MD 95%-CI z p-value
Random effects model -3.8489 [-6.7383; -0.9596] -2.61 0.0090
Quantifying heterogeneity:
tau^2 = 14.4022 [0.9895; 64.6695]; tau = 3.7950 [0.9947; 8.0417]
I^2 = 52.7% [11.1%; 74.8%]; H = 1.45 [1.06; 1.99]
Test of heterogeneity:
Q d.f. p-value
25.36 12 0.0132
Results for subgroups (random effects model):
k MD 95%-CI tau^2 tau Q I^2
theory = Yes 7 -2.9330 [-5.6982; -0.1679] 1.9386 1.3923 6.21 3.4%
theory = No 6 -4.5002 [-9.8356; 0.8352] 32.8014 5.7273 18.41 72.8%
Test for subgroup differences (random effects model):
Q d.f. p-value
Between groups 0.26 1 0.6093
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
#' Drawing a forest plot from a sub-group model
forest.meta(m.behav.sbp.theory,
sortvar = population,
colgap = "3mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5"
)
Meta-analysis of the number of participants who obtained their goal-blood pressure (binomial)
Meta-analysis of binomial data are made using the function {metabin()} For this the model needs the total number of participants in each group and the number events in each group.
m.behav.hyper <- behavMeta %>%
filter(domain == "hypertension") %>%
metabin(event.e = est.e,
n.e = n.e,
event.c = est.c,
n.c = n.c,
studlab = author,
sm = "RR",
method = "MH",
MH.exact = TRUE,
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "PM",
hakn = F,
title = "Goal blood pressure")
m.behav.hyper
Review: Goal blood pressure
RR 95%-CI %W(random)
Allen et al 0.9464 [0.7957; 1.1257] 22.5
Boss et al 1.1250 [0.7752; 1.6327] 6.0
Cheng et al 1.1505 [0.9553; 1.3855] 20.2
Irewall et al 1.2056 [1.0489; 1.3856] 30.9
Joubert et al 1.1020 [0.7037; 1.7259] 4.2
Joubert et al 1.2981 [1.0481; 1.6076] 16.1
Number of studies combined: k = 6
Number of observations: o = 1546
Number of events: e = 908
RR 95%-CI z p-value
Random effects model 1.1354 [1.0334; 1.2475] 2.64 0.0082
Quantifying heterogeneity:
tau^2 = 0.0024 [0.0000; 0.0578]; tau = 0.0492 [0.0000; 0.2403]
I^2 = 22.9% [0.0%; 67.0%]; H = 1.14 [1.00; 1.74]
Test of heterogeneity:
Q d.f. p-value
6.49 5 0.2617
Details on meta-analytical method:
- Mantel-Haenszel method
- Paule-Mandel estimator for tau^2
- Q-profile method for confidence interval of tau^2 and tau
forest.meta(m.behav.hyper,
sortvar = author,
predict = FALSE, colgap = "5mm",
print.tau2 = FALSE,
leftlabs = c("Study","Events","n","Event", "n","Weight","Risk Ratio"),
leftcols = c("studlab","est.e","n.e","est.c","n.c","w.random","effect.ci"),
col.square = "blue",
col.diamond = "black",
layout = "RevMan5")
# diastolic blood pressure data
behavMeta <- behavMeta %>% add_row(
domain=c('DBP','DBP','DBP','DBP','DBP','DBP','DBP','DBP','DBP','DBP','DBP','DBP'),
author=c('Adie et al. 2010','Barker-Collo et al. 2015','Boss et al. 2014',
'Chanruengvanich et al. 2006','Faulkner et al. 2014','Holzemer et al. 2011',
'Hornnes et al. 2011','Irewall et al. 2015','Joubert et al. 2009','Kirk et al. 2014',
'Kono et al. 2013','McManus et al. 2009'),
year=c(2010,2015,2014,2006,2014,2011,2011,2015,2009,2014,2013,2009),
est.e=c(75.7,77.77,71.0,77.13,78.0,78.4,82.0,77.3,77.3,75.0,72.9,74.0),
sd.e=c(10.1,12.58,0.0,11.34,9.0,13.6,13.1,10.3,8.3,7.9,9.5,10.3),
n.e=c(29,163,10,31,27,12,145,241,91,12,34,49),
est.c=c(72.1,77.46,75.0,75.81,80.0,78.9,86.0,79.6,79.1,74.67,80.7,74.0),
sd.c=c(12.1,11.66,0.0,11.54,11.0,10.8,12.3,10.5,8.9,8.7,10.7,12.2),
n.c=c(27,165,10,31,24,15,158,243,95,12,34,53)
)
m.behav.dbp <- behavMeta %>%
filter(domain == "DBP") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = TRUE,
title = "Diastolic Blood Pressure")
Warning in metacont(., n.e = n.e, mean.e = est.e, sd.e = sd.e, n.c = n.c, :
Note, studies with non-positive values for sd.e or sd.c get no weight in meta-analysis.
m.behav.dbp
Review: Diastolic Blood Pressure
MD 95%-CI %W(random)
Adie et al. 2010 3.6000 [ -2.2603; 9.4603] 5.2
Barker-Collo et al. 2015 0.3100 [ -2.3158; 2.9358] 14.5
Boss et al. 2014 -4.0000 0.0
Chanruengvanich et al. 2006 1.3200 [ -4.3754; 7.0154] 5.5
Faulkner et al. 2014 -2.0000 [ -7.5580; 3.5580] 5.7
Holzemer et al. 2011 -0.5000 [ -9.9383; 8.9383] 2.3
Hornnes et al. 2011 -4.0000 [ -6.8679; -1.1321] 13.4
Irewall et al. 2015 -2.3000 [ -4.1531; -0.4469] 18.7
Joubert et al. 2009 -1.8000 [ -4.2721; 0.6721] 15.3
Kirk et al. 2014 0.3300 [ -6.3190; 6.9790] 4.3
Kono et al. 2013 -7.8000 [-12.6096; -2.9904] 7.1
McManus et al. 2009 0.0000 [ -4.3709; 4.3709] 8.1
Number of studies combined: k = 11
Number of observations: o = 1711
MD 95%-CI t p-value
Random effects model -1.5972 [-3.3808; 0.1864] -2.00 0.0740
Quantifying heterogeneity:
tau^2 = 2.2430 [0.0000; 21.1272]; tau = 1.4977 [0.0000; 4.5964]
I^2 = 39.5% [0.0%; 70.2%]; H = 1.29 [1.00; 1.83]
Test of heterogeneity:
Q d.f. p-value
16.53 10 0.0854
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
- Hartung-Knapp adjustment for random effects model
forest.meta(m.behav.dbp,
sortvar = author,colgap = "4mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# heart rate data
behavMeta <- behavMeta %>% add_row(
domain=c('HR','HR'),
author=c('Chanruengvanich et al. 2006','Faulkner et al. 2014'),
year=c(2006,2014),
est.e=c(67.71,64.0), sd.e=c(10.09,9.0), n.e=c(31,27),
est.c=c(71.42,66.0), sd.c=c(9.55,9.0), n.c=c(31,24)
)
m.behav.hr <- behavMeta %>%
filter(domain == "HR") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Heart rate")
m.behav.hr
Review: Heart rate
MD 95%-CI %W(random)
Chanruengvanich et al. 2006 -3.7100 [-8.6006; 1.1806] 50.6
Faulkner et al. 2014 -2.0000 [-6.9487; 2.9487] 49.4
Number of studies combined: k = 2
Number of observations: o = 113
MD 95%-CI z p-value
Random effects model -2.8651 [-6.3436; 0.6134] -1.61 0.1065
Quantifying heterogeneity:
tau^2 = 0; tau = 0; I^2 = 0.0%; H = 1.00
Test of heterogeneity:
Q d.f. p-value
0.23 1 0.6300
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
forest.meta(m.behav.hr,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5",
xlim = c(-15,15),
at = c(-10,-5,0,5,10),
)
# total cholesterol data
behavMeta <- behavMeta %>% add_row(
domain=c('TCHOL','TCHOL','TCHOL','TCHOL','TCHOL','TCHOL','TCHOL','TCHOL','TCHOL','TCHOL'),
author=c('Adie et al. 2010','Barker-Collo et al. 2015','Chanruengvanich et al. 2006',
'Faulkner et al. 2014','Holzemer et al. 2011','Joubert et al. 2006','Joubert et al. 2009',
'Kim et al. 2013','Kirk et al. 2014','McManus et al. 2009'),
year=c(2010,2015,2006,2014,2011,2006,2009,2013,2014,2009),
est.e=c(169.88,151.74,207.1,136.68,159.2,184.56,189.19,154.7,146.72,166.02),
sd.e=c(42.47,35.14,45.23,21.62,35.2,0.0,38.61,35.5,0.0,46.33),
n.e=c(29,157,31,27,12,32,91,18,12,49),
est.c=c(158.3,160.23,200.42,147.88,174.8,196.91,193.05,144.7,137.07,173.75),
sd.c=c(34.75,37.45,34.2,33.98,56.9,0.0,38.61,28.0,0.0,34.75),
n.c=c(27,159,31,24,15,33,95,18,12,53)
)
m.behav.tcol <- behavMeta %>%
filter(domain == "TCHOL") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = TRUE,
title = "Diastolic Blood Pressure")
Warning in metacont(., n.e = n.e, mean.e = est.e, sd.e = sd.e, n.c = n.c, :
Note, studies with non-positive values for sd.e or sd.c get no weight in meta-analysis.
m.behav.tcol
Review: Diastolic Blood Pressure
MD 95%-CI %W(random)
Adie et al. 2010 11.5800 [ -8.6866; 31.8466] 6.2
Barker-Collo et al. 2015 -8.4900 [-16.4961; -0.4839] 38.8
Chanruengvanich et al. 2006 6.6800 [-13.2811; 26.6411] 6.4
Faulkner et al. 2014 -11.2000 [-27.0530; 4.6530] 10.1
Holzemer et al. 2011 -15.6000 [-50.6112; 19.4112] 2.1
Joubert et al. 2006 -12.3500 0.0
Joubert et al. 2009 -3.8600 [-14.9600; 7.2400] 20.5
Kim et al. 2013 10.0000 [-10.8871; 30.8871] 5.9
Kirk et al. 2014 9.6500 0.0
McManus et al. 2009 -7.7300 [-23.7238; 8.2638] 10.0
Number of studies combined: k = 8
Number of observations: o = 925
MD 95%-CI t p-value
Random effects model -4.5820 [-10.9562; 1.7921] -1.70 0.1330
Quantifying heterogeneity:
tau^2 = 0.5592 [0.0000; >100.0000]; tau = 0.7478 [0.0000; >10.0000]
I^2 = 8.7% [0.0%; 70.4%]; H = 1.05 [1.00; 1.84]
Test of heterogeneity:
Q d.f. p-value
7.67 7 0.3628
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
- Hartung-Knapp adjustment for random effects model
forest.meta(m.behav.tcol,
sortvar = author,colgap = "4mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# HDL data
behavMeta <- behavMeta %>% add_row(
domain=c('HDL','HDL','HDL','HDL','HDL','HDL'),
author=c('Barker-Collo et al. 2015','Chanruengvanich et al. 2006','Faulkner et al. 2014',
'Holzemer et al. 2011','Kirk et al. 2014','Kono et al. 2013'),
year=c(2015,2006,2014,2011,2014,2013),
est.e=c(50.97,42.94,50.19,59.0,47.1,62.6), sd.e=c(21.62,10.93,20.85,24.8,11.58,17.2),
n.e=c(159,31,27,12,12,34),
est.c=c(50.58,42.84,52.51,50.6,42.47,56.3), sd.c=c(16.6,12.34,17.37,15.1,7.72,15.5),
n.c=c(161,31,24,15,12,34)
)
m.behav.hdl <- behavMeta %>%
filter(domain == "HDL") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = TRUE,
title = "Diastolic Blood Pressure")
m.behav.hdl
Review: Diastolic Blood Pressure
MD 95%-CI %W(random)
Barker-Collo et al. 2015 0.3900 [ -3.8370; 4.6170] 42.6
Chanruengvanich et al. 2006 0.1000 [ -5.7029; 5.9029] 22.6
Faulkner et al. 2014 -2.3200 [-12.8149; 8.1749] 6.9
Holzemer et al. 2011 8.4000 [ -7.5775; 24.3775] 3.0
Kirk et al. 2014 4.6300 [ -3.2444; 12.5044] 12.3
Kono et al. 2013 6.3000 [ -1.4826; 14.0826] 12.6
Number of studies combined: k = 6
Number of observations: o = 552
MD 95%-CI t p-value
Random effects model 1.6400 [-1.5039; 4.7838] 1.34 0.2376
Quantifying heterogeneity:
tau^2 = 0 [0.0000; 71.5168]; tau = 0 [0.0000; 8.4568]
I^2 = 0.0% [0.0%; 74.6%]; H = 1.00 [1.00; 1.99]
Test of heterogeneity:
Q d.f. p-value
3.77 5 0.5827
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
- Hartung-Knapp adjustment for random effects model
forest.meta(m.behav.hdl,
sortvar = author,colgap = "4mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# LDL data
behavMeta <- behavMeta %>% add_row(
domain=c('LDL','LDL','LDL','LDL','LDL'),
author=c('Boss et al. 2014','Cheng et al. 2018','Holzemer et al. 2011','Irewall et al. 2015',
'Kono et al. 2013'),
year=c(2014,2018,2011,2015,2013),
est.e=c(82.0,86.8,81.0,88.8,103.4), sd.e=c(0.0,38.9,21.8,27.0,24.8), n.e=c(10,204,12,241,34),
est.c=c(98.6,92.3,100.9,100.39,102.6), sd.c=c(0.0,41.1,55.8,34.7,20.8), n.c=c(10,200,15,243,34)
)
Standardised mean differences are used for this meta-analysis because the results are reported in different units.
m.behav.ldl <- behavMeta %>%
filter(domain == "LDL") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "SMD",
method.smd = "Hedge",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = FALSE,
title = "Low Density Lipoprotein")
Warning in metacont(., n.e = n.e, mean.e = est.e, sd.e = sd.e, n.c = n.c, :
Note, studies with non-positive values for sd.e or sd.c get no weight in meta-analysis.
m.behav.ldl
Review: Low Density Lipoprotein
SMD 95%-CI %W(random)
Boss et al. 2014 NA 0.0
Cheng et al. 2018 -0.1372 [-0.3325; 0.0580] 39.3
Holzemer et al. 2011 -0.4367 [-1.2062; 0.3328] 5.7
Irewall et al. 2015 -0.3720 [-0.5518; -0.1923] 41.9
Kono et al. 2013 0.0346 [-0.4408; 0.5100] 13.1
Number of studies combined: k = 4
Number of observations: o = 1003
SMD 95%-CI z p-value
Random effects model -0.2303 [-0.4219; -0.0386] -2.35 0.0185
Quantifying heterogeneity:
tau^2 = 0.0144 [0.0000; 0.5814]; tau = 0.1200 [0.0000; 0.7625]
I^2 = 35.5% [0.0%; 77.6%]; H = 1.25 [1.00; 2.11]
Test of heterogeneity:
Q d.f. p-value
4.65 3 0.1990
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
- Hedges' g (bias corrected standardised mean difference)
forest.meta(m.behav.ldl,
sortvar = author,colgap = "5mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","SMD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# Triglycerides data
behavMeta <- behavMeta %>% add_row(
domain=c('TRIG','TRIG'),
author=c('Holzemer et al. 2011','Kim et al. 2013'),
year=c(2011,2013),
est.e=c(96.2,140.0), sd.e=c(36.6,63.2), n.e=c(12,18),
est.c=c(116.3,145.5), sd.c=c(57.5,78.8), n.c=c(15,18)
)
m.behav.trig <- behavMeta %>%
filter(domain == "TRIG") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Triglycerides")
m.behav.trig
Review: Triglycerides
MD 95%-CI %W(random)
Holzemer et al. 2011 -20.1000 [-55.8148; 15.6148] 63.1
Kim et al. 2013 -5.5000 [-52.1649; 41.1649] 36.9
Number of studies combined: k = 2
Number of observations: o = 63
MD 95%-CI z p-value
Random effects model -14.7070 [-43.0685; 13.6546] -1.02 0.3095
Quantifying heterogeneity:
tau^2 = 0; tau = 0; I^2 = 0.0%; H = 1.00
Test of heterogeneity:
Q d.f. p-value
0.24 1 0.6263
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
forest.meta(m.behav.trig,
sortvar = author,colgap = "5mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# Fasting blood glucose data
behavMeta <- behavMeta %>% add_row(
domain=c('FGLUC','FGLUC'),
author=c('Faulkner et al. 2014','Kirk et al. 2014'),
year=c(2014,2014),
est.e=c(5.45,5.2), sd.e=c(1.22,0.4), n.e=c(27,12),
est.c=c(5.66,5.38), sd.c=c(1.03,0.4), n.c=c(24,12)
)
m.behav.fgluc <- behavMeta %>%
filter(domain == "FGLUC") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Fasting blood glucose")
m.behav.fgluc
Review: Fasting blood glucose
MD 95%-CI %W(random)
Faulkner et al. 2014 -0.2100 [-0.8277; 0.4077] 21.2
Kirk et al. 2014 -0.1800 [-0.5001; 0.1401] 78.8
Number of studies combined: k = 2
Number of observations: o = 75
MD 95%-CI z p-value
Random effects model -0.1863 [-0.4705; 0.0978] -1.29 0.1987
Quantifying heterogeneity:
tau^2 = 0; tau = 0; I^2 = 0.0%; H = 1.00
Test of heterogeneity:
Q d.f. p-value
0.01 1 0.9326
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
forest.meta(m.behav.fgluc,
sortvar = author,colgap = "5mm",
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# HbA1c data
behavMeta <- behavMeta %>% add_row(
domain=c('HBA','HBA'),
author=c('Kono et al. 2013','McManus et al. 2009'),
year=c(2013,2009),
est.e=c(5.87,8.0), sd.e=c(0.46,1.9), n.e=c(34,49),
est.c=c(5.98,7.5), sd.c=c(0.71,1.5), n.c=c(34,53)
)
m.behav.hba <- behavMeta %>%
filter(domain == "HBA") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "HbA1c")
m.behav.hba
Review: HbA1c
MD 95%-CI %W(random)
Kono et al. 2013 -0.1100 [-0.3944; 0.1744] 62.8
McManus et al. 2009 0.5000 [-0.1679; 1.1679] 37.2
Number of studies combined: k = 2
Number of observations: o = 170
MD 95%-CI z p-value
Random effects model 0.1171 [-0.4609; 0.6950] 0.40 0.6914
Quantifying heterogeneity:
tau^2 = 0.1175; tau = 0.3427; I^2 = 63.1% [0.0%; 91.5%]; H = 1.65 [1.00; 3.44]
Test of heterogeneity:
Q d.f. p-value
2.71 1 0.0996
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
forest.meta(m.behav.hba,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# chol/HDL ratio data
behavMeta <- behavMeta %>% add_row(
domain=c('THR','THR'),
author=c('Faulkner et al. 2014','Kirk et al. 2014'),
year=c(2014,2014),
est.e=c(3.13,3.49), sd.e=c(1.23,1.04), n.e=c(27,12),
est.c=c(3.02,3.82), sd.c=c(0.83,1.37), n.c=c(24,12)
)
m.behav.thr <- behavMeta %>%
filter(domain == "THR") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Total cholesterol/HDL ratio")
m.behav.thr
Review: Total cholesterol/HDL ratio
MD 95%-CI %W(random)
Faulkner et al. 2014 0.1100 [-0.4605; 0.6805] 74.4
Kirk et al. 2014 -0.3300 [-1.3032; 0.6432] 25.6
Number of studies combined: k = 2
Number of observations: o = 75
MD 95%-CI z p-value
Random effects model -0.0025 [-0.4947; 0.4896] -0.01 0.9919
Quantifying heterogeneity:
tau^2 = 0; tau = 0; I^2 = 0.0%; H = 1.00
Test of heterogeneity:
Q d.f. p-value
0.58 1 0.4446
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
forest.meta(m.behav.thr,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
layout = "RevMan5")
# BMI data
behavMeta <- behavMeta %>% add_row(
domain=c('BMI','BMI','BMI','BMI'),
author=c('Faulkner et al. 2014','Joubert et al. 2009','Kirk et al. 2014','Kono et al. 2013'),
year=c(2014,2009,2014,2013),
est.e=c(28.2,27.5,28.19,22.6), sd.e=c(4.8,5.4,0.0,2.69), n.e=c(27,91,12,34),
est.c=c(28.2,28.7,27.87,22.7), sd.c=c(4.5,6.3,0.0,2.72), n.c=c(24,95,12,34)
)
m.behav.bmi <- behavMeta %>%
filter(domain == "BMI") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Body Mass Index")
Warning in metacont(., n.e = n.e, mean.e = est.e, sd.e = sd.e, n.c = n.c, :
Note, studies with non-positive values for sd.e or sd.c get no weight in meta-analysis.
m.behav.bmi
Review: Body Mass Index
MD 95%-CI %W(random)
Faulkner et al. 2014 0.0000 [-2.5533; 2.5533] 13.8
Joubert et al. 2009 -1.2000 [-2.8840; 0.4840] 31.7
Kirk et al. 2014 0.3200 0.0
Kono et al. 2013 -0.1000 [-1.3859; 1.1859] 54.4
Number of studies combined: k = 3
Number of observations: o = 329
MD 95%-CI z p-value
Random effects model -0.4354 [-1.3842; 0.5134] -0.90 0.3685
Quantifying heterogeneity:
tau^2 = 0 [0.0000; 16.6161]; tau = 0 [0.0000; 4.0763]
I^2 = 0.0% [0.0%; 89.6%]; H = 1.00 [1.00; 3.10]
Test of heterogeneity:
Q d.f. p-value
1.16 2 0.5585
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
forest.meta(m.behav.bmi,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
xlim = c(-3,3), # By default the x-axis was only shown from -2 - 2
#at = c(-3,-2,-1,0,1,2,3),
layout = "RevMan5")
# Body weight data
behavMeta <- behavMeta %>% add_row(
domain=c('BW','BW','BW','BW'),
author=c('Adie et al. 2010','Faulkner et al. 2014','Flemming et al. 2013','Kono et al. 2013'),
year=c(2010,2014,2013,2013),
est.e=c(77.1,75.7,0.0,58.5), sd.e=c(11.9,16.0,0.0,8.69), n.e=c(29,27,0,34),
est.c=c(77.9,75.7,0.0,59.1), sd.c=c(17.2,14.0,0.0,10.5), n.c=c(27,24,0,34)
)
m.behav.weight <- behavMeta %>%
filter(domain == "BW") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = TRUE,
title = "Body weight")
Warning in metacont(., n.e = n.e, mean.e = est.e, sd.e = sd.e, n.c = n.c, :
Note, studies with non-positive values for sd.e or sd.c get no weight in meta-analysis.
m.behav.weight
Review: Body weight
MD 95%-CI %W(random)
Adie et al. 2010 -0.8000 [-8.6006; 7.0006] 20.8
Faulkner et al. 2014 0.0000 [-8.2337; 8.2337] 18.7
Flemming et al. 2013 0.0000 0.0
Kono et al. 2013 -0.6000 [-5.1813; 3.9813] 60.4
Number of studies combined: k = 3
Number of observations: o = 175
MD 95%-CI t p-value
Random effects model -0.5294 [-1.3385; 0.2797] -2.82 0.1064
Quantifying heterogeneity:
tau^2 = 0; tau = 0; I^2 = 0.0% [0.0%; 89.6%]; H = 1.00 [1.00; 3.10]
Test of heterogeneity:
Q d.f. p-value
0.02 2 0.9893
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
- Hartung-Knapp adjustment for random effects model
forest.meta(m.behav.weight,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
# by default the x-axis was only shown as (-5, 0, 5)
xlim = c(-10,10), at = c(-10,-5,0,5,10),
layout = "RevMan5")
# waist/hip ratio data
behavMeta <- behavMeta %>% add_row(
domain=c('WHR','WHR'),
author=c('Faulkner et al. 2014','Kirk et al. 2014'),
year=c(2014,2014),
est.e=c(0.95,0.96), sd.e=c(0.08,0.07), n.e=c(27,12),
est.c=c(0.95,0.97), sd.c=c(0.08,0.07), n.c=c(24,12)
)
m.behav.whr <- behavMeta %>%
filter(domain == "WHR") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Waist/hip ratio")
m.behav.whr
Review: Waist/hip ratio
MD 95%-CI %W(random)
Faulkner et al. 2014 0.0000 [-0.0440; 0.0440] 61.9
Kirk et al. 2014 -0.0100 [-0.0660; 0.0460] 38.1
Number of studies combined: k = 2
Number of observations: o = 75
MD 95%-CI z p-value
Random effects model -0.0038 [-0.0384; 0.0308] -0.22 0.8289
Quantifying heterogeneity:
tau^2 = 0; tau = 0; I^2 = 0.0%; H = 1.00
Test of heterogeneity:
Q d.f. p-value
0.08 1 0.7832
Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
forest.meta(m.behav.whr,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
# by default the x-axis labels were shown as (-0.06,-0.02,0,0.02,0.04,0.06) for ??? reason
at = c(-0.06,-0.03,0,0.03,0.06),
layout = "RevMan5")
# Mortality data
behavMeta <- behavMeta %>% add_row(
domain=c('MORS','MORS','MORS','MORS','MORS'),
author=c('Allen et al. 2002','Allen et al. 2009','Boysen et al. 2009',
'Faulkner et al. 2014','Peng et al. 2004'),
year=c(2002,2009,2009,2014,2004),
est.e=c(1,9,11,0,13), sd.e=c(NA,NA,NA,NA,NA), n.e=c(47,190,157,30,1795),
est.c=c(4,7,9,4,15), sd.c=c(NA,NA,NA,NA,NA), n.c=c(46,190,157,30,2026)
)
m.behav.mors <- behavMeta %>%
filter(domain == "MORS") %>%
metabin(event.e = est.e,
n.e = n.e,
event.c = est.c,
n.c = n.c,
studlab = author,
sm = "RR",
method = "MH",
MH.exact = TRUE,
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "PM",
hakn = F,
title = "All Cause Mortality")
m.behav.mors
Review: All Cause Mortality
RR 95%-CI %W(random)
Allen et al. 2002 0.2447 [0.0284; 2.1074] 6.3
Allen et al. 2009 1.2857 [0.4888; 3.3816] 24.7
Boysen et al. 2009 1.2222 [0.5210; 2.8673] 29.6
Faulkner et al. 2014 0.1111 [0.0062; 1.9760] 3.6
Peng et al. 2004 0.9782 [0.4667; 2.0502] 35.8
Number of studies combined: k = 5
Number of observations: o = 4668
Number of events: e = 73
RR 95%-CI z p-value
Random effects model 0.9479 [0.5432; 1.6541] -0.19 0.8506
Quantifying heterogeneity:
tau^2 = 0.0830 [0.0000; 8.8326]; tau = 0.2881 [0.0000; 2.9720]
I^2 = 8.1% [0.0%; 80.9%]; H = 1.04 [1.00; 2.29]
Test of heterogeneity:
Q d.f. p-value
4.35 4 0.3604
Details on meta-analytical method:
- Mantel-Haenszel method (without continuity correction)
- Paule-Mandel estimator for tau^2
- Q-profile method for confidence interval of tau^2 and tau
- Continuity correction of 0.5 in studies with zero cell frequencies
forest.meta(m.behav.mors,
sortvar = author,
predict = FALSE, colgap = "5mm",
print.tau2 = FALSE,
leftlabs = c("Study","Events","n","Event", "n","Weight","Risk Ratio"),
leftcols = c("studlab","est.e","n.e","est.c","n.c","w.random","effect.ci"),
col.square = "blue",
col.diamond = "black",
layout = "RevMan5")
# recurrence data
behavMeta <- behavMeta %>% add_row(
domain=c('RECUR','RECUR','RECUR','RECUR'),
author=c('Allen et al. 2002','Boysen et al. 2009','McManus et al. 2009','Peng et al. 2004'),
year=c(2002,2009,2009,2004),
est.e=c(1,7,14,46), sd.e=c(NA,NA,NA,NA), n.e=c(47,49,157,1795),
est.c=c(0,6,11,52), sd.c=c(NA,NA,NA,NA), n.c=c(46,53,157,2026)
)
m.behav.recur <- behavMeta %>%
filter(domain == "RECUR") %>%
metabin(event.e = est.e,
n.e = n.e,
event.c = est.c,
n.c = n.c,
studlab = author,
sm = "RR",
method = "MH",
MH.exact = TRUE,
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "PM",
hakn = F,
title = "Goal blood pressure")
m.behav.recur
Review: Goal blood pressure
RR 95%-CI %W(random)
Allen et al. 2002 2.9368 [0.1227; 70.2669] 1.1
Boysen et al. 2009 1.2619 [0.4555; 3.4956] 10.3
McManus et al. 2009 1.2727 [0.5964; 2.7162] 18.7
Peng et al. 2004 0.9985 [0.6749; 1.4771] 69.9
Number of studies combined: k = 4
Number of observations: o = 4330
Number of events: e = 137
RR 95%-CI z p-value
Random effects model 1.0827 [0.7803; 1.5022] 0.48 0.6346
Quantifying heterogeneity:
tau^2 = 0 [0.0000; 1.3782]; tau = 0 [0.0000; 1.1740]
I^2 = 0.0% [0.0%; 84.7%]; H = 1.00 [1.00; 2.56]
Test of heterogeneity:
Q d.f. p-value
0.81 3 0.8482
Details on meta-analytical method:
- Mantel-Haenszel method (without continuity correction)
- Paule-Mandel estimator for tau^2
- Q-profile method for confidence interval of tau^2 and tau
- Continuity correction of 0.5 in studies with zero cell frequencies
forest.meta(m.behav.recur,
sortvar = author,
predict = FALSE, colgap = "5mm",
print.tau2 = FALSE,
leftlabs = c("Study","Events","n","Event", "n","Weight","Risk Ratio"),
leftcols = c("studlab","est.e","n.e","est.c","n.c","w.random","effect.ci"),
col.square = "blue",
col.diamond = "black",
# One of the confidence intervals goes up to 70; limiting the x-axis adds an arrow to the
# confidence interval line to indicate that is goes beyond the limit
xlim = c(0.1,10),
layout = "RevMan5")
# Adverse events data
behavMeta <- behavMeta %>% add_row(
domain=c('ADVERSE','ADVERSE','ADVERSE','ADVERSE','ADVERSE','ADVERSE','ADVERSE'),
author=c('Allen et al. 2002','Allen et al. 2009','Boysen et al. 2009','English et al. 2016',
'Kono et al. 2013','McManus et al. 2009','Peng et al. 2004'),
year=c(2002,2009,2009,2016,2013,2009,2004),
est.e=c(10,9,28,2,1,13,63), sd.e=c(NA,NA,NA,NA,NA,NA,NA), n.e=c(47,190,157,19,35,49,1795),
est.c=c(19,7,29,2,12,22,73), sd.c=c(NA,NA,NA,NA,NA,NA,NA), n.c=c(46,190,157,14,35,53,2026)
)
m.behav.adv <- behavMeta %>%
filter(domain == "ADVERSE") %>%
metabin(event.e = est.e,
n.e = n.e,
event.c = est.c,
n.c = n.c,
studlab = author,
sm = "RR",
method = "MH",
MH.exact = TRUE,
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "PM",
hakn = F,
title = "Goal blood pressure")
m.behav.adv
Review: Goal blood pressure
RR 95%-CI %W(random)
Allen et al. 2002 0.5151 [0.2692; 0.9857] 16.9
Allen et al. 2009 1.2857 [0.4888; 3.3816] 11.4
Boysen et al. 2009 0.9655 [0.6036; 1.5445] 20.8
English et al. 2016 0.7368 [0.1177; 4.6135] 4.5
Kono et al. 2013 0.0833 [0.0114; 0.6069] 3.9
McManus et al. 2009 0.6391 [0.3633; 1.1246] 18.7
Peng et al. 2004 0.9741 [0.6996; 1.3563] 23.9
Number of studies combined: k = 7
Number of observations: o = 4813
Number of events: e = 290
RR 95%-CI z p-value
Random effects model 0.7472 [0.4892; 1.1412] -1.35 0.1774
Quantifying heterogeneity:
tau^2 = 0.1670 [0.0000; 3.2371]; tau = 0.4087 [0.0000; 1.7992]
I^2 = 40.9% [0.0%; 75.1%]; H = 1.30 [1.00; 2.01]
Test of heterogeneity:
Q d.f. p-value
10.15 6 0.1187
Details on meta-analytical method:
- Mantel-Haenszel method
- Paule-Mandel estimator for tau^2
- Q-profile method for confidence interval of tau^2 and tau
forest.meta(m.behav.adv,
sortvar = author,
predict = FALSE, colgap = "5mm",
print.tau2 = FALSE,
leftlabs = c("Study","Events","n","Event", "n","Weight","Risk Ratio"),
leftcols = c("studlab","est.e","n.e","est.c","n.c","w.random","effect.ci"),
col.square = "blue",
col.diamond = "black",
xlim = c(0.05,20), at = c(0.1,0.5,1,2,10),
layout = "RevMan5")
# MRS data
behavMeta <- behavMeta %>% add_row(
domain=c('MRS','MRS','MRS','MRS'),
author=c('Adie et al. 2010','Boysen et al. 2009','Joubert et al. 2009','Wan al. 2016'),
year=c(2010,2009,2009,2016),
est.e=c(0,1.45,1.2,0.18), sd.e=c(1,1.19,1.1,0.5), n.e=c(29,137,91,40),
est.c=c(0,1.5,1.9,0.4), sd.c=c(1,1.26,1.2,0.71), n.c=c(27,147,95,40))
m.behav.mrs <- behavMeta %>%
filter(domain == "MRS") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "SMD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Modified Rankin Scale")
m.behav.mrs
Review: Modified Rankin Scale
SMD 95%-CI %W(random)
Adie et al. 2010 0.0000 [-0.5242; 0.5242] 18.0
Boysen et al. 2009 -0.0406 [-0.2734; 0.1921] 32.0
Joubert et al. 2009 -0.6051 [-0.8992; -0.3109] 28.7
Wan al. 2016 -0.3548 [-0.7967; 0.0870] 21.3
Number of studies combined: k = 4
Number of observations: o = 606
SMD 95%-CI z p-value
Random effects model -0.2624 [-0.5628; 0.0380] -1.71 0.0869
Quantifying heterogeneity:
tau^2 = 0.0593 [0.0010; 1.0934]; tau = 0.2435 [0.0315; 1.0457]
I^2 = 69.4% [11.7%; 89.4%]; H = 1.81 [1.06; 3.07]
Test of heterogeneity:
Q d.f. p-value
9.79 3 0.0204
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
- Hedges' g (bias corrected standardised mean difference)
forest.meta(m.behav.mrs,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
# by default the {xlim} was shown as (-0.5, 0.5); it is expanded for aesthetic reasons
xlim = c(-1,1),
layout = "RevMan5")
# Quality of life data
behavMeta <- behavMeta %>% add_row(
domain=c('QOL','QOL','QOL','QOL','QOL'),
author=c('Barker-Collo et al. 2015','Damush et al. 2011','Joubert et al. 2009',
'Kirk et al. 2014','McManus et al. 2009'),
year=c(2015,2011,2009,2014,2009),
est.e=c(43.02,3.82,26.4,43.0,62.0), sd.e=c(10.82,0.88,5.3,9.7,2.9), n.e=c(165,30,91,12,49),
est.c=c(43.52,3.94,29.7,47.42,60.0), sd.c=c(10.73,0.82,6.2,5.5,2.8), n.c=c(169,33,95,12,53)
)
m.behav.qol <- behavMeta %>%
filter(domain == "QOL") %>%
metacont(n.e = n.e, mean.e = est.e, sd.e = sd.e,
n.c = n.c, mean.c = est.c, sd.c = sd.c,
studlab = author,
sm = "MD",
method.smd = "Hedges",
comb.fixed = FALSE,
comb.random = TRUE,
method.tau = "REML",
hakn = F,
title = "Quality of life")
m.behav.qol
Review: Quality of life
MD 95%-CI %W(random)
Barker-Collo et al. 2015 -0.5000 [ -2.8114; 1.8114] 19.8
Damush et al. 2011 -0.1200 [ -0.5412; 0.3012] 25.8
Joubert et al. 2009 -3.3000 [ -4.9553; -1.6447] 22.4
Kirk et al. 2014 -4.4200 [-10.7290; 1.8890] 7.7
McManus et al. 2009 2.0000 [ 0.8920; 3.1080] 24.3
Number of studies combined: k = 5
Number of observations: o = 709
MD 95%-CI z p-value
Random effects model -0.7227 [-2.8045; 1.3590] -0.68 0.4962
Quantifying heterogeneity:
tau^2 = 4.3203 [0.9443; 51.1594]; tau = 2.0785 [0.9718; 7.1526]
I^2 = 86.7% [71.1%; 93.9%]; H = 2.74 [1.86; 4.04]
Test of heterogeneity:
Q d.f. p-value
30.05 4 < 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
forest.meta(m.behav.qol,
sortvar = author,colgap = "5mm", digits.sd = 2,
predict = FALSE,
print.tau2 = FALSE,
leftlabs = c("Author","mean","SD", "n","mean","SD","n","Weight","MD","95%CI"),
leftcols = c("studlab","est.e","sd.e","n.e","est.c","sd.c","n.c","w.random","effect","ci"),
col.square = "blue", col.square.lines = "blue",
col.diamond = "black",
xlim = c(-5,5), at = c(-5,-2.5,0,2.5,5),
layout = "RevMan5")
In our study We used the first version of Cochrane’s Risk of Bias assessment (RoB1).
behavROB <- data.frame(
Study = factor(c("Adie 2010","Allen 2002","Allen 2009","Barker-Collo 2015","Boss 2014","Boysen 2009",
"Brunner Frandsen 2012","Chanruengvanich 2006","Cheng 2018","Damush 2011","English 2016",
"Evans-Hudnall 2014","Faulkner 2014","Flemming 2013","Gillham 2010","Holzemer 2011",
"Hornnes 2011","Irewall 2015","Joubert 2006","Joubert 2009","Kim 2013","Kirk 2014",
"Kono 2013","McManus 2009","Moren 2016","Nir 2004","Peng 2004","Wan 2016","Wolfe 2010")),
Random.sequence.generation. = factor(c('Low','Low','Low','Low','High','Low','Low','Some concerns',
'Low','Low',
'Low','Low','Low','Low','Low','Low','Low','Low','Low','Low','Low',
'Low','Low','Low','Low','Some concerns','Some concerns','Low',
'Low')),
Allocation.concealment.= factor(c('Low','Low','Low','Low','Some concerns','Low','Low','Some concerns',
'Low','Low','Low','Low','Low','Some concerns','Low','Some concerns',
'Low','Low','Some concerns','Some concerns','Some concerns','Low',
'Low','Low','Some concerns','Some concerns','High','Low','Low')),
Blinding.of.participants.and.personnel. = factor(c('High','High','High','High','Some concerns','High',
'High','High','High','High','High','High','High',
'High','High','High','High','High','High','High',
'High','High','High','High','High','High','High',
'High','High')),
Blinding.of.outcome.assessment. = factor(c('High','Low','Low','Low','Some concerns','Low','High',
'High','Low','Low','Low','High','Low','High','High','High',
'Low','High','High','High','High','Low','Low','High','Low',
'High','High','Low','High')),
Incomplete.outcome.data. = factor(c('Low','Low','Low','High','Low','Some concerns','Some concerns',
'Low','Low','Low','Low','Low','Low','High','Low','High','Low',
'Low','Some concerns','Low','Low','Low','Low','Low','Low',
'Some concerns','High','Low','Low')),
Selective.reporting. = factor(c('Low','Low','Low','Low','Some concerns','Low','Low','Low','Low','Low',
'Low','Low','Low','Some concerns','Low','Some concerns','Low','Low',
'High','Low','Low','Low','Low','Low','Low','Low','Some concerns',
'Low','Low')),
Other.sources.of.bias. = factor(c('Low','High','High','Some concerns','Some concerns','Low','Low',
'High','Low','High','Low','High','Low','Low','High','Low','High',
'Low','High','High','High','Low','Low','Low','High','Some concerns',
'High','High','Low')),
weight = rep(1,29)
)
A summary bar chart of Rob1 can be drawn with the function {rob_summary()} from the library {robvis}
# library(robvis)
ro_sum <- rob_summary(data = behavROB,
tool = "ROB1",weighted = F)
#' The figure is rendered with ggplot2 and can therefore be modified by adding theme arguments
ro_sum + theme(axis.text.y = element_text(size = 13, color = "black", hjust = 1),
axis.text.x = element_text(size = 10),
legend.text = element_text(size = 11) )
A traffic light table is a table that shows the Risk of Bias assessment for each individual study. This can be build with the function {rob_traffic_ligth} from the library {robvis}. Unfortunately, this function does not support Rob1, but has Rob2 as its’ default.
#' This function makes the traffic light table in the Rob2 format. The function restructures the data and renders the table using ggplot2
robLight <- rob_traffic_light(data = behavROB,
tool = "ROB2", psize = 10)
# robLight + scale_size(range = c(1,10)) +
# theme(
# strip.background = element_rect(colour = "black", fill = "white"),
# strip.text.y.left = element_text(angle = 0, size = 10),
# strip.text.x = element_text(angle = 90, size = 10)
# )
Although the function {rob_traffic_light} does not support RoB1 in itself, we can still use some its’ functionality to build a traffic light table from Rob1-data. In this example I have reused the restructured data generated from the function {rob_traffic_light} and rebuild the code used to render the table in {ggplot2}.
psize = 10
ssize <- psize - (psize/4)
rob.tidy <- robLight$data # Extracts the restructured data generated \function{rob_traffic_light}
trafficlightplot <- ggplot2::ggplot(rob.tidy, ggplot2::aes(x = 1, y = 1, colour = judgement)) +
ggplot2::facet_grid(Study ~
factor(domain, levels = c("D1", "D2", "D3",
"D4","D5", "Overall"),
labels = c("Domain 1", "Domain 2", "Domain 3",
"Domain 4","Domain 5", "Domain 6")),
switch = "y", space = "free") +
ggplot2::geom_point(size = 6) +
ggplot2::geom_point(size = 4, colour = "black", ggplot2::aes(shape = judgement)) +
ggplot2::geom_rect(data = rob.tidy[which(rob.tidy$domain != "Overall"), ],
fill = "#ffffff", xmin = -Inf, xmax = Inf, ymin = -Inf,
ymax = Inf, show.legend = FALSE) +
ggplot2::geom_rect(data = rob.tidy[which(rob.tidy$domain == "Overall"), ],
fill = "#ffffff", xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf,
show.legend = FALSE) +
ggplot2::geom_point(size = psize, show.legend = FALSE) +
ggplot2::geom_point(shape = 1, colour = "black", size = psize, show.legend = FALSE) +
ggplot2::geom_point(size = ssize, colour = "black", ggplot2::aes(shape = judgement),
show.legend = FALSE) +
ggplot2::ggtitle("Figure #: Risk of bias") +
ggplot2::labs(caption =
" Domains:
D1: Bias due to randomisation.
D2: Bias due to allocation concealment.
D3: Bias due to blinding of participants and personnel.
D4: Bias due to blinding of outcome assessment.
D5: Bias due to incomplete outcome data.
D6: Bias due to selective reporting.
") +
ggplot2::scale_x_discrete(position = "top", name = "Risk of bias domains") +
ggplot2::scale_y_continuous(limits = c(1, 1), labels = NULL, breaks = NULL,
name = "", position = "left") +
ggplot2::scale_colour_manual(values = c(h = "#BF0000", s = "#E2DF07", l = "#02C100"),
labels = c(h = "High", s = "Some concerns", l = "Low")) +
ggplot2::scale_shape_manual(values = c(h = 120, s = 45, l = 43),
labels = c(h = "High", s = "Some concerns",l = "Low")) +
ggplot2::scale_size(range = c(5,20)) +
ggplot2::theme_bw() +
ggplot2::theme(
# Title of the plot
plot.title = element_text(face = "bold", size = 14, hjust = 0),
# Panels
panel.border = ggplot2::element_rect(colour = "black"),
panel.spacing = ggplot2::unit(0, "line"),
# Legend
legend.title = ggplot2::element_text(size = 9, face="bold"),
legend.position = "bottom", legend.justification = "right",
legend.direction = "vertical",
legend.text = ggplot2::element_text(size = 9),
legend.margin = ggplot2::margin(t = -0.2, r = 0, b = -2.5, l = -10, unit = "cm"),
# Captions
plot.caption = ggplot2::element_text(size = 10, hjust = 0, vjust = 1),
plot.caption.position = "plot",
# Strip (Text along the axis)
strip.text.x = ggplot2::element_text(angle = 90, size = 10),
strip.text.y = ggplot2::element_text(angle = 180, size = 10),
strip.text.y.left = element_text(angle = 0, size = 10, hjust = 1),
strip.background = ggplot2::element_rect(fill = "white")
) +
ggplot2::guides(shape = ggplot2::guide_legend(override.aes = list(fill = NA))) +
ggplot2::labs(shape = "Judgement", colour = "Judgement")
trafficlightplot
Funnel-plots can be made with the function {funnel.meta} from the library {meta}. In this example the funnel-plots are based in the model for systolic blood pressure.
funnel.meta(m.behav.sbp)
#' Added contour lines with significance levels and the names of the studies
funnel.meta(m.behav.sbp, studlab = TRUE, zval = TRUE,
contour = c(0.9, 0.95, 0.99),
col.contour = c("gray90", "gray95", "gray99"))
legend(x = 10, y = 0.01,
legend = c("p < 0.1", "p < 0.05", "p < 0.01"),
fill = c("gray90", "gray95", "gray99"))
Egger’s test can be calculated using the function {metabias} from the libray {meta}
metabias(m.behav.sbp, method.bias = "linreg")
Warning in metabias.meta(m.behav.sbp, method.bias = "linreg") :
1 observation(s) dropped due to missing values
Review: Systolic Blood Pressure
Linear regression test of funnel plot asymmetry
Test result: t = -0.19, df = 11, p-value = 0.8539
Sample estimates:
bias se.bias intercept se.intercept
-0.1694 0.8990 -3.2135 2.5565
Details:
- multiplicative residual heterogeneity variance (tau^2 = 2.2979)
- predictor: standard error
- weight: inverse variance
- reference: Egger et al. (1997), BMJ
eggers.test(m.behav.sbp)
Warning in metabias.meta(x, k.min = 3, method = "linreg") :
1 observation(s) dropped due to missing values
Eggers' test of the intercept
=============================
Eggers' test does not indicate the presence of funnel plot asymmetry.
Contact:
Jacob Mesot Liljehult, RN MScHS
Department of Neurology
Nordsjællands Hospital
Denmark
jacob.mesot.liljehult@regionh.dk