Title: | Umbrella Review Package for R |
---|---|
Description: | A comprehensive range of facilities to perform umbrella reviews with stratification of the evidence in R. The package accomplishes this aim by building on three core functions that: (i) automatically perform all required calculations in an umbrella review (including but not limited to meta-analyses), (ii) stratify evidence according to various classification criteria, and (iii) generate a visual representation of the results. Note that if you are not familiar with R, the core features of this package are available from a web browser (<https://www.metaumbrella.org/>). |
Authors: | Corentin J Gosling [aut, cre], Aleix Solanes [aut], Paolo Fusar-Poli [aut], Joaquim Radua [aut] |
Maintainer: | Corentin J Gosling <[email protected]> |
License: | GPL-3 |
Version: | 1.0.11 |
Built: | 2025-01-03 07:21:08 UTC |
Source: | CRAN |
The metaumbrella package offers several facilities to assist in data analysis when performing an umbrella review.
This package is built around three core functions which automatically perform the statistical analyses required for an umbrella review (the umbrella()
function), stratify the evidence according to various classification criteria (the add.evidence()
function) and generate a graphical presentation of the results (the forest()
function).
The umbrella()
function automatically performs meta-analyses and additional calculations needed for an umbrella review. It outputs an object of class “umbrella”.
The advantage of this function over standard R packages only designed for fitting a single meta-analysis lies, for example, in the possibility of automatically fitting several meta-analyses when input information differs, automatically extracting the necessary information to stratify the evidence, and automatically performing the additional tests needed (a test for excess significance, a test for publication bias and a jackknife leave-one-out analysis).
The add.evidence()
function stratifies the evidence generated by the umbrella()
function according to a set of pre-specified criteria (those proposed by Prof. Ioannidis or an algorithmic version of GRADE classification), or according to a personalized classification that the users may specify manually. This feature allows users to rely on already developed criteria or to develop new ones that match the specific needs of their umbrella review.
The forest()
function creates graphical representations of the results of an umbrella review, including a forest plot along with information on the stratification of evidence.
One of the specificities of the metaumbrella package is that all the functions of this package do not have an argument to specify the name of the variables contained in the dataset of the users.
Therefore, it is necessary that the datasets that are passed to the different functions of the package respect a very precise formatting (which we will refer to as well-formatted dataset
).
We present here the rules that must be respected when creating a well-formatted dataset.
The datasets passed to the functions of the metaumbrella package should contain information on each individual study pooled in the different meta-analyses included in the umbrella review. The information about each individual study must allow for replication of the meta-analyses. It is therefore necessary that the information contained in a well-formatted dataset allows for estimating the effect size and variance of all individual studies. Ten types of effect size measures are accepted:
"SMD": standardized mean difference (i.e., Cohen's d)
"G": Hedges' g
"MD": mean difference
"SMC": standardized mean change
"R": Pearson's correlation
"Z": Fisher's z
"OR" or "logOR": odds ratio or its logarithm
"RR" or "logRR": risk ratio or its logarithm
"HR" or "logHR": hazard ratio or its logarithm
"IRR" or "logIRR": incidence rate ratio or its logarithm
To estimate the effect size and the variance of each individual study, the metaumbrella package allows for flexible inputs.
We detail below (A) the variables that are mandatory and must be indicated in a well-formatted dataset, (B) the variables that vary depending on the effect size measure and (C) the variables that are optional but that can be indicated to benefit from certain features of the package.
Note that the package includes examples of well-formatted datasets for each effect size measure (df.SMD
, df.SMC
, df.R
, df.OR
, df.RR
, df.HR
and df.IRR
).
The following variables must be included in the dataset regardless of the effect size measure used. The name of these variables (in bold) cannot be changed.
meta_review: a character variable that contains an identifier for the sources of the meta-analyses included in an umbrella review. Typically, this variable contains the name of the first-author of the included meta-analyses.
factor: a character variable that contains an identifier for the risk factors or the interventions whose effect are studied.
Importantly, all rows in the dataset with the same factor
value will be pooled together in a meta-analysis.
author and year: character variables identifying the name and the year of publication of each individual study that is included in a meta-analysis. For a given factor, all rows with the same author and year values will be identified as having some type of dependence (see below).
measure: a character variable describing the type of effect size measure used to quantify the effect of the factor and it must be either "SMD", "MD", "G", "SMC", "R", "Z", "OR", "logOR", "RR", "logRR", "HR", "logHR", "IRR" or "logIRR". Note here that if a study reports the numbers of cases and controls in exposed and non-exposed groups but does not report an effect size value (i.e., the value of an OR or RR), we recommend specifying "OR" for case-control studies while "RR" for cohort studies.
Depending on the effect size measure used, different information must be provided to replicate the meta-analyses. To allow users adapting to the data available in the original articles, several combinations of information can be provided for a given effect size measure. We detail the information that can provided in the dataset to replicate the meta-analyses and we provide several summary tables displaying the various combinations of minimum information required to replicate the meta-analyses.
value: Value of the effect size for each individual study.
ci_lo: Lower bound of the 95% confidence interval around the effect size for each individual study.
ci_up: Upper bound of the 95% confidence interval around the effect size for each individual study.
n_sample: Total number of participants in each individual study.
n_cases: Number of cases in each individual study.
n_controls: Number of controls in each individual study.
n_exp: Number of exposed participants in each individual study.
n_nexp: Number of non-exposed participants in each individual study.
n_cases_exp: Number of cases in the exposed group in each individual study.
n_controls_exp: Number of controls in the exposed group in each individual study.
n_cases_nexp: Number of cases in the non-exposed group in each individual study.
n_controls_nexp: Number of controls in the non-exposed group in each individual study.
mean_pre_cases: Mean of the cases at baseline for each individual study.
mean_pre_controls: Mean of the controls at baseline for each individual study.
sd_pre_cases: Standard deviation of the cases at baseline for each individual study.
sd_pre_controls: Standard deviation of the controls at baseline for each individual study.
pre_post_cor: Correlation between the pre-test and post-test scores (across groups) for each individual study.
mean_cases: Mean of the cases (at follow up) for each individual study.
mean_controls: Mean of the controls (at follow up) for each individual study.
sd_cases: Standard deviation of the cases (at follow up) for each individual study.
sd_controls: Standard deviation of the controls (at follow up) for each individual study.
time: Sum of the person-time of disease-free observation in the exposed and non-exposed groups for each individual study.
time_exp: Person-time of disease-free observation in the exposed group for each individual study.
time_nexp: Person-time of disease-free observation in the non-exposed group for each individual study.
We now present the summary tables indicating the minimum combination of information that should be provided for each individual study to run the analyses.
The symbol X
indicates that the information is provided in a dataset.
The symbol +
between two information indicates that the two information are mandatory.
The symbol |
between two information indicates that only one of the two information is required.
For each effect size measure, users must provide information on at least one row of the table corresponding to the effect size measure used.
Note that users can provide different combination of information for a same factor (e.g., it is possible to include the SMD value + 95% CI + sample sizes for a study and the means/SDs + sample sizes for another study within the same factor).
mean_cases + mean_controls + |
||||
sd_cases + sd_controls |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | X | - | - | - |
- | X | X | - | - |
- | X | X | X | - |
- | X | X | - | X |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | X | - | - |
X | X | X | - |
X | X | - | X |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | X | X | - |
X | X | - | X |
mean_pre_cases + |
||||
mean_pre_controls + |
||||
sd_pre_cases + |
||||
sd_pre_controls + |
||||
mean_cases + |
||||
mean_controls + |
||||
sd_cases + |
||||
sd_controls + |
||||
pre_post_cor |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | X | - | - | - |
- | X | X | X | - |
- | X | X | - | X |
mean_change_cases + |
|
mean_change_controls + |
|
sd_change_cases + |
|
sd_change_controls |
n_cases + n_controls |
X | X |
n_sample |
value |
se | var |
ci_lo + ci_up |
X | X | - | - |
X | X | X | - |
X | X | - | X |
n_sample |
value |
se | var |
ci_lo + ci_up |
X | X | - | - |
X | X | X | - |
X | X | - | X |
n_cases_exp + |
|||||
n_controls_exp + |
|||||
n_cases_nexp + |
|||||
n_controls_nexp |
n_exp + n_nexp |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | - | - | - | - | - |
- | - | X | X | - | - |
- | - | X | X | X | - |
- | - | X | X | - | X |
- | X | - | X | X | - |
- | X | - | X | - | X |
n_cases_exp + n_controls_exp + |
||||
n_cases_nexp + n_controls_nexp |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | - | - | - | - |
- | X | X | X | - |
- | X | X | - | X |
n_cases + n_controls |
value |
se | var |
ci_lo + ci_up |
X | X | X | - |
X | X | - | X |
n_cases_exp + n_cases_nexp + |
|||||
time_exp + time_nexp |
n_cases |
time |
value |
se | var |
ci_lo + ci_up |
X | - | - | - | - | - |
- | X | X | X | X | - |
- | X | X | X | - | X |
The following variables do not have to be included in a well-formatted dataset but they can be added to benefit from certain features of the functions. The name of these variables (in bold) cannot be changed.
multiple_es: Reason for the presence of several effect sizes for a unique study (i.e., a study with the same author and year values within the same factor).
It must be either "groups" or "outcomes". An example of a well-formatted dataset with multiple outcomes/groups can be found here (df.OR.multi
) and an example
of analysis of a dataset with dependent effect sizes is available in a vignette of the package.
groups
: When "groups" is indicated, it is assumed that the multiple effect sizes for a unique study come from independent subgroups.
A unique effect size per study is calculated using the Borenstein's (2009) approach.
For each study, the sample size is obtained by summing up all participants from the different groups.
outcomes
: When "outcomes" is indicated, it is assumed that the multiple effect sizes come from multiple outcomes (or time-points) measured within the same sample.
Again, a unique effect size per study is calculated using the Borenstein's (2009) approach.
Strength of the correlation between the outcomes (or time-points) can be indicated using either the r
column in your dataset (see below) or the r
argument of the umbrella()
function.
Indicating the strength of the correlation between the outcomes of a study in the r
column allows to use different values depending on the study.
In contrast, using the r
argument of umbrella()
function allows to conveniently set a unique correlation for all studies that do not have any value in the r
column.
For each study, the sample size is obtained by taking the largest sample size for one outcome/time-point.
r: When a study reports multiple effect sizes coming from the measurement of several outcomes (or measurements of the same outcome at different time-points) in the same participants, the r
column can be used to indicate the value of the correlation coefficient between the effect sizes of a given study.
The r value should be (i) within the (-1, 1) range, (ii) constant within a study, and (iii) set as NA
for studies which do not include multiple effect sizes coming from different outcomes/time-points.
shared_nexp: In some situations, several studies share participants from the same non-exposed group but compare this group to various exposed groups.
When several studies in the same factor share a same non-exposed group, they should be identified as such by having the same shared_nexp
value.
Identifying studies sharing the same non-exposed group allows to adjust calculations (the size of the shared sample is divided by the number of studies sharing the sample).
Studies not sharing their non-exposed group should have a NA
(or a unique) value in the shared_nexp
column.
shared_controls: In some situations, several studies share participants from the same control group but compare this group to various experimental groups.
When several studies in the same factor share a same control group, they should be identified as such by having the same shared_control
value.
Identifying studies sharing the same control group allows to adjust calculations (the size of the shared sample is divided by the number of studies sharing the sample).
Studies not sharing their control group should have a NA
(or a unique) value in the shared_controls
column.
pre_post_cor: The value of the correlation coefficient between baseline and follow-up scores in pre-post studies. You should indicate the mean pre-post correlation across groups. Only needed when using the SMC measure.
reverse_es: Whether users want to reverse the effect size of a study. All rows with a "reverse"
value in this column will have the direction of their effect size flipped (e.g., an OR of 0.5 will be expressed as 2). Note that the reverse_es column has an action on both the direction of the value of an effect size and on the information used to calculate an effect size
(e.g., if the means and SDs of experimental and control groups are reported, the mean and SD of the experimental group are used as the mean and SD of the control group and vice-versa).
This feature is particularly useful to facilitate the presentation of the results when several meta-analyses report the same effects in opposite direction.
rob: The risk of bias of each individual study. Should be either "high", "low" or "unclear". These values are used to generate the "GRADE" classification and to stratify evidence according to the 'rob' criteria in the 'Personalized' classification. Studies with a missing rob are assumed to be at high risk of bias. The approach used to provide a categorical judgment ("low" vs. "unclear" vs. "high) on the risk of bias of a study is left to the user.
amstar: The amstar score of the meta-analysis. Note that the amstar score should be constant for a given factor. These values are used only to stratify evidence according to the 'amstar' criteria in the 'Personalized' classification.
analysis: Whether users want to conduct specific analyses. For now, only the "allelic"
value can be specified, which multiplies by two the number of cases and controls.
discard: Whether a particular row should be removed from the analyses (any row with a "yes" or TRUE value in the discard
column will be removed).
Add evidence classes to the factors included in an umbrella review.
add.evidence( x, criteria = "Ioannidis", class_I = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), class_II = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), class_III = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), class_IV = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), verbose = TRUE )
add.evidence( x, criteria = "Ioannidis", class_I = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), class_II = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), class_III = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), class_IV = c(n_studies = NA, total_n = NA, n_cases = NA, p_value = NA, I2 = NA, imprecision = NA, rob = NA, amstar = NA, egger_p = NA, esb_p = NA, JK_p = NA, pi = NA, largest_CI = NA), verbose = TRUE )
x |
an object of class “umbrella”. |
criteria |
the evidence criteria. It must be "GRADE", "Ioannidis" or "Personalized". |
class_I |
a vector or list of threshold values required for reaching Class I in the Personalized criteria (see details below). |
class_II |
a vector or list of threshold values required for reaching Class II in the Personalized criteria (see details below). |
class_III |
a vector or list of threshold values required for reaching Class III in the Personalized criteria (see details below). |
class_IV |
a vector or list of threshold values required for reaching Class IV in the Personalized criteria (see details below). |
verbose |
logical variable indicating whether text outputs and messages should be generated. We recommend turning this option to FALSE only after having carefully read all the generated messages. |
The add.evidence()
function performs a stratification of evidence according to three criteria.
This classification allows to stratify evidence according to the criteria described in Fusar-Poli & Radua (2018). This classification proposes to stratify evidence in five ordinal classes: "Class I", "Class II", "Class III", "Class IV", "Class ns". The criteria for each class are the following:
Class I: number of cases > 1000, p-value of the meta-analysis < ,
< 0.5, 95% prediction interval excluding the null, p-value of the Egger test > .05 and p-value of the excess of statistical significance test > .05.
Class II: number of cases > 1000, p-value of the meta-analysis < , largest study with a statistically significant effect and class I criteria not met.
Class III: number of cases > 1000, p-value of the meta-analysis < and class I-II criteria not met.
Class IV: p-value of the meta-analysis < 0.05 and class I-III criteria not met.
Class ns: p-value of the meta-analysis >= 0.05. To apply this classification with R and Z effect size measures, you should indicate both the 'n_sample' AND the 'n_cases'.
This classification allows to stratify evidence according to four ordinal classes: "High", "Moderate", "Low", "Very low". Importantly, this classification should not be taken as an equivalent to the subjective approach underlying the standard GRADE classification However, in line with the standard GRADE approach, this classification uses a downgrading procedure in which all factors start with a "High" evidence class that could then be downgraded according to the following criteria:
Imprecision: a total number of participants included in the meta-analysis giving a lower power than 0.8 to detect a SMD = 0.20 leads to a downgrading of 1 class. A number of participants giving a lower power than 0.8 to detect a SMD = 0.50, leads to a downgrading of 2 classes.
Limitations: a proportion of participants included in studies at low risk of bias inferior to 75% leads to a downgrading of 1 class. A proportion inferior to 50% leads to a downgrading of 2 classes.
Publication bias: a p-value of an Egger's test < .10 leads to a downgrading of 1 class.
Inconsistency: an value >= 0.5 leads to a downgrading of 1 class.
This classification is not available for R and Z effect size measures.
Because the "Ioannidis" and "GRADE" classifications do not necessarily provide a rating system that perfectly matches the requirements of your umbrella review, the add.evidence()
function offers the possibility to use a "Personalized" criteria to stratify the evidence according to 13 criteria. This Personalized criteria proposes to stratify the evidence in 5 ordinal classes: "Class I", "Class II", "Class III", "Class IV" and "Class V". "Class I" is the highest class that could be achieved and "Class V" is the lowest.
The overall class achieved by a factor is equal to the lowest class achieved by all the criteria used to stratify evidence. For example, if users choose to stratify the evidence according to 3 criteria (the p-value of the meta-analysis, the inconsistency, the publication bias), and that the classes achieved by these 3 criteria are respectively "Class I", "Class III" and "Class IV", the overall class reached by the factor will be "Class IV".
To determine the class that should be assigned to a factor, users have to indicate - for each class - a vector/list of threshold values for all the criteria that are used to stratify the evidence.
A description of the criteria and their corresponding inputs is provided below:
n_studies
: a number of studies included in the meta-analysis. If the number of studies included in the meta-analysis is strictly superior to the threshold value indicated in studies
, the class for which this value is indicated can be reached.
total_n
: a total number of participants included in the meta-analysis. If the total number of participants included in the meta-analysis is strictly superior to the threshold value indicated in total_n
, the class for which this value is indicated can be reached.
n_cases
: a number of cases included in the meta-analysis. If the number of cases included in the meta-analysis is strictly superior to the threshold value indicated in cases
, the class for which this value is indicated can be reached.
p_value
: a p-value of the pooled effect size under the random-effects model. If the p-value of the pooled effect size is strictly inferior to the threshold value indicated in p.value
, the class for which this value is indicated can be reached.
I2
: an i-squared () value. If the
value of the meta-analysis is strictly inferior to the threshold value indicated in
I2
, the class for which this value is indicated can be reached.
imprecision
: a SMD value that will be used to calculate the statistical power of the meta-analysis. If the number of participants included in the meta-analyses allows to obtain a statistical power strictly superior to 80% for the SMD value indicated in imprecision
, the class for which this value is indicated can be reached.
rob
: a percentage of participants included in studies at low risk of bias. Note that the approach to determining whether a study is at low risk of bias is left to the user. If the percentage of participants included in studies at low risk of bias is strictly superior to the threshold value indicated in rob
, the class for which this value is indicated can be reached.
amstar
: an AMSTAR rating on the methodological quality of the meta-analysis. If the AMSTAR value of the meta-analysis is strictly superior to the threshold value indicated in amstar
, the class for which this value is indicated can be reached.
egger_p
: a p-value of an Egger's test for publication bias. If the p-value of the Egger's test is strictly superior to the threshold value indicated in egger_p
, the class for which this value is indicated can be reached.
esb_p
: a p-value of a test for excess of statistical significance bias (ESB). If the p-value of the test is strictly superior to the threshold value indicated in esb_p
, the class for which this value is indicated can be reached.
JK_p
: the largest p-value obtained in the jackknife meta-analysis (JK). If the largest p-value obtained in the jackknife meta-analysis is strictly inferior to the threshold value indicated in JK_p
, the class for which this value is indicated can be reached.
pi
: a "notnull" value indicates that users request the 95% prediction interval of the meta-analysis to exclude the null value to achieve the class for which it is indicated.
largest_CI
: a "notnull" value indicates that users request the 95% confidence interval of the largest study included in the meta-analysis to exclude the null value to achieve the class for which it is indicated.
Return an object of class “umbrella” with the evidence classes added.
Fusar-Poli, P., & Radua, J. (2018). Ten simple rules for conducting umbrella reviews. Evidence-Based Mental Health, 21, 95-100.
umbrella()
for conducting an umbrella review.
### perform calculations required for an umbrella review df <- subset(df.SMD, factor == "Surgical") umb.full <- umbrella(df) ### stratify evidence according to the Ioannidis classification evid_ioannidis <- add.evidence(umb.full, criteria = "Ioannidis") summary(evid_ioannidis) ### stratify evidence according to the Personalized classification with ### the number of studies and cases, the inconsistency as criteria. ### - a class I can be reached if the number of studies is > 10, the number of cases is > 500 and ### the I2 is < 25%. ### - a class II can be reached if the number of studies is > 5, the number of cases is > 400 and ### the I2 is < 50%. ### - a class III can be reached if the number of cases is > 300 and the I2 is < 75%. ### - a class IV can be reached if the number of cases is > 100. ### - else, if the number of cases is <= 100, a class V is assigned. evid_perso1 <- add.evidence(umb.full, criteria = "Personalized", class_I = c(n_studies = 10, n_cases = 500, I2 = 25), class_II = c(n_studies = 5, n_cases = 400, I2 = 50), class_III = c(n_cases = 300, I2 = 75), class_IV = c(n_cases = 100)) summary(evid_perso1)
### perform calculations required for an umbrella review df <- subset(df.SMD, factor == "Surgical") umb.full <- umbrella(df) ### stratify evidence according to the Ioannidis classification evid_ioannidis <- add.evidence(umb.full, criteria = "Ioannidis") summary(evid_ioannidis) ### stratify evidence according to the Personalized classification with ### the number of studies and cases, the inconsistency as criteria. ### - a class I can be reached if the number of studies is > 10, the number of cases is > 500 and ### the I2 is < 25%. ### - a class II can be reached if the number of studies is > 5, the number of cases is > 400 and ### the I2 is < 50%. ### - a class III can be reached if the number of cases is > 300 and the I2 is < 75%. ### - a class IV can be reached if the number of cases is > 100. ### - else, if the number of cases is <= 100, a class V is assigned. evid_perso1 <- add.evidence(umb.full, criteria = "Personalized", class_I = c(n_studies = 10, n_cases = 500, I2 = 25), class_II = c(n_studies = 5, n_cases = 400, I2 = 50), class_III = c(n_cases = 300, I2 = 75), class_IV = c(n_cases = 100)) summary(evid_perso1)
Fictitious dataset of four meta-analyses of RCTs assessing the efficacy of yoga, aerobic training, resistance training and mindfulness on a binary outcome
df.HR
df.HR
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the intervention studied. |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
measure | type of effect size (HR). |
value | HR value. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases | number of cases. |
n_controls | number of controls. |
No source, the data are entirely fictitious
Fictitious dataset of a meta-analysis of prospective cohorts assessing adverse effects of smoking on one binary outcome.
df.IRR
df.IRR
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the factor (only one factor is included). |
author | first study author of the individual studies |
year | year of publication of the individual studies. |
measure | type of effect size (IRR). |
value | IRR value. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases | number of cases (sum of the number of cases in the exposed and non-exposed |
groups). | |
n_cases_exp | number of cases in the exposed group. |
n_cases_nexp | number of cases in the non-exposed group. |
time | total person-time at risk (sum of the person-time at risk in the exposed and |
non-exposed groups). | |
time_exp | person-time at risk in the exposed group. |
time_nexp | person-time at risk in the non-exposed group. |
No source, the data are entirely fictitious
Fictitious dataset of four meta-analyses of cross-sectional studies assessing a risk factor for neurodevelopmental disorders.
df.OR
df.OR
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the neurodevelopmental disorders on which the effect of the risk factor |
is studied | |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
measure | type of effect size (OR). |
value | OR value. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases | number of cases (sum of the number of cases in the exposed |
and non-exposed groups). | |
n_controls | number of controls (sum of the number of controls in the exposed |
and non-exposed groups). | |
n_exp | number of participants in the exposed group (sum of the number of cases and |
controls in the exposed group). | |
n_nexp | number of participants in the non-exposed group (sum of the number of cases |
and controls in the non-exposed group). | |
n_cases_exp | number of cases in the exposed group. |
n_controls_exp | number of controls in the exposed group. |
n_cases_nexp | number of cases in the non-exposed group. |
n_controls_nexp | number of controls in the non-exposed group. |
No source, the data are entirely fictitious
Fictitious dataset including meta-analyses with dependent effect sizes.
df.OR.multi
df.OR.multi
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the intervention studied. |
author | first study author of the individual studies |
year | year of publication of the individual studies. |
measure | type of effect size (OR). |
value | OR value. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases | number of cases (sum of the number of cases in the exposed and |
non-exposed groups). | |
n_controls | number of controls (sum of the number of controls in the exposed |
and non-exposed groups). | |
n_cases_exp | number of cases in the exposed group. |
n_controls_exp | number of controls in the exposed group. |
n_cases_nexp | number of cases in the non-exposed group. |
n_controls_nexp | number of controls in the non-exposed group. |
multiple_es | indicates the reason of the presence for multiple effect sizes |
(due to multiple groups or outcomes) per study. | |
No source, the data are entirely fictitious
Fictitious dataset of four meta-analyses of cross-sectional studies exploring the association between pre- or peri-pregnancy indicators and a numeric variable.
df.R
df.R
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the factors. |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
measure | type of effect size (R). |
value | R value. |
n_sample | total number of individuals in the sample. |
No source, the data are entirely fictitious
Real dataset taken from Tortella-Feliu et al. (2019).
df.radua2019
df.radua2019
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the risk factor. |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
multiple_es | indicates the reason of the presence of multiple effect sizes |
(due to multiple groups or outcomes) per study. | |
measure | type of effect size. |
value | value of the effect size. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases | number of cases. |
n_controls | number of controls. |
n_exp | number of participants in the exposed group (sum of the number of cases |
and controls in the exposed group). | |
n_nexp | number of participants in the non-exposed group (sum of the number of cases |
and controls in the non-exposed group). | |
n_cases_exp | number of cases in the exposed group. |
n_controls_exp | number of controls in the exposed group. |
n_cases_nexp | number of cases in the non-exposed group. |
n_controls_nexp | number of controls in the non-exposed group. |
mean_cases | means of participants in the experimental arm. |
sd_cases | standard deviation of participants in the experimental arm. |
mean_controls | means of participants in the control arm. |
sd_controls | standard deviation of participants in the control arm. |
amstar | AMSTAR score of the meta-analysis |
Tortella-Feliu, M. and Fullana, M.A., Perez-Vigil, A., Torres, X., Chamorro, J., and Littarelli, S.A., ..., & Radua, J. (2019). Risk Factors for Posttraumatic Stress Disorder: An Umbrella Review of Systematic Reviews and Meta-Analyses. Neuroscience & Biobehavioral Reviews, 107, 154–165.
Fictitious dataset of a meta-analysis of cohort studies assessing the risks of adverse outcomes when taking selective serotonin reuptake inhibitors (SSRIs) therapy.
df.RR
df.RR
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the type of antidepressant studied. |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
measure | type of effect size (RR). |
value | RR value. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases_exp | number of cases in the exposed group. |
n_exp | number of participants in the exposed group (sum of the number of cases and |
controls in the exposed group). | |
n_cases_nexp | number of cases in the non-exposed group. |
n_nexp | number of participants in the non-exposed group (sum of the number of cases |
and controls in the non-exposed group). | |
No source, the data are entirely fictitious
Fictitious dataset of three meta-analyses of RCTs assessing the efficacy of an intervention on a continuous outcome in 3 populations.
df.SMC
df.SMC
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the population studied. |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
measure | type of effect size (SMC). |
value | SMC value. |
se | standard error of the SMC. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
n_cases | number of cases. |
n_controls | number of controls. |
mean_cases | means at post-test of patients in the experimental arm. |
mean_controls | means at post-test of patients in the control arm. |
sd_cases | standard deviations at post-test of patients in the experimental arm. |
sd_controls | standard deviations at post-test of patients in the control arm. |
mean_pre_cases | means at baseline of patients in the experimental arm. |
mean_pre_controls | means at baseline of patients in the control arm. |
sd_pre_cases | standard deviations at baseline of patients in the experimental arm. |
sd_pre_controls | standard deviations at baseline of patients in the control arm. |
mean_change_cases | mean change score of patients in the experimental arm. |
mean_change_controls | mean change score of patients in the control arm. |
sd_change_cases | standard deviations of the change score of patients in the experimental arm. |
sd_change_controls | standard deviations of the change score of patients in the control arm. |
No source, the data are entirely fictitious
Fictitious dataset of two meta-analyses of RCTs assessing the efficacy of surgical and pharmacological interventions on a numeric outcome.
df.SMD
df.SMD
The dataset contains the following variables:
meta_review | name of the first author of the meta-analysis. |
factor | name of the intervention studied. |
author | first study author of the individual studies. |
year | year of publication of the individual studies. |
measure | type of effect size (SMD). |
value | SMD value. |
se | standard error of the SMD. |
ci_lo | lower bound of the 95% confidence interval. |
ci_up | upper bound of the 95% confidence interval. |
mean_cases | means of patients in the experimental arm. |
mean_controls | means of patients in the control arm. |
sd_cases | standard deviations of patients in the experimental arm. |
sd_controls | standard deviations of patients in the control arm. |
n_cases | number of patients in the experimental arm. |
n_controls | number of patients in the control arm. |
rob | risk of bias of the individual studies. |
amstar | AMSTAR score of the meta-analysis. |
No source, the data are entirely fictitious
This is a non-formatted dataset that is used in a vignette to illustrate how obtaining a well-formatted dataset
with the help of the view.errors.umbrella()
function.
df.train
df.train
The dataset contains the following variables:
comment | comments on studies. |
risk_factor | name of the intervention studied. |
author_study | first study author of the individual studies. |
year_publication_study | year of publication of the individual studies. |
type_of_effect_size | type of effect size. |
number_of_cases_exposed | number of cases in the exposed group. |
number_of_cases_non_exposed | number of cases in the non-exposed group. |
number_of_controls_exposed | number of controls in the exposed group. |
number_of_controls_non_exposed | number of controls in the non-exposed group. |
number_of_participants_exposed | total number of participants in the exposed group. |
number_of_participants_non_exposed | total number of participants in the non-exposed group. |
number_of_cases | number of cases. |
number_of_controls | number of controls. |
effect_size_value | value of the effect size |
low_bound_ci | lower bound of the 95% confidence interval. |
up_bound_ci | upper bound of the 95% confidence interval. |
time_disease_free | total person-time at risk (sum of the person-time at risk in |
the exposed and non-exposed groups). | |
mean_of_intervention_group | mean of the intervention group |
mean_of_control_group | mean of the control group |
sd_of_intervention_group | sd of the intervention group |
sd_of_control_group | sd of the control group |
No source, the data are entirely fictitious
This function removes evidence classes previously created from an object of class “umbrella”
drop.evidence(x)
drop.evidence(x)
x |
an object of class “umbrella” |
Return an object of class “umbrella” with the evidence classes dropped.
Fusar-Poli, P., & Radua, J. (2018). Ten simple rules for conducting umbrella reviews. Evidence-Based Mental Health, 21, 95-100.
umbrella()
for conducting an umbrella review.
### perform calculations required for an umbrella review umb.full <- umbrella(df.SMD) ### stratify evidence according to the algorithmic GRADE criteria evid_grade <- add.evidence(umb.full, criteria = "GRADE") is.na(evid_grade$Pharmacological$evidence) evid_empty <- drop.evidence(evid_grade) is.na(evid_empty$Pharmacological$evidence)
### perform calculations required for an umbrella review umb.full <- umbrella(df.SMD) ### stratify evidence according to the algorithmic GRADE criteria evid_grade <- add.evidence(umb.full, criteria = "GRADE") is.na(evid_grade$Pharmacological$evidence) evid_empty <- drop.evidence(evid_grade) is.na(evid_empty$Pharmacological$evidence)
The esb.test()
function performs various tests to examine the presence of an excess of statistical significance in a given set of studies.
These tests aims to determine whether there is an excess in the observed number of studies with statistically significant results compared to what could have been expected.
esb.test( x, input = "dataframe", n_cases = NULL, n_controls = NULL, measure = NULL, method.esb = "TESSPSST", true_effect = "UWLS", seed = NA, tau2 = NA )
esb.test( x, input = "dataframe", n_cases = NULL, n_controls = NULL, measure = NULL, method.esb = "TESSPSST", true_effect = "UWLS", seed = NA, tau2 = NA )
x |
a well-formatted dataset or an object of class “rma” or “meta”. If a well-formatted dataset is used, only one factor should be included. |
input |
the type of object used as input. It must be |
n_cases |
vector with the number of cases of each included studies. Only required when |
n_controls |
vector with the number of controls of each included studies. Only required when |
measure |
the measure of the effect: "SMD", "MD", "R", "Z", "G", "OR" or "logOR, "RR" or "logRR", "HR" or "logHR", "IRR" or "logIRR".
If a an object of class “rma” or “meta” is used, the effect size should be either "SMD" or "OR". However, note that for “rma” objects, a SMD is systematically assumed to be a G (to respect the naming used in the metafor package). For “meta” objects, a SMD is assumed to be a G unless it is explicitly stated that this is not the case (i.e., using the |
method.esb |
the method used to conduct the test. It must be |
true_effect |
the best approximation of the true effect. It must be |
seed |
an integer value used as an argument by the set.seed() function. Only used for measures "OR", "logOR, "RR", "logRR", "IRR" or "logIRR". |
tau2 |
The tau2 value that should be used when using one of the |
The function starts by calculating whether each individual study has significant results (p < .05). Then, it estimates the statistical power of each individual study to detect an effect size equal to the best approximation of the true effect.
The true_effect
argument can be used to select the method that will be applied to estimate the true effect.
If "largest"
is entered, the true effect size is assumed to be equal to the effect size of the largest study included in the meta-analysis.
If "UWLS"
is entered, the true effect size is assumed to be equal to unrestricted weighted least squares weighted average.
If a numeric
value is entered, the true effect size is assumed to be equal to the value entered by the user (note that the value of ratios must be in their natural scale).
Last, this function performs a statistical test to determine whether the observed number of statistically significant studies is higher than expected given the mean statistical power. The method.esb
argument can be used to select the test.
If "IT.binom"
is entered, the excess statistical significance test described by Ioannidis and Trikalinos (2007) is performed using a binomial exact test. This test explores whether the number of studies with statistically significant results is higher than what could have been expected given the mean statistical power to detect the best approximation of the true effect.
If "IT.chisq"
is entered, the excess statistical significance test described by Ioannidis and Trikalinos (2007) is performed using a chi-square test. This test explores whether the number of studies with statistically significant results is higher than what could have been expected given the mean statistical power to detect the best approximation of the true effect.
If "TESS"
is entered, the test of excess statistical significance (TESS) described by Stanley and colleagues (2021) is performed. This test assesses whether the proportion of excess statistical significance is larger than 5%. In this test, power calculations take into account between-study heterogeneity.
If "PSST"
is entered, the proportion of statistical significance test (PSST) described by Stanley and colleagues (2021) is performed. This is a test assessing whether the proportion of statistically significant studies is higher than what could have been expected given the mean statistical power. In this test, power calculations take into account between-study heterogeneity.
If "TESSPSST"
is entered, the function combines results of both "PSST" and "TESS" analyses. "TESSPSST" assumes an excess of statistical significance if at least one of "TESS" and "PSST" is statistically significant.
The dataset contains the following columns:
method |
method used to conduct the test. |
p.value |
p-value for the test statistic. |
power |
the power of each individual study to detect the best |
approximation of the true effect (true_effect ) at an alpha of .05. |
|
mean_power |
the mean power of all individual studies to detect the best |
approximation of the true effect (true_effect ) at an alpha of .05. |
|
k |
the total number of studies. |
sig |
whether each individual study has statistically significant results. |
O |
the total number of studies with statistically significant results. |
E |
the total expected number of studies with statistically significant results. |
Ioannidis, JPA., Munafo, MR., Fusar-Poli, P., Nosek, BA., & David, SP. (2014). Publication and other reporting biases in cognitive sciences: detection, prevalence, and prevention. Trends in Cognitive Sciences, 18, 235-241.
### load a well-formatted dataframe with a single factor df <- df.SMD[df.SMD$factor == "Surgical", ] ### perform an excess significance bias directly on this dataframe esb <- esb.test(df, measure = "SMD", input = "dataframe", method.esb = "IT.binom", true_effect = "largest") ### perform an excess significance bias using the umbrella function esb.umbrella <- umbrella(df, method.esb = "IT.binom", true_effect = "largest")[[1]]$esb ### perform an excess significance bias on a rma object ### we convert the SMD into Hedges' g G <- metaumbrella:::.estimate_g_from_d(df$value, df$n_cases, df$n_controls) rma <- metafor::rma(yi = G$value, sei = G$se, measure = "SMD", ni = df$n_cases + df$n_controls, data = df) esb.rma <- esb.test(rma, n_cases = df$n_cases, input = "rma", method.esb = "IT.binom") ### perform an excess significance bias on a meta object meta <- meta::metagen(TE = G$value, seTE = G$se, sm = "SMD", n.e = n_cases, n.c = n_controls, data = df) esb.meta <- esb.test(meta, input = "meta", method.esb = "IT.binom") all.equal(esb$p.value, esb.umbrella$p.value, esb.rma$p.value, esb.meta$p.value)
### load a well-formatted dataframe with a single factor df <- df.SMD[df.SMD$factor == "Surgical", ] ### perform an excess significance bias directly on this dataframe esb <- esb.test(df, measure = "SMD", input = "dataframe", method.esb = "IT.binom", true_effect = "largest") ### perform an excess significance bias using the umbrella function esb.umbrella <- umbrella(df, method.esb = "IT.binom", true_effect = "largest")[[1]]$esb ### perform an excess significance bias on a rma object ### we convert the SMD into Hedges' g G <- metaumbrella:::.estimate_g_from_d(df$value, df$n_cases, df$n_controls) rma <- metafor::rma(yi = G$value, sei = G$se, measure = "SMD", ni = df$n_cases + df$n_controls, data = df) esb.rma <- esb.test(rma, n_cases = df$n_cases, input = "rma", method.esb = "IT.binom") ### perform an excess significance bias on a meta object meta <- meta::metagen(TE = G$value, seTE = G$se, sm = "SMD", n.e = n_cases, n.c = n_controls, data = df) esb.meta <- esb.test(meta, input = "meta", method.esb = "IT.binom") all.equal(esb$p.value, esb.umbrella$p.value, esb.rma$p.value, esb.meta$p.value)
Draw a forest plot of the factors included in an umbrella review.
x |
an object of class “umbrella” or “data.frame” |
... |
additional arguments that can be passed to this function |
For now, this function simply applies the forest.umbrella()
function.
In addition to the plot, the function returns a list including:
a dataset with the factors, their class and their effect size. Particularly useful when adding a column via the 'add_columns' argument to obtain the ordering of the factors in the plot. See the vignette dedicated to the forest plots for a concrete example.
the optimal width and height of the plot, useful when calling the function pdf()
or png()
.
forest(umbrella(df.SMD))
forest(umbrella(df.SMD))
Draw a forest plot of the factors included in an umbrella review. This function is now a wrapper around the amazing forest.meta function designed by Guido Schwarzer and Gerta Rucker. You can thus add any other arguments available in the forest.meta function but not detailed here.
## S3 method for class 'umbrella' forest( x, layout = "meta", measure = "auto", leftcols = NULL, leftlabs = NULL, rightcols = NULL, rightlabs = NULL, digits = 2, smlab = "", xlab = NULL, type.study = "square", print.classes = FALSE, subgroup = NULL, subgroup.name = "", col.square = "gray", col.study = "black", col.square.lines = "black", fontsize = 12, spacing = 1, squaresize = 0.8/spacing, ... )
## S3 method for class 'umbrella' forest( x, layout = "meta", measure = "auto", leftcols = NULL, leftlabs = NULL, rightcols = NULL, rightlabs = NULL, digits = 2, smlab = "", xlab = NULL, type.study = "square", print.classes = FALSE, subgroup = NULL, subgroup.name = "", col.square = "gray", col.study = "black", col.square.lines = "black", fontsize = 12, spacing = 1, squaresize = 0.8/spacing, ... )
x |
an object of class “umbrella” or a or “data.frame” object returned by the |
layout |
type of layout of the plot ("meta", "JAMA" or "RevMan5"). |
measure |
type of effect size used in the plot ("eG", "eOR", "raw" or "auto"). Default is the most frequently used effect size measure. |
leftcols |
vector of columns contained in the object passed to the |
leftlabs |
vector of column names used to specify column names printed on the left side of the forest plot. |
rightcols |
vector of columns contained in the object passed to the |
rightlabs |
vector of column names used to specify column names printed on the left side of the forest plot. |
digits |
number of digits to display |
smlab |
character string describing the title of the plot |
xlab |
character string describing the x-axis title |
type.study |
the shape used to depict the pooled effect size (must be either "square", "diamond", or "predict") |
print.classes |
a vector of classes. Only factors reaching these classes will be displayed on the plot. These classes must be "I", "II", "III", "IV" and/or "ns" for the "Ioannidis" classification, or "High", "Moderate", "Weak" and/or "Very weak" for the "GRADE" classification, or "I", "II", "III", "IV", and/or "V" for the "Personalized" classification |
subgroup |
a character variable indicating the name of the column that should be used as header for creating subgroups between the factors |
subgroup.name |
a character variable displayed just before each modality of the subgroup variable |
col.square |
The colour for squares reflecting study's weight in the meta-analysis. |
col.study |
The colour for individual study results and confidence limits. |
col.square.lines |
The colour for the outer lines of squares reflecting study weight in the meta-analysis. |
fontsize |
The size of text (in points) |
spacing |
A numeric variable determining line spacing in a forest plot. |
squaresize |
A numeric variable used to increase or decrease the size of squares in the forest plot. |
... |
additional arguments that can be passed to the forest.umbrella function |
The function allows to have a visualization of the results of an umbrella review. Various parameters, such as the type of effect size displayed, the restriction to some classes or the color of the dots, allows to simplify the visualization.
Return a forest plot of the pooled effect sizes, along with additional information
Balduzzi S, Rucker G, Schwarzer G (2019). How to perform a meta-analysis with R: a practical tutorial. Evidence-Based Mental Health, 153–160.
### perform an umbrella review umb <- umbrella(df.OR) ### generate a forest plot of each factor included in the umbrella review forest(umb) ## Not run: forest(umbrella(df.SMD)) ## End(Not run)
### perform an umbrella review umb <- umbrella(df.OR) ### generate a forest plot of each factor included in the umbrella review forest(umb) ## Not run: forest(umbrella(df.SMD)) ## End(Not run)
This function allows to estimate the primary study overlap across reviews
overlap.prim( x, ID = "factor", presentation = "%", cut_off = c(0.05, 0.1, 0.15), enhanced = TRUE )
overlap.prim( x, ID = "factor", presentation = "%", cut_off = c(0.05, 0.1, 0.15), enhanced = TRUE )
x |
an 'umbrella' object |
ID |
a character variable indicating whether the overlap should be looked across 'factor' or across 'meta_review'. |
presentation |
the type of presentation for the overlap. Can be precise percentages ('%') or symbols ('+'). |
cut_off |
a vector of 3 cut-off values used only if the 'presentation' argument is set as '+'. |
enhanced |
a logical variable indicating whether you want a narrative description of the information stored in the rows/columns returned by this function. |
This function returns a dataframe with 1 row/column per factor or meta-review. As in a correlation matrix, the cell at the intersection of a row and a column contains the desired information (i.e. the overlap between primary studies for the column and row names).
Pérez-Bracchiglione, J., Meza, N., Bangdiwala, S. I., Niño de Guzmán, E., Urrútia, G., Bonfill, X., & Madrid, E. (2022). Graphical Representation of Overlap for OVErviews: GROOVE tool. Research synthesis methods, 13(3), 381–388. https://doi.org/10.1002/jrsm.1557
overlap.prim(umbrella(df.radua2019[sample(x = 1:250, size = 50), ], mult.level=TRUE, verbose = FALSE), presentation = "+", cut_off = c(.05,.15,.25))
overlap.prim(umbrella(df.radua2019[sample(x = 1:250, size = 50), ], mult.level=TRUE, verbose = FALSE), presentation = "+", cut_off = c(.05,.15,.25))
Print a summary of an object of class “umbrella”
## S3 method for class 'umbrella' print(x, ...)
## S3 method for class 'umbrella' print(x, ...)
x |
an object of class “umbrella” |
... |
other arguments that can be passed to the function |
Summary method for objects of class “umbrella”.
Implicitly calls the summary.umbrella()
function and displays error or warning messages below the object returned.
This is useful when many factors are included in the review and that the results of the summary.umbrella()
are not stored in an object.
### print the results of an object of class umbrella umbrella(df.OR.multi, mult.level = TRUE)
### print the results of an object of class umbrella umbrella(df.OR.multi, mult.level = TRUE)
Create a subset of an object of class “umbrella”
## S3 method for class 'umbrella' subset(x, subset, ...)
## S3 method for class 'umbrella' subset(x, subset, ...)
x |
an object of class “umbrella”. |
subset |
logical expression indicating elements or rows to keep: missing values are taken as |
... |
other arguments that can be passed to the function |
Return an object of class “umbrella” with the results of some factors removed.
### perform calculations required for an umbrella review umb <- umbrella(df.OR) ### subset the results to factors "ADHD" & "dyslexia" subset.umb <- subset.umbrella(umb, unique(df.OR$factor) %in% c("ADHD", "dyslexia")) summary(subset.umb)
### perform calculations required for an umbrella review umb <- umbrella(df.OR) ### subset the results to factors "ADHD" & "dyslexia" subset.umb <- subset.umbrella(umb, unique(df.OR$factor) %in% c("ADHD", "dyslexia")) summary(subset.umb)
Synthesize information of an object of class “umbrella” in a dataframe
## S3 method for class 'umbrella' summary(object, digits = 3, het_max = FALSE, ...)
## S3 method for class 'umbrella' summary(object, digits = 3, het_max = FALSE, ...)
object |
an object of class “umbrella” |
digits |
an integer value specifying the number of decimal places for the rounding of numeric values. Default is 3. |
het_max |
a logical variable indicating whether additional information on heterogeneity should be printed ( |
... |
other arguments that can be passed to the function |
Summary method for objects of class “umbrella”.
All main results of an object of class “umbrella” are synthesized in a dataframe, with the results of each factors stored in their own row. Depending on the classification used, the dataframe returned include certain information presented below:
Factor |
the name of the factor. |
Class |
the class assigned during the stratification of evidence. |
n_studies |
the number of independent studies included in the factor. |
total_n |
the total number of participants included in the factor. |
n_cases |
the number of cases included in the factor. |
n_controls |
the number of controls included in the factor. |
measure |
the measured used in the calculations. |
value |
the value of the pooled effect size expressed in its original metric. Note that |
if a factor includes only one study, its effect size is used as the pooled effect size. | |
value_CI |
the 95% confidence interval (CI) around the pooled effect size expressed |
in its original metric. Note that if a factor includes only one study, its 95% CI is | |
used as the pooled 95% CI. | |
eG |
the value of the pooled effect size expressed in equivalent Hedges' g (eG). |
eG_CI |
the 95% CI around the pooled effect size expressed in eG. |
eOR |
the value of the pooled effect size expressed in equivalent Odds ratio (eOR). |
eOR_CI |
the 95% CI around the pooled effect size expressed in eOR. |
p_value |
the p-value of the pooled effect size. |
I2 |
the inconsistency ( ) value (calculated only if the number of studies in the |
meta-analysis is equal or larger to 2). | |
PI_eG |
the 95% prediction interval (PI) expressed in eG (calculated only if the number |
of studies in the meta-analysis is equal or larger to 3). | |
PI_eOR |
the 95% PI expressed in eOR (calculated only if the number of studies in the |
meta-analysis is equal or larger to 3). | |
PI_sign |
whether the 95% PI includes the null value ("notnull" vs. "null"). |
egger_p |
the p-value of the Egger's test for publication bias (calculated only |
if the number of studies in the meta-analysis is equal or larger to 3). | |
egger_sign |
whether the p-value of the Egger's test is < .05 ("sig." vs. "ns"). |
ESB_p |
the p-value of the test for excess of significance bias. |
ESB_sign |
whether the p-value of the excess of significance test is < .05 ("sig." vs. "ns"). |
power_med |
the power to detect a SMD of 0.5 at an alpha of .05 based on the number of |
cases and controls included in the meta-analysis (when IRR is used as effect size | |
measure, the number of cases and controls in this calculation is assumed to be equal to | |
half the total number of cases included in the meta-analysis). | |
power |
present only in the 'Personalized' classification. |
- If the user did not use the 'power' criteria to stratify the evidence, this column | |
contains the power to detect a small effect size (SMD = 0.2), a moderate effect | |
size (SMD = 0.5) and a large effect size (SMD = 0.8) at an alpha of .05 based on | |
the number of cases and controls included in the meta-analysis. | |
- If the user used the 'power' criteria to stratify the evidence, this column contains | |
the power to detect the values entered by the user at an alpha of .05 based on the | |
number of cases and controls included in the meta-analysis. | |
JK_p |
the largest p-value obtained in the jackknife leave-one-out meta-analysis (calculated |
only if the number of studies in the meta-analysis is equal or larger to 2) | |
JK_sign |
whether the largest p-value in the jackknife meta-analysis is < .05 ("sig." vs. "ns") |
largest_CI_eG |
the 95% CI of the largest study expressed in eG |
largest_CI_eOR |
the 95% CI of the largest study expressed in eOR |
largest_sign |
whether the 95% CI of the largest study includes the null value ("notnull" vs. |
"null") | |
rob |
the percentage of participants included in studies at low risk of bias (calculated |
only if this information is indicated in the dataset) | |
amstar |
the AMSTAR score of the meta-analysis (calculated only if this information is |
indicated in the dataset) | |
metaumbrella-package()
for the formatting of well-formatted datasetsumbrella()
for conducting calculations needed for an umbrella reviewadd.evidence()
for stratifying evidence in an umbrella review
### generate a summary of the results of an umbrella object summary(umbrella(df.SMD))
### generate a summary of the results of an umbrella object summary(umbrella(df.SMD))
This function performs various calculations needed for an umbrella review.
umbrella( x, method.var = "REML", mult.level = FALSE, r = 0.5, method.esb = "TESSPSST", true_effect = "UWLS", pre_post_cor = NA, seed = NA, verbose = TRUE )
umbrella( x, method.var = "REML", mult.level = FALSE, r = 0.5, method.esb = "TESSPSST", true_effect = "UWLS", pre_post_cor = NA, seed = NA, verbose = TRUE )
x |
a well-formatted dataset. |
method.var |
the estimator used to quantify the between-study variance in the random-effects meta-analysis. Default is the Restricted Likelihood Maximum ("REML") estimator. Alternatively, DerSimonian and Laird |
mult.level |
a logical variable indicating the presence of multiple effect sizes per study in at least one factor of the umbrella review. Default is |
r |
a correlation coefficient indicating the strength of the association between multiple outcomes (or time-points) within the same study. The |
method.esb |
the method used to conduct the excess of statistical significance test. It must be |
true_effect |
the method to estimate the true effect in the test for excess significance. It must be |
pre_post_cor |
The value of the correlation coefficient between baseline and follow-up scores in pre-post studies. If your umbrella review includes pre-post controlled studies, you should indicate the mean pre-post correlation across groups. Only needed when using the SMC measure. |
seed |
an integer value used as an argument by the set.seed() function. Only used for the |
verbose |
a logical variable indicating whether text outputs and messages should be generated. We recommend turning this option to FALSE only after having carefully read all the generated messages. |
This function automatically performs calculations allowing to stratify evidence according to various criteria. For each factor included in a well-formatted dataset, this function automatically:
performs fixed- or random-effects meta-analyses.
provides an estimation of the between-study variance and heterogeneity using three indicators (, Q-statistic and
statistic).
estimates the 95% prediction interval (if the number of studies is equal or larger to 3).
provides an identification of the statistical significance of the largest study included in the meta-analysis.
provides an assessment of publication bias using the Egger's test (if the number of studies is equal or larger to 3).
provides an assessment of excess significance using various methods.
performs a jackknife leave-one-out meta-analysis (if the number of studies is equal or larger to 2).
calculates the proportion of participants included in studies at low risk of bias (if study quality is indicated in the dataset).
A specificity of the umbrella()
function is that it does not include arguments to specify the name of the columns of the dataset used as input.
Instead, the function requires users to prepare a dataset that meets fixed rules.
Details on how building this well-formatted dataset
are given in the metaumbrella-package
section of this manual. A vignette also provides a step-by-step tutorial.
Moreover, examples of well-formatted datasets
are available as data distributed along with the package (see df.OR, df.OR.multi, df.R, df.SMC,df.SMD, df.RR, df.HR, df.IRR).
When estimating the test for excess significance, the umbrella()
function must assume a best approximation of the true effect.
The true_effect
argument can be used to select the method that will be applied to estimate the true effect.
If "largest"
is entered, the true effect size is assumed to be equal to the effect size of the largest study included in the meta-analysis.
If "pooled"
is entered, the true effect size is assumed to be equal to the meta-analytic pooled effect size.
If "UWLS"
is entered, the true effect size is assumed to be equal to unrestricted weighted least squares weighted average.
If a numeric
value is entered, the true effect size is assumed to be equal to the value entered by the user (note that the value of ratios must be in their natural scale).
Last, this function performs a statistical test to determine whether the observed number of statistically significant studies is higher than expected given the mean statistical power. The method.esb
argument can be used to select the test. Details on each method can be found in the esb.test
section.
The umbrella()
function returns an object of class “umbrella”, which is a list containing information required for stratifying the evidence.
This list contains, for each factor included in the umbrella review:
factor |
the name of the factor analyzed. |
measure |
the measure of the effect used to perform the calculations. |
x |
the data used to conduct the meta-analysis. Note that these data may be |
slightly different from the raw data introduced. | |
x_multi |
the original data when there is a multivariate structure. |
Note that these data may be slightly different from the raw data introduced. | |
x_shared |
a dataframe allowing to visualize adjustments made when a shared_nexp |
or shared_controls correction is requested | |
(see metaumbrella-package for more information). |
|
n |
the overall number of studies, cases and controls. |
method.var |
the estimator used for fitting the random effects meta-analyses |
ma_results |
pooled effect size, p-value and 95% confidence interval and prediction |
interval of the meta-analysis. | |
largest |
95% confidence interval of the largest study. |
heterogeneity |
, and results of the Q-test. |
egger |
estimate and p-value of the Egger's test for publication bias. |
esb |
results of the test for excess significance bias. See |
esb.test() for more information. |
|
riskofbias |
percentage of participants in studies at low risk of bias. |
amstar |
AMSTAR score obtained by the meta-analysis. |
evidence |
evidence class according to some criteria. |
The functions print
and summary
may be used to print the details or a summary of the results.
Fusar-Poli, P., Radua, J. (2018). Ten simple rules for conducting umbrella reviews.
Evidence-Based Mental Health, 21, 95–100.
Radua, J., Ramella-Cravaro, V., Ioannidis, J.P.A., Reichenberg, A., Phiphopthatsanee, N., Amir, T., Yenn Thoo, H., Oliver, D., Davies, C., Morgan, C., McGuire, P., Murray, R.M., Fusar-Poli, P. (2018)
What causes psychosis? An umbrella review of risk and protective factors.
World Psychiatry, 17, 49–66.
metaumbrella-package
for the formatting of well-formatted datasetsadd.evidence()
for stratifying the evidence in an umbrella reviewforest()
for drawing a forest plot of the factors included in an umbrella reviewsubset.umbrella()
for retrieving a subset of the factors included in an umbrella reviewunion.umbrella()
for combining the factors included in two umbrella reviews
### Perform an umbrella review with random-effects meta-analyses ### with a Hartung-Knapp-Sidik-Jonkman estimator umb <- umbrella(df.IRR, method.var = "hksj") ### obtain the results of the calculations in a dataframe summary(umb) ### manually inspect the results of the umbrella review calculations for the 'Smoking' factor ### included in the dataset. umb$Smoking ### Perform a meta-analysis with multilevel data, assuming a correlation of 0.8 ### between all outcomes of the same study umb.multi <- umbrella(df.OR.multi, mult.level = TRUE, r = 0.8) ### obtain a stratification of the evidence according to the Ioannidis classification add.evidence(umb.multi, criteria = "Ioannidis")
### Perform an umbrella review with random-effects meta-analyses ### with a Hartung-Knapp-Sidik-Jonkman estimator umb <- umbrella(df.IRR, method.var = "hksj") ### obtain the results of the calculations in a dataframe summary(umb) ### manually inspect the results of the umbrella review calculations for the 'Smoking' factor ### included in the dataset. umb$Smoking ### Perform a meta-analysis with multilevel data, assuming a correlation of 0.8 ### between all outcomes of the same study umb.multi <- umbrella(df.OR.multi, mult.level = TRUE, r = 0.8) ### obtain a stratification of the evidence according to the Ioannidis classification add.evidence(umb.multi, criteria = "Ioannidis")
The umbrella.gui
function allows to perform an umbrella review in R with a graphical user interface and to generate results outside of R.
umbrella.gui()
umbrella.gui()
This function implicitly calls the view.errors.umbrella()
to check the formatting of the data,
the umbrella()
function to perform calculations, the add.evidence()
function to stratify evidence (limited to "Ioannidis" and "GRADE" classifications for now)
and the forest()
function to generate a visual representation of the results.
To use this function:
The first step is to type umbrella.gui()
in the console. This will open a pop-up window.
The second step is to load a well-formatted dataset (stored in an excel file) by clicking on the button at the right of the "Excel file" label. An exploratory window will open, allowing to select the file that should be uploaded.
The third step is to select the folder where the results will be exported. Again, this can be achieved by clicking on the button at the right of the "Output folder" label, and selecting the appropriate folder thanks to the exploratory window.
Last, the classification that should be used for stratifying the evidence has to be selected. For now, "Ioannidis" and "GRADE" classifications are available.
The umbrella.gui()
function returns several elements including
csv |
a csv file containing the results of the umbrella review. |
pdf |
a pdf file containing the plot of the results (only if requested, i.e., the plot_results
|
argument is set as TRUE). | |
html |
an HTML file containing the results of the umbrella review. |
umbrella()
add.evidence()
summary.umbrella()
if(interactive()){ ### open the GUI umbrella.gui() }
if(interactive()){ ### open the GUI umbrella.gui() }
The umbrella.xls
function allows to automatically perform an umbrella review and to export results outside of R.
umbrella.xls( input_file = NULL, sheet = 1, output_path = "", output_name = "", factors_to_analyze = "", evidence = NULL, plot_results = FALSE )
umbrella.xls( input_file = NULL, sheet = 1, output_path = "", output_name = "", factors_to_analyze = "", evidence = NULL, plot_results = FALSE )
input_file |
path indicating the folder where the dataset (stored in an excel file) is located. |
sheet |
the number of the excel sheet where the data are located. |
output_path |
path indicating the folder where the results to be generated. |
output_name |
name of the files created by the function. |
factors_to_analyze |
the name(s) of factors to analyze. Can be either a character string indicating the name of the factor to analyze or a vector indicating the names of the factors to analyze. By default, all the factors are analyzed. |
evidence |
criteria used to stratify evidence. Must be either "Ioannidis" or "GRADE". |
plot_results |
indicate whether a forest plot of the results is returned. Must be either TRUE or FALSE. |
This function implicitly calls the view.errors.umbrella()
to check the formatting of the data,
the umbrella()
function to perform calculations, the add.evidence()
function to stratify evidence (limited to "Ioannidis" and "GRADE" classifications for now)
and the forest()
function to generate a visual representation of the results.
The umbrella.xls()
function returns several elements including
csv |
a csv file containing the results of the umbrella review. |
pdf |
a pdf file containing the plot of the results (only if requested, i.e., the plot_results
|
argument is set as TRUE). | |
html |
an HTML file containing the results of the umbrella review. |
umbrella()
add.evidence()
summary.umbrella()
if(interactive()){ ### perform an umbrella review according to the GRADE criteria. ### the umbrella review is restricted to the factor "Pharmacological" ### Note that the df.SMD should be stored under a .xls or .xlsx format umbrella.xls(input_file = file.choose(), sheet = 1, output_path = choose.dir(), output_name = "Pharmacological_Ioannidis", factors_to_analyze = c("Pharmacological"), evidence = "GRADE", plot_results = TRUE) }
if(interactive()){ ### perform an umbrella review according to the GRADE criteria. ### the umbrella review is restricted to the factor "Pharmacological" ### Note that the df.SMD should be stored under a .xls or .xlsx format umbrella.xls(input_file = file.choose(), sheet = 1, output_path = choose.dir(), output_name = "Pharmacological_Ioannidis", factors_to_analyze = c("Pharmacological"), evidence = "GRADE", plot_results = TRUE) }
Combine the factors included in two umbrella objects
union.umbrella(x, y, ...)
union.umbrella(x, y, ...)
x |
an object of class “umbrella”. |
y |
an object of class “umbrella”. |
... |
other arguments that can be passed to the function |
This function allows to combine the results of two objects of class “umbrella”. This function is particularly useful when different specifications are used to analyze different factors. It is not possible to union two objects of class “umbrella” with different classifications.
Return an object of class“umbrella”, with the factors of the two objects of class “umbrella”.
### union raw umbrella objects umb1 <- umbrella(df.SMD, method.var = "REML") umb2 <- umbrella(df.OR, method.var = "PM") umb.union <- union.umbrella(umb1, umb2) summary(add.evidence(umb.union, criteria = "GRADE")) ### union umbrella objects after applying stratification of evidence umb1 <- add.evidence(umbrella(df.SMD), criteria = "GRADE") umb2 <- add.evidence(umbrella(df.OR), criteria = "GRADE") umb3 <- add.evidence(umbrella(df.IRR), criteria = "GRADE") umb.union <- union.umbrella(union.umbrella(umb1, umb2), umb3) summary(umb.union)
### union raw umbrella objects umb1 <- umbrella(df.SMD, method.var = "REML") umb2 <- umbrella(df.OR, method.var = "PM") umb.union <- union.umbrella(umb1, umb2) summary(add.evidence(umb.union, criteria = "GRADE")) ### union umbrella objects after applying stratification of evidence umb1 <- add.evidence(umbrella(df.SMD), criteria = "GRADE") umb2 <- add.evidence(umbrella(df.OR), criteria = "GRADE") umb3 <- add.evidence(umbrella(df.IRR), criteria = "GRADE") umb.union <- union.umbrella(union.umbrella(umb1, umb2), umb3) summary(umb.union)
Check the formatting of a dataset to ensure it can be passed to the functions of the metaumbrella package.
view.errors.umbrella(data, return = "data_and_messages")
view.errors.umbrella(data, return = "data_and_messages")
data |
a dataframe |
return |
the type of information returned by the function. Must be either "messages", "data_and_messages", or "data". |
The functions included in the metaumbrella package require very specific formatting of the dataset (see metaumbrella-package
).
The view.errors.umbrella()
function checks that a dataframe meets all requirements of the functions of the metaumbrella package.
If this function finds some formatting issues, error messages describing the issues are produced and the rows / columns in which the issues occurred are identified.
Depending on the value passed to the return
argument, different information is returned:
"messages" |
return global messages describing the different formatting issues. |
"data" |
return the rows of the original dataset with formatting issues (see below). |
"data_and_messages" |
return both (i) global messages describing the different formatting issues and |
(ii) the rows of the original dataset with formatting issues (see below). |
When returning a dataset (i.e., when "data"
or "data_and_messages"
are indicated in the return argument), the rows with problematic formatting are identified and
two new columns are added to the original dataset (column_type_errors
and column_errors
). These columns help to understand formatting issues.
A WARNING value in the column_type_errors
column indicates a potential issue that should be checked but that do not prevent calculations.
An ERROR value in the column_type_errors
column indicates an issue that must be solved before running calculations.
The text in the column_errors
describes the issues encountered for each problematic row.
df.errors1 <- df.errors2 <- df.errors3 <- df.errors4 <- df.OR ### include some unknown measures df.errors1$measure[c(1,4,12)] <- "unknown_measure" view.errors.umbrella(df.errors1, return = "data_and_messages") ### include some not numeric inputs while expected df.errors2$value[c(2,13,15)] <- c("a", "b", "c") view.errors.umbrella(df.errors2, return = "data") ### make the lower bound of a confidence interval > to the value df.errors3$ci_lo[c(12,14,21)] <- c(5,6,7) view.errors.umbrella(df.errors3, return = "messages") ### create errors in sample sizes df.errors4$n_cases_exp[c(5,10,15)] <- c(100, 200, 300) view.errors.umbrella(df.errors4, return = "data_and_messages")
df.errors1 <- df.errors2 <- df.errors3 <- df.errors4 <- df.OR ### include some unknown measures df.errors1$measure[c(1,4,12)] <- "unknown_measure" view.errors.umbrella(df.errors1, return = "data_and_messages") ### include some not numeric inputs while expected df.errors2$value[c(2,13,15)] <- c("a", "b", "c") view.errors.umbrella(df.errors2, return = "data") ### make the lower bound of a confidence interval > to the value df.errors3$ci_lo[c(12,14,21)] <- c(5,6,7) view.errors.umbrella(df.errors3, return = "messages") ### create errors in sample sizes df.errors4$n_cases_exp[c(5,10,15)] <- c(100, 200, 300) view.errors.umbrella(df.errors4, return = "data_and_messages")