Make a PRISMA flow chart

Jack O. Wasey

2019-05-08

Plot a PRISMA http://prisma-statement.org/ flow chart describing the identification, screening, eligibility and inclusion or studies in systematic reviews. The PRISMA statement defines an evidence-based, minimal set of items for reporting in systematic reviews and meta-analyses. PRISMA should be used for the reporting of studies evaluating randomized clinical trials (RCT), and is also for reporting on systematic reviews of other types of research. There is also a function to generate flow charts describing exclusions and inclusions for any kind of study.

Background

The Preferred Reporting Items for Systematic Reviews and Meta-Analyses (PRISMA) Statement (Moher et al. 2009) defines an evidence-based, minimal set of items for reporting in systematic reviews and meta-analyses. PRISMA should be used for the reporting of studies evaluating randomized clinical trials (RCTs), and for reporting of systematic reviews of other types of research.

Meta-analysis is a critical tool in evidence-based medicine, forming the basis of international recommendations and guiding local medical practice. Unfortunately, a large amount of published medical research is likely to be false (Ioannidis 2005). This increases the importance of good meta-analysis of potentially flawed studies in order to reduce bias. An effort has been made to raise the standard of work accepted in major medical journals, for both primary research and systematic reviews. For example, for randomized controlled trials, we have the widely enforced CONSORT statement (Schulz et al. 2010). PRISMA is the analogue of CONSORT for meta-analysis and systematic reviews.

The importance of these efforts to raise standards is so great that the PRISMA Statement has been published in multiple medical journals (e.g., Moher et al. 2010; Liberati et al. 2009), and it is now a requirement for authors to follow its guidelines when submitting meta-analyses and systematic reviews to major journals.

In addition to increasing the standard of research in general, the movement towards reproducible research continues, with a drive to publish more data and to automate and publish the statistical analysis. The “Living Systematic Review” brings the reproducible concept to systematic reviews and extends it by allowing prompt updates as new evidence is published (Elliott et al. 2017). With these goals and trends in mind, the PRISMAstatement package for the R statistical software (R Core Team 2018) enables construction of a correct PRISMA flow diagram which can be generated as part of a reproducible workflow in R.

The R packages such as ggplot2 (Wickham 2016), rmarkdown (Allaire, Xie, McPherson, et al. 2018), rticles (Allaire, Xie, R Foundation, et al. 2018) give researchers the tools to produce manuscripts incorporating their analysis, figures and text, entirely within the R environment. However, plotting flow charts is not straightforward, especially not those that confirm to the specific PRISMA statement requirements. Most researchers are likely to resort to producing their PRISMA flow diagram in another application then import the resulting figure. This is a possible source of errors, and a barrier to reproducible research: with PRISMAstatement it is now possible to use a reproducible workflow up-to-date PRISMA flow diagram of publication quality.

Generate a PRISMA flow chart

#install.packages("PRISMAstatement")
library(PRISMAstatement)

prisma(found = 750,
       found_other = 123,
       no_dupes = 776, 
       screened = 776, 
       screen_exclusions = 13, 
       full_text = 763,
       full_text_exclusions = 17, 
       qualitative = 746, 
       quantitative = 319,
       width = 800, height = 800)

Tweaks

Ideally, you will stick closely to the PRISMA statement, but small deviations are common. PRISMAstatement gives the option of adding a box which simply calculates the number of duplicates removed.

prisma(found = 750,
       found_other = 123,
       no_dupes = 776, 
       screened = 776, 
       screen_exclusions = 13, 
       full_text = 763,
       full_text_exclusions = 17, 
       qualitative = 746, 
       quantitative = 319,
       extra_dupes_box = TRUE)

You can also change the labels, but you will have to insert the number for any label you change. E.g.,

prisma(1000, 20, 270, 270, 10, 260, 20, 240, 107,
       labels = list(found = "FOUND", found_other = "OTHER"))

Safety

There are some hard constraints on the relationships between the numbers in each box, which are enforced by the prisma function. There are a couple of warnings given when it seems that numerically valid, but unlikely numbers are given: studies shouldn’t just disappear between each step. Arguably this is a hard stop, but there might be circumstances when additional exclusions are made which could be annotated in a figure caption.

tryCatch(
  prisma(1, 2, 3, 4, 5, 6, 7, 8, 9),
  error = function(e) e$message)
## [1] "screened <= no_dupes is not TRUE"
prisma(1000, 20, 270, 270, 10, 260, 19, 240, 107, 
       width = 100, height = 100)
## Warning in prisma_graph(found = found, found_other = found_other, no_dupes
## = no_dupes, : After full-text exclusions, a different number of remaining
## articles for qualitative synthesis is stated.
prisma(1000, 20, 270, 270, 269, 260, 20, 240, 107, 
       width = 100, height = 100)
## Warning in prisma_graph(found = found, found_other = found_other, no_dupes
## = no_dupes, : After screening exclusions, a different number of remaining
## full-text articles is stated.

Font size

The underlying DiagrammeR uses htmlwidgets to render the flow chart, and this can occasionally cause text boxes to overflow. Varying the font size using the PRISMAstatement::prisma argument font_size may help prepare a PRISMA flow chart for publication.

prisma(1000, 20, 270, 270, 10, 260, 20, 240, 107, font_size = 6)
prisma(1000, 20, 270, 270, 10, 260, 20, 240, 107, font_size = 60)

Take care modifying the width, height and DPI

For publication quality graphics, a certain number of DPI is often requested. This is difficult to achieve with the chain of tools that PRISMAstatement uses (DiagrammeR, htmlwidgets), and also affected by the output container which may be a PDF vignette, file, browser window, etc..

prisma(found = 750,
       found_other = 123,
       no_dupes = 776, 
       screened = 776, 
       screen_exclusions = 13, 
       full_text = 763,
       full_text_exclusions = 17, 
       qualitative = 746, 
       quantitative = 319,
       width = 200, height = 200)

just set width and height

prisma(found = 750,
       found_other = 123,
       no_dupes = 776, 
       screened = 776, 
       screen_exclusions = 13, 
       full_text = 763,
       full_text_exclusions = 17, 
       qualitative = 746, 
       quantitative = 319,
       width = 200, height = 200,
       dpi = 300)

same width and height but DPI increased to 300

prisma(found = 750,
       found_other = 123,
       no_dupes = 776, 
       screened = 776, 
       screen_exclusions = 13, 
       full_text = 763,
       full_text_exclusions = 17, 
       qualitative = 746, 
       quantitative = 319,
       width = 200, height = 200,
       dpi = 36)

same width and height but DPI decreased to 36

My recommendation is to leave DPI at the default (72), and change the canvas size to achieve the correct number of pixels to fit the width of your target document. Tweaking the DPI may help (or cause) clipping.

Publications

It may be useful for publications to have a separate high-quality PDF of the PRISMA flow chart. An experimental internal function can do something like this:

References

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, and Winston Chang. 2018. Rmarkdown: Dynamic Documents for R. https://CRAN.R-project.org/package=rmarkdown.

Allaire, JJ, Yihui Xie, R Foundation, Hadley Wickham, Journal of Statistical Software, Ramnath Vaidyanathan, Association for Computing Machinery, et al. 2018. Rticles: Article Formats for R Markdown. https://CRAN.R-project.org/package=rticles.

Elliott, Julian H., Anneliese Synnot, Tari Turner, Mark Simmonds, Elie A. Akl, Steve McDonald, Georgia Salanti, et al. 2017. “Living Systematic Review: 1. Introduction—the Why, What, When, and How.” Journal of Clinical Epidemiology 91 (November): 23–30. https://doi.org/10.1016/j.jclinepi.2017.08.010.

Ioannidis, John P. A. 2005. “Why Most Published Research Findings Are False.” PLoS Medicine 2 (8). https://doi.org/10.1371/journal.pmed.0020124.

Liberati, Alessandro, Douglas G. Altman, Jennifer Tetzlaff, Cynthia Mulrow, Peter C. Gøtzsche, John P. A. Ioannidis, Mike Clarke, P. J. Devereaux, Jos Kleijnen, and David Moher. 2009. “The PRISMA Statement for Reporting Systematic Reviews and Meta-Analyses of Studies That Evaluate Healthcare Interventions: Explanation and Elaboration.” BMJ 339 (July): b2700. https://doi.org/10.1136/bmj.b2700.

Moher, David, Alessandro Liberati, Jennifer Tetzlaff, and Douglas G. Altman. 2010. “Preferred Reporting Items for Systematic Reviews and Meta-Analyses: The PRISMA Statement.” International Journal of Surgery 8 (5): 336–41. https://doi.org/10.1016/j.ijsu.2010.02.007.

Moher, David, Alessandro Liberati, Jennifer Tetzlaff, Douglas G. Altman, and The PRISMA Group. 2009. “Preferred Reporting Items for Systematic Reviews and Meta-Analyses: The PRISMA Statement.” PLOS Med 6 (7): e1000097. https://doi.org/10.1371/journal.pmed.1000097.

R Core Team. 2018. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.

Schulz, Kenneth F., Douglas G. Altman, David Moher, and for the CONSORT Group. 2010. “CONSORT 2010 Statement: Updated Guidelines for Reporting Parallel Group Randomised Trials.” PLOS Medicine 7 (3): e1000251. https://doi.org/10.1371/journal.pmed.1000251.

Wickham, Hadley. 2016. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org.