Author: Corentin J. Goslinga, Aleix Solanesa, Paolo Fusar-Poli & Joaquim Radua
Date: 2025-02-28

# Vignette 3: create a forest plot for an umbrella review with metaumbrella

#### Corentin J. Goslinga, Aleix Solanesa, Paolo Fusar-Poli & Joaquim Radua

#### 2025-02-28

# Introduction

As in any statistical analysis, data visualization is an important step to interpret the results. To do so, the metaumbrella package proposes to display the results of your umbrella review using forest plots adapted to umbrella reviews. Contrary to forest plots used in standard meta-analyses (in which the effect sizes of individual studies are plotted), the forest plots proposed in the metaumbrella package display the pooled effect sizes of the meta-analyses.

More precisely, the graphical presentation of the results generated by the `forest` function includes - by default (i) the name of the factors assessed in the umbrella review (referred to as the `factor` column), (ii) a graphical representation of the pooled effect size of each factor using a forest plot, (iii) the numeric values of the pooled effect size and 95% confidence interval (referred to as the `value` column). Numerous options are proposed to customize this basic figure (iv) various information such as the sample size or the heterogeneity.

In the examples provided below, we present how to display a simple forest plot (Example 1), how to display a more complex forest plot in which some columns are added at the left of the plot (Example 2) and how to group the factors under a specific header, plus modifying the general layout (Example 3).

# Example 1: simple forest plot

This example uses the dataset named `df.OR` distributed along with the metaumbrella package. In this example, we plot the results of the calculations of the umbrella review while no stratification of evidence has been performed.

    # perform the calculations
    umb <- umbrella(df.OR, verbose = FALSE)

    # plot the results
    forest(umb)

The effect sizes are displayed as `eG`, the default in this function. Since all factors have used `OR`, we can convert the effect sizes in `eOR` using the measure argument. Moreover, because all effect sizes are `OR` and not `eOR`, we indicate it in the plot (we can do this using the `rightlab` argument to modify the title of the right column and using the `xlab` argument to modify the title of the x-axis).
In the meantime, we also add a title to the plot using the `smlab` argument.

    forest(umb,
           measure = "OR", # display eOR instead of eG,
           rightlab = "OR + 95% CI",
           xlab = "Odds Ratio",
           smlab = "Umbrella review of \nrisk factors for NDD" # title of the plot
           )

As you can see in the code for the title, we have added “backslash” n after the word ‘for’. This forces a line break.

The size of the dots reflects the precision of the pooled effect sizes. The narrower the 95% CI, the larger the size of the dot. If you would like to fix the size of the dot, you can set the argument `weight.study` to “same”.

    forest(umb,
           measure = "OR", # display eOR instead of eG,
           rightlab = "OR + 95% CI",
           xlab = "Odds Ratio",
           weight.study = "same",
           smlab = "Umbrella review of \nrisk factors for NDD" # title of the plot
           )

# Example 2: modified forest plot (modification of column positions)

This example uses two datasets named `df.SMD` and `df.HR` distributed along with the metaumbrella package. For the example, we stratify the evidence for all factors included in these two datasets according to some Personalized criteria.

    # perform the calculations
    umb <- union.umbrella(umbrella(df.SMD), umbrella(df.HR))

    # stratify the evidence
    strat.prso <- add.evidence(umb, criteria= "Personalized",
                               class_I = c(n_studies = 10, total_n = 3000, egger_p = .10, esb_p = .05),
                               class_II = c(n_studies = 10, total_n = 2000, egger_p = .10),
                               class_III = c(n_studies = 10, total_n = 1000, egger_p = .10),
                               class_IV = c(n_studies = 10, total_n = 500, egger_p = .10))

    # plot the results
    forest(strat.prso)

As you can see, the results are ordered according to the class reached. The meta-analyses using `HR` effect size measures have been automatically converted to eG.

In some situations, you may be interested in adding/modifying the position of a column. In this example, we add a column describing the tau² values, and we move the column storing the effect size values and 95% CI on the left.

    forest(strat.prso,
           leftcols = c("Factor", "Class", "n_studies", "total_n", "tau2",
                        "effect.ci"),
           leftlabs = c("Factor", "Class", "n-studies", "n-sample", "tau²",
                        "eSMD + 95% CI"),
              rightcols = FALSE,
        )

# Example 3: modified forest plot (layout and subgroups)

This example uses several fictitious datasets distributed along with the metaumbrella package, namely `df.SMD`, `df.OR`, `df.RR`, `df.IRR` and `df.OR.multi`.

    # perform the calculations
    umb <- union.umbrella(union.umbrella(
            union.umbrella(union.umbrella(
              umbrella(df.SMD), umbrella(df.OR)),
              umbrella(df.RR)), umbrella(df.IRR)),
            umbrella(df.OR.multi, mult.level = TRUE))

    strat.prso <- add.evidence(umb, criteria = "Ioannidis")

    forest(strat.prso)

First, to change the general appearance of the plot, you can use the ‘layout’ argument which can takes 3 values : “meta” (the default), “JAMA” and “RevMan5”. Let’s use the “RevMan5” option for this example:

    forest(strat.prso,
           layout = "RevMan5")

Second, we will present the factors grouped under specific headers. For this example, we will group them according to the classes.

    forest(strat.prso,
           layout = "RevMan5",
           subgroup = "Class",
           subgroup.name = "Class")