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

m@rc@h@rms m@iii@g oii mh-@@@iytics@eu m@rc@h@rms m@iii@g oii mh-@@@iytics@eu
Wed Feb 1 20:07:17 CET 2023


Great, many thanks, Guido! 

-----Original Message-----
From: Dr. Guido Schwarzer <guido.schwarzer using uniklinik-freiburg.de> 
Sent: Dienstag, 31. Januar 2023 15:18
To: marc.harms using mh-analytics.eu; r-sig-meta-analysis using r-project.org
Subject: Re: [R-meta] [metafor] Mantel-Haenszel method - rma.mh vs meta(metabin)

Hi,

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,
Guido


library(readxl)
library(meta)
library(metafor)

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")
##
m.sln$Q.Cochrane

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")

m.sln$tau^2
res$tau2

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



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