Notes · methods

RevMan or metafor for your first meta-analysis?

2026-07-10

It’s the question that arrives once screening is done and the effect data is sitting in a spreadsheet: which tool actually runs the pooling. The honest answer is not a favorite. It’s a match between what the two tools assume and what your review needs to do.

Two different bets

RevMan (Cochrane’s Review Manager) is the guided path. It is built around the Cochrane review object: risk-of-bias tables, forest plots in house style, a data model that walks you from outcome to pooled estimate to a GRADE summary. That structure is the point. It’s also the ceiling. It does what a standard pairwise Cochrane review does, and stops there. No meta-regression, no multilevel models, no custom sensitivity code.

metafor is an R package. Nothing is guided; everything is scriptable. You compute effect sizes, fit the model, and re-fit it a hundred ways from a file you can re-run. The learning curve is real (you are writing R), but the payoff is reach and reproducibility: the script is the analysis, and it reproduces byte-for-byte two years later.

What shape your data must be in

This is where the choice gets concrete. Each tool wants a specific import shape.

RevMan wants per-arm summary statistics typed into its outcome form. For a continuous outcome:

Study      Mean_t  SD_t  N_t   Mean_c  SD_c  N_c
Adams2019   4.2     1.1   38    5.0     1.3    36

For a dichotomous outcome it wants the 2×2 counts: events and totals per arm. Give it those columns and it computes the MD, SMD (with the Hedges’ g correction), RR, or OR for you.

metafor wants a tidy data frame and an explicit effect-size call. The same continuous data becomes:

dat <- escalc(measure = "SMD",
              m1i = Mean_t, sd1i = SD_t, n1i = N_t,
              m2i = Mean_c, sd2i = SD_c, n2i = N_c,
              data = trials)

rma(yi, vi, data = dat)

escalc(measure = "SMD") returns the bias-corrected standardized mean difference (Hedges’ g) with its variance; rma() pools it. The shapes carry the same information: one asks you to type into a form, the other asks you to hold a data frame with the right column names.

The estimator is not the same by default

A difference worth knowing before you compare outputs: for a random-effects model, RevMan’s default heterogeneity estimator is DerSimonian–Laird, while metafor defaults to REML. On the same trials they will not print identical pooled numbers or identical tau-squared. Neither is wrong. But if you run both to check yourself, set them to the same estimator first (rma(..., method = "DL")) or you will chase a difference that is just the default.

Choosing by your situation

  • A thesis or a first pairwise review, a handful of parallel-arm RCTs, standard MD/SMD or RR/OR. RevMan. It lowers the floor, keeps you inside the Cochrane conventions your committee expects, and hands you RoB and GRADE in the same place.
  • A registered Cochrane review. RevMan. It’s the required deliverable format.
  • Meta-regression, subgroups as moderators, multiple outcomes per study, or any custom sensitivity analysis. metafor. RevMan cannot express these; metafor is built for them.
  • You know a reviewer will ask you to re-run it. metafor. A script re-runs; a GUI session gets re-clicked.

The part that outlives the tool

Whichever you pick, the pooling is the easy half. The half that gets questioned at revision is where each imported number came from: which SDs were reported, which were derived, and by what formula. RevMan and metafor both trust the sheet you hand them; the sheet is where the audit trail has to live. Keeping every input value tied to its source quote and derivation, before it reaches either tool, is what lets you answer the question two years later, whichever engine ran the forest plot.