metamerge: Merge results of two meta-analyses on the same data set

View source: R/metamerge.R

metamergeR Documentation

Merge results of two meta-analyses on the same data set

Description

This function can be used to merge results of two meta-analyses into a single meta-analysis object if they are based on the same data set. This is, for example, useful to produce a forest plot of a random-effects meta-analysis with different estimates of the between-study variance \tau^2.

Usage

metamerge(
  meta1,
  meta2,
  common1 = meta1$common,
  random1 = meta1$random,
  prediction1 = meta1$prediction,
  common2 = meta2$common,
  random2 = meta2$random,
  prediction2 = meta2$prediction,
  label1 = NULL,
  label2 = NULL,
  label1.common = label1,
  label2.common = label2,
  label1.random = label1,
  label2.random = label2,
  label1.predict = label1,
  label2.predict = label2,
  label1.subgroup = label1,
  label2.subgroup = label2,
  hetlabel1 = label1.random,
  hetlabel2 = label2.random,
  taulabel1 = label1.random,
  taulabel2 = label2.random,
  text.pooled1 = NULL,
  text.pooled2 = NULL,
  text.w.pooled1 = NULL,
  text.w.pooled2 = NULL,
  text.common1 = text.pooled1,
  text.common2 = text.pooled2,
  text.random1 = text.pooled1,
  text.random2 = text.pooled2,
  text.predict1 = text.pooled1,
  text.predict2 = text.pooled2,
  text.w.common1 = text.w.pooled1,
  text.w.common2 = text.w.pooled2,
  text.w.random1 = text.w.pooled1,
  text.w.random2 = text.w.pooled2,
  keep = FALSE,
  keep.Q = keep,
  keep.I2 = keep.Q,
  keep.w = keep,
  common = common1 | common2,
  random = random1 | random2,
  overall = common | random,
  overall.hetstat = common | random,
  prediction = prediction1 | prediction2,
  backtransf,
  warn.deprecated = gs("warn.deprecated"),
  pooled1,
  pooled2
)

Arguments

meta1

First meta-analysis object (see Details).

meta2

Second meta-analysis object (see Details).

common1

A logical indicating whether results of common effect model should be considered for first meta-analysis.

random1

A logical indicating whether results of random effects model should be considered for first meta-analysis.

prediction1

A logical indicating whether prediction interval should be considered for first meta-analysis.

common2

A logical indicating whether results of common effect model should be considered for second meta-analysis.

random2

A logical indicating whether results of random effects model should be considered for second meta-analysis.

prediction2

A logical indicating whether prediction interval should be considered for second meta-analysis.

label1

Default setting for arguments 'label1.common', 'label1.random', 'label1.predict' and 'label1.subgroup'.

label2

Default setting for arguments 'label2.common', 'label2.random', 'label2.predict' and 'label2.subgroup'.

label1.common

A character string ...

label2.common

A character string ...

label1.random

A character string ... (default label for arguments 'hetlabel1' and 'taulabel1').

label2.random

A character string ... (default label for arguments 'hetlabel2' and 'taulabel2').

label1.predict

A character string ...

label2.predict

A character string ...

label1.subgroup

A character string ...

label2.subgroup

A character string ...

hetlabel1

A character string used to label heterogeneity statistics of the first meta-analysis.

hetlabel2

A character string used to label heterogeneity statistics of the second meta-analysis.

taulabel1

A character string used to label estimate of between-study variance of the first meta-analysis.

taulabel2

A character string used to label estimate of between-study variance of the second meta-analysis.

text.pooled1

A character string used in printouts and forest plot to label the results from the first meta-analysis.

text.pooled2

A character string used in printouts and forest plot to label the results from the second meta-analysis.

text.w.pooled1

A character string used to label weights of the first meta-analysis; can be of same length as the number of pooled estimates requested in argument pooled1.

text.w.pooled2

A character string used to label weights of the second meta-analysis; can be of same length as the number of pooled estimates requested in argument pooled1.

text.common1

A character string used in printouts and forest plot to label results for common effect models from the first meta-analysis.

text.common2

A character string used in printouts and forest plot to label results for common effect models from the second meta-analysis.

text.random1

A character string used in printouts and forest plot to label results for random effects models from the first meta-analysis.

text.random2

A character string used in printouts and forest plot to label results for random effects models from the second meta-analysis.

text.predict1

A character string used in printouts and forest plot to label prediction interval from the first meta-analysis.

text.predict2

A character string used in printouts and forest plot to label prediction interval from the second meta-analysis.

text.w.common1

A character string used to label common effect weights of the first meta-analysis; can be of same length as the number of common effect estimates.

text.w.common2

A character string used to label common effect weights of the second meta-analysis; can be of same length as the number of common effect estimates.

text.w.random1

A character string used to label random effects weights of the first meta-analysis; can be of same length as the number of random effects estimates.

text.w.random2

A character string used to label random effects weights of the second meta-analysis; can be of same length as the number of random effects estimates.

keep

A logical indicating whether to keep additional information from second meta-analysis.

keep.Q

A logical indicating whether heterogeneity statistic Q of second meta-analysis should be kept or ignored.

keep.I2

A logical indicating whether heterogeneity statistic I2 of second meta-analysis should be kept or ignored.

keep.w

A logical indicating whether weights of the second meta-analysis should be kept or ignored.

common

A logical indicating whether results of common effect meta-analyses should be reported.

random

A logical indicating whether results of random effects meta-analyses should be reported.

overall

A logical indicating whether overall summaries should be reported.

overall.hetstat

A logical value indicating whether to print heterogeneity measures for overall treatment comparisons.

prediction

A logical indicating whether prediction intervals should be reported.

backtransf

A logical indicating whether results should be back transformed in printouts and plots. If backtransf=TRUE (default), results for sm="OR" are printed as odds ratios rather than log odds ratios, for example.

warn.deprecated

A logical indicating whether warnings should be printed if deprecated arguments are used.

pooled1

Deprecated argument (replaced by 'common1', 'random1', 'prediction1'). A character string indicating whether results of common effect or random effects model should be considered for first meta-analysis. Either "both", "common" or "random", can be abbreviated.

pooled2

Deprecated argument (replaced by 'common2', 'random2', 'prediction2'). A character string indicating whether results of common effect or random effects model should be considered for second meta-analysis. Either "both", "common" or "random", can be abbreviated.

Details

In R package meta, objects of class "meta" contain results of both common effect and random effects meta-analyses. This function enables the user to merge the results of two meta-analysis object if they are based on the same data set.

Applications of this function include printing and plotting results of the common effect or random effects meta-analysis and the

  • trim-and-fill method (trimfill),

  • limit meta-analyis (limitmeta from R package metasens),

  • Copas selection model (copas from R package metasens),

  • robust variance meta-analysis model (robu from R package robumeta).

The first argument (meta1) must be an object created by a meta-analysis function (see meta-object). If an object created with limitmeta or copas is provided as the first argument, this object will be returned, i.e., argument meta2 will be ignored.

The second meta-analysis could be an object created by a meta-analysis function or with trimfill, limitmeta, copas, or robu.

The created meta-analysis object only contains the study results, i.e., estimated effects and confidence intervals, from the first meta-analysis which are shown in printouts and forest plots. This only makes a difference for meta-analysis methods where individual study results differ, e.g., Mantel-Haenszel and Peto method for binary outcomes (see metabin).

R function metaadd can be used to add pooled results from any (external) meta-analysis.

R function metabind can be used to print and plot the results of several meta-analyses without the restriction that the same data set has to be used. Accordingly, individual study results are ignored.

Value

An object of class "meta" and "metamerge" with corresponding generic functions (see meta-object).

The following list elements have a different meaning:

TE, seTE, studlab

Treatment estimate, standard error, and study labels (first meta-analyis).

lower, upper

Lower and upper confidence interval limits for individual studies (first meta-analysis).

statistic, pval

Statistic and p-value for test of treatment effect for individual studies (first meta-analysis.

w.common

Vector or matrix with common effect weights.

w.random

Vector or matrix with random effects weights.

k

Vector with number of estimates (same length as number of common effect and random effects estimates).

k.study

Vector with number of studies (same length as number of common effect and random effects estimates).

k.all

Vector with total number of studies (same length as number of common effect and random effects estimates).

k.TE

Vector with number of studies with estimable effects (same length as number of common effect and random effects estimates).

k.MH

Vector with number of studies combined with Mantel-Haenszel method (same length as number of common effect and random effects estimates).

TE.common

Vector with common effect estimates.

seTE.common

Vector with standard errors of common effect estimates.

lower.common

Vector with lower confidence limits (common effect model).

upper.common

Vector with upper confidence limits (common effect model).

statistic.common

Vector with test statistics for test of overall effect (common effect model).

pval.common

Vector with p-value of test for overall effect (common effect model).

TE.random

Vector with random effects estimates.

seTE.random

Vector with standard errors of random effects estimates.

lower.random

Vector with lower confidence limits (random effects model).

upper.random

Vector with upper confidence limits (random effects model).

statistic.random

Vector with test statistics for test of overall effect (random effects model).

pval.random

Vector with p-value of test for overall effect (random effects model).

Furthermore, meta-analysis results of common effect or random effects model are taken from first meta-analysis if only random effects or common effects models are selected from both meta-analyses (arguments pooled1 and pooled2).

Author(s)

Guido Schwarzer guido.schwarzer@uniklinik-freiburg.de

See Also

metagen, metabind, metaadd

Examples

# Print results with more significant digits and do not show confidence
# intervals for tau^2 and tau
oldset <- settings.meta(digits = 6, digits.stat = 4, digits.pval = 6,
  digits.Q = 6, digits.I2 = 4, digits.H = 4,
  print.tau2.ci = FALSE, print.tau.ci = FALSE)
oldopts <- options(width = 120)

data(Fleiss1993bin)

# Mantel-Haenszel method
m1 <- metabin(d.asp, n.asp, d.plac, n.plac, data = Fleiss1993bin,
  studlab = paste(study, year), sm = "OR")
# Peto method
m2 <- update(m1, method = "Peto")
# Inverse variance method (only common effect model)
m3 <- update(m2, method = "Inverse", random = FALSE)

# Merge results from MH and Peto method
# - show individual results for MH method
#   (as this is the first meta-analysis)
# - keep all additional information from Peto meta-analysis (i.e.,
#   weights, Q statistic and I2 statistic)
m12 <- metamerge(m1, m2,
  label1 = "REML", label2 = "REML-Peto",
  label1.common = "MH", label2.common = "Peto", 
  text.common1 = "Mantel-Haenszel method",
  text.common2 = "Peto method",
  text.w.random1 = "REML", text.w.random2 = "REML-Peto",
  hetlabel1 = "MH/IV", hetlabel2 = "Peto",
  keep = TRUE)

# Add common effect results from inverse variance method
# - keep weights from IV meta-analysis
# - Q and I2 statistic are identical for sm = "MH" and sm = "Inverse"
#   as inverse variance method is used for sm = "MH" under random
#   effects model
m123 <- metamerge(m12, m3,
  label2 = "IV",
  text.common2 = "Inverse variance method",
  keep.w = TRUE)
summary(m123)
## Not run: 
forest(m123, digits = 6)

# Merge results (show individual results for Peto method)
m21 <- metamerge(m2, m1,
  label1 = "REML-Peto", label2 = "REML",
  label1.common = "Peto", label2.common = "MH", 
  hetlabel1 = "Peto", hetlabel2 = "MH/IV",
  text.common1 = "Peto method",
  text.common2 = "Mantel-Haenszel method",
  keep = TRUE)

# Add results from inverse variance method
# - keep weights from IV meta-analysis
# - Q and I2 statistic are identical for sm = "MH" and sm = "Inverse"
#   as inverse variance method is used for sm = "MH" under random
#   effects model
m213 <- metamerge(m21, m3,
  label2 = "IV",
  text.common2 = "Inverse variance method",
  keep.w = TRUE)
summary(m213)

# Random effects method using ML estimator for between-study variance tau2
m4 <- update(m1, common = FALSE, method.tau = "ML")

# Use DerSimonian-Laird estimator for tau2
m5 <- update(m4, method.tau = "DL")

# Use Paule-Mandel estimator for tau2
m6 <- update(m4, method.tau = "PM")

# Merge random effects results for ML and DL estimators
# - keep weights for DL estimator (which are different from ML)
m45 <- metamerge(m4, m5, label1 = "ML", label2 = "DL",
  text.w.random1 = "RE-ML", text.w.random2 = "RE-DL", keep.w = TRUE)
summary(m45)

# Add results for PM estimator
# - keep weights
m456 <- metamerge(m45, m6, label2 = "PM",
  text.w.random2 = "RE-PM", keep.w = TRUE)
summary(m456)

m123456 <- metamerge(m123, m456)
m123456

# Use Hartung-Knapp confidence intervals
# - do not keep information on Q, I2 and weights
m7 <- update(m4, method.random.ci = "HK",
  text.random = "Hartung-Knapp method")
m8 <- update(m5, method.random.ci = "HK",
  text.random = "Hartung-Knapp method")
m9 <- update(m6, method.random.ci = "HK",
  text.random = "Hartung-Knapp method")

# Merge results for Hartung-Knapp method (with REML and DL estimator)
# - RE weights for REML estimator are shown
m78 <- metamerge(m7, m8, label1 = "ML", label2 = "DL")
summary(m78)

m789 <- metamerge(m78, m9, label2 = "PM")
summary(m789)

# Merge everything
m1to9 <- metamerge(metamerge(m123, m456, keep.w = TRUE), m789)
summary(m1to9)

m10 <- update(m1, method = "GLMM")

m.all <- metamerge(m1to9, m10, keep.Q = TRUE,
  label2 = "GLMM", taulabel2 = "ML-GLMM")
summary(m.all)

forest(m.all, layout = "JAMA")
forest(m.all, details = TRUE)

## End(Not run)

settings.meta(oldset)
options(oldopts)


meta documentation built on Oct. 31, 2024, 5:07 p.m.