[R-meta] [metafor] Mantel-Haenszel method - rma.mh vs meta(metabin)

Dr. Guido Schwarzer gu|do@@chw@rzer @end|ng |rom un|k||n|k-|re|burg@de
Tue Jan 31 15:17:40 CET 2023


The difference is actually due to using the Paule-Mandel estimator in metabin() - argument 'method.tau = "PM"' and the REML estimator in rma() - missing argument 'method' which by default is equal to "REML".

Using argument 'addyi = FALSE' in escalc() as suggested by Wolfgang and 'method = "PM"' in rma(), you get the exact same results (R code is provided below).

In metabin(), the random effects version of the MH method is only used for the DerSimonian-Laird estimator (method.tau = "DL"). Like RevMan 5, the heterogeneity statistic Q  is then based on the MH estimator which is the main input to the DerSimonian-Laird estimator. This behaviour can be changed using argument 'Q.Cochrane = FALSE'. I just noticed that this point is not clear on the help page for 'meta-package'. I will add some details on this.

Best wishes,


df <- read_xlsx("Breast-Cancer-SLN-detection-RD-Jan2023-2.xlsx")

m.sln <- metabin(event.e = ICG_pos, n.e = ICG_total,
  event.c = RI_pos, n.c = RI_total,
  studlab = paste(Study, Year, sep = ", "), data = df,
  sm = "RD", common = FALSE,
  method.tau = "PM", method.random.ci = "HK",
  title = "SLN detection rate")

dat <- escalc(measure = "RD",
  ai = ICG_pos, ci = RI_pos, n1i = ICG_total, n2i = RI_total,
  slab = paste(Study, Year, sep = ", "),
  addyi = FALSE, data = df)
summary(dat$yi - m.sln$TE)
summary(dat$vi - m.sln$seTE^2)

res <- rma(dat, method = "PM", test = "knha")


data.frame(lower = round(m.sln$lower.random, 4),
  upper = round(m.sln$upper.random, 4))

More information about the R-sig-meta-analysis mailing list