Skip to contents

Parametric, robust, and Bayesian random-effects meta-analysis.

A non-parametric meta-analysis is not available, so type = "nonparametric" is not supported.

Usage

meta_analysis(
  data,
  type = "parametric",
  random = "mixture",
  digits = 2L,
  conf.level = 0.95,
  ...
)

Arguments

data

A data frame. It must contain columns named estimate (effect sizes or outcomes) and std.error (corresponding standard errors). These two columns will be used:

type

A character specifying the type of statistical approach:

  • "parametric"

  • "nonparametric"

  • "robust"

  • "bayes"

You can specify just the initial letter (e.g. "np" or "bf"). Matching is on the initial lowercase letter only, so any other value (including capitalized values such as "Bayes") falls back to "parametric" without a warning.

random

The type of random-effects distribution for the robust meta-analysis: "mixture" (default; mixture of normals), "normal", or "t-dist" (t-distribution). Passed to metaplus::metaplus() and only used when type = "robust".

digits

Number of digits for rounding or significant figures. May also be "signif" to return significant figures or "scientific" to return scientific notation. Control the number of digits by adding the value as suffix, e.g. digits = "scientific4" to have scientific notation with 4 decimal places, or digits = "signif5" for 5 significant figures (see also signif()).

conf.level

Scalar between 0 and 1 (default: 95% confidence/credible intervals, 0.95).

...

Additional arguments passed to the respective meta-analysis function.

Value

The returned object is a tibble data frame with the additional class "statsExpressions". The exact set of columns depends on the test and, for functions that accept a type argument, on the chosen analysis (parametric, non-parametric, robust, or Bayesian). Any given call therefore returns some (not all) of the columns below.

Hypothesis testing

  • statistic: the numeric value of a statistic

  • df and/or df.error: degrees of freedom for the test. A t-test uses df.error, a chi-squared test uses df, and a parametric ANOVA uses both (numerator df and denominator df.error)

  • p.value: the p-value associated with the observed statistic (two-sided unless a one-sided alternative is requested, where supported)

  • method: the name of the inferential statistical test

Effect size estimation

  • effectsize: the name of the effect size

  • estimate: estimated value of the effect size

  • conf.level: the coverage level of the confidence/credible interval (e.g. 0.95); the interval itself spans conf.low to conf.high

  • conf.low: lower bound for the effect size estimate

  • conf.high: upper bound for the effect size estimate

  • conf.method: method used to compute the confidence/credible interval

  • conf.distribution: statistical distribution for the effect

Bayesian analysis (only when type = "bayes")

  • bf10: Bayes factor for the alternative hypothesis relative to the null

  • log_e_bf10: natural logarithm of the Bayes factor (present for most, but not all, Bayesian analyses)

  • prior.distribution, prior.scale, prior.location: prior specification used to compute the Bayes factor and posterior estimates

Pairwise comparisons (for pairwise_comparisons() and pairwise_contingency_table())

  • group1, group2: the two levels being compared

  • p.adjust.method: the adjustment method used for multiple comparisons

  • p.value.adj: the adjusted p-value; returned by pairwise_contingency_table(). Note that pairwise_comparisons() instead folds the adjusted value into p.value (and does not return a separate p.value.adj column)

Common columns

  • n.obs: sample size used for the analysis: observations for unpaired tests, complete subjects/pairs for paired two-sample tests and ANOVAs, or studies for meta-analysis

  • expression: a list-column of pre-formatted plotmath expressions; each element is a language object (not a character string) containing the statistical details, ready to be used in {ggplot2} (e.g. in labs() or annotate())

For a per-function, column-by-column breakdown of the output (and an explanation of the internal add_expression_col() engine that builds the expression column), see the Return value schema article. For more examples, see the Data frame outputs article.

Note

The package needed for the chosen type ({metafor}, {metaplus}, or {metaBMA}) is only suggested, so you will be asked to install it if it is not available.

Random-effects meta-analysis

Below is a summary of:

  • the statistical test carried out for inferential statistics

  • the type of effect size estimate and a measure of uncertainty for this estimate

  • the functions used internally to compute these details

Hypothesis testing and effect size estimation

TypeTestEffect sizeCI available?Function used
ParametricMeta-analysis via random-effects modelsbetaYesmetafor::rma()
RobustMeta-analysis via robust random-effects modelsbetaYesmetaplus::metaplus()
BayesianMeta-analysis via Bayesian random-effects modelsbetaYesmetaBMA::meta_random()

Citation

Patil, I., (2021). statsExpressions: R Package for Tidy Dataframes and Expressions with Statistical Details. Journal of Open Source Software, 6(61), 3236, https://doi.org/10.21105/joss.03236

Examples

# let's use `mag` dataset from `{metaplus}`
data(mag, package = "metaplus")
dat <- dplyr::rename(mag, estimate = yi, std.error = sei)

# ----------------------- parametric ---------------------------------------

set.seed(123)
meta_analysis(dat)
#> # A tibble: 1 × 14
#>   term    effectsize                     estimate std.error conf.level conf.low
#>   <chr>   <chr>                             <dbl>     <dbl>      <dbl>    <dbl>
#> 1 Overall meta-analytic summary estimate   -0.767     0.212       0.95    -1.18
#>   conf.high statistic  p.value weight method                        conf.method
#>       <dbl>     <dbl>    <dbl>  <dbl> <chr>                         <chr>      
#> 1    -0.351     -3.62 0.000295     NA Meta-analysis using 'metafor' Wald       
#>   n.obs expression
#>   <int> <list>    
#> 1    16 <language>

# ----------------------- robust --------------------------------------------

set.seed(123)
meta_analysis(dat, type = "robust", random = "normal")
#> # A tibble: 1 × 14
#>   term    effectsize                     estimate std.error conf.low conf.high
#>   <chr>   <chr>                             <dbl>     <dbl>    <dbl>     <dbl>
#> 1 Overall meta-analytic summary estimate   -0.746     0.234    -1.26    -0.343
#>   statistic  p.value weight conf.level method                               
#>       <dbl>    <dbl>  <dbl>      <dbl> <chr>                                
#> 1     -3.20 0.000501     NA       0.95 Robust meta-analysis using 'metaplus'
#>   conf.method n.obs expression
#>   <chr>       <int> <list>    
#> 1 Wald           16 <language>

# ----------------------- Bayesian ------------------------------------------

# suppress warnings about divergent transitions after warmup
set.seed(123)
suppressWarnings(meta_analysis(dat, type = "bayes"))
#> # A tibble: 2 × 20
#>   term    effectsize                       estimate std.error conf.level
#>   <chr>   <chr>                               <dbl>     <dbl>      <dbl>
#> 1 Overall meta-analytic posterior estimate   -0.643     0.220       0.95
#> 2 tau     meta-analytic posterior estimate    0.484     0.182       0.95
#>   conf.low conf.high weight  bf10  rhat   ess component prior.distribution
#>      <dbl>     <dbl>  <dbl> <dbl> <dbl> <dbl> <chr>     <chr>             
#> 1   -1.11     -0.242     NA  53.0     1 3507  meta      Student's t       
#> 2    0.205     0.909     NA  53.0     1 3460. meta      Inverse gamma     
#>   prior.location prior.scale method                                 conf.method
#>            <dbl>       <dbl> <chr>                                  <chr>      
#> 1              0       0.707 Bayesian meta-analysis using 'metaBMA' ETI        
#> 2              1       0.15  Bayesian meta-analysis using 'metaBMA' ETI        
#>   log_e_bf10 n.obs expression
#>        <dbl> <int> <list>    
#> 1       3.97    16 <language>
#> 2       3.97    16 <language>