Skip to content

forest.meta() RevMan5/BMJ smlab uses x$method for random-effects metabin() results #93

@NourEdinDarwish

Description

@NourEdinDarwish

Hi @guido-s ,
I am working on a jamovi meta-analysis module that uses meta package, and I noticed a possible labelling issue in the automatically generated smlab for forest.meta() with layout = "RevMan5" and layout = "BMJ".

For metabin(method = "MH"), the object stores:

m$method
# "MH"

m$method.random
# "Inverse"

The printed summary is clear about this:

Details of meta-analysis methods:
- Mantel-Haenszel method (common effect model)
- Inverse variance method (random effects model)

However, the generated smlab in the RevMan5/BMJ branches is built from x$method. So a random-effects-only forest plot can show:

MH, Random, 95% CI

although the random-effects method stored in the object is "Inverse".

Small reprex:

library(meta)
#> Loading required package: metabook
#> Warning: package 'metabook' was built under R version 4.5.3
#> Loading 'meta' package (version 8.5-1).
#> Type 'help(meta)' for a brief overview.
data(Fleiss1993bin)

m <- metabin(
  d.asp, n.asp,
  d.plac, n.plac,
  data = Fleiss1993bin,
  studlab = paste(study, year),
  sm = "OR",
  method = "MH",
  common = TRUE,
  random = TRUE
)

m$method
#> [1] "MH"
m$method.random
#> [1] "Inverse"
summary(m)
#>                 OR           95% CI %W(common) %W(random)
#> MRC-1 1974  0.7197 [0.4890; 1.0593]        3.2        9.3
#> CDP 1976    0.6808 [0.4574; 1.0132]        3.1        8.9
#> MRC-2 1979  0.8029 [0.6065; 1.0629]        5.7       14.2
#> GASP 1979   0.8007 [0.4863; 1.3186]        1.8        6.3
#> PARIS 1980  0.7981 [0.5526; 1.1529]        3.2       10.0
#> AMIS 1980   1.1327 [0.9347; 1.3728]       10.2       20.5
#> ISIS-2 1988 0.8950 [0.8294; 0.9657]       72.9       30.8
#> 
#> Number of studies: k = 7
#> Number of observations: o = 28003 (o.e = 14186, o.c = 13817)
#> Number of events: e = 4414
#> 
#>                          OR           95% CI     z p-value
#> Common effect model  0.8969 [0.8405; 0.9570] -3.29  0.0010
#> Random effects model 0.8683 [0.7559; 0.9973] -2.00  0.0457
#> 
#> Quantifying heterogeneity (with 95% CIs):
#>  tau^2 = 0.0147 [0.0000; 0.1145]; tau = 0.1214 [0.0000; 0.3384]
#>  I^2 = 39.7% [0.0%; 74.6%]; H = 1.29 [1.00; 1.99]
#> 
#> Test of heterogeneity:
#>     Q d.f. p-value
#>  9.95    6  0.1269
#> 
#> Details of meta-analysis methods:
#> - Mantel-Haenszel method (common effect model)
#> - Inverse variance method (random effects model)
#> - Restricted maximum-likelihood estimator for tau^2
#> - Q-Profile method for confidence interval of tau^2 and tau
#> - Calculation of I^2 based on Q

forest(m, layout = "RevMan5", common = FALSE, random = TRUE)

Created on 2026-06-14 with reprex v2.1.1

This is mostly a special issue for Mantel-Haenszel in metabin(). When method = "MH", the common-effect estimate uses the Mantel-Haenszel method, but the random-effects estimate uses inverse-variance weighting. In most cases, the random-effects result is therefore the same as with method = "Inverse". The main exception is the Cochrane/RevMan-style case with method = "MH" and method.tau = "DL", where the Mantel-Haenszel estimate is used in the Q statistic for estimating tau-squared. The generated smlab does not currently reflect this distinction.

Would it make sense for the generated smlab to use x$method.random when only the random-effects model is printed? For example:

IV, Random, 95% CI

For plots showing both common and random models, I am less sure what the best design is. Maybe the generated smlab should show both methods when they differ, for example:

Fixed: MH + Random: IV, 95% CI

There is also a small related issue: the same method-label map does not include SSW, although SSW is available in metabin(). It may also be worth adding LRP if this map is intended to cover all current binary methods.

I understand this is partly a design choice. If you think this direction is acceptable, I would be happy to open a pull request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions