Skip to content

[R-meta] Calculating pooled effect size

2 messages · Adelina Artenie, Dr. Gerta Rücker

#
Hi,

This is probably a silly question but can?t see where my error is, so it would be great to have your thoughts. I am doing a RE meta-analysis of rates and the pooled rate that I am getting does not equal the value I get from summing the individual effects multiplied by their prob. weights. I am ignoring the SE for this exercise, just looking at the pooled effect.

In this example, the pooled effect produced by R is 10.5499. If I do sum(individual rates * w.random) /sum(w.random), I get 12.45 (768.85 / 61.75). The pooled overall effect in R is consistently smaller relative to what I get when I calculate this by hand.

Thank you in advance.
Adelina

***
library(meta)
library(metafor)

my_dat <- data.frame(
  ID = 1:19,
  Rate = c(14.1, 19.4, 19.0, 12.5, 5.8, 7.2, 14.0, 11.6, 22.5, 11.1, 9.5, 1.1, 9.8, 7.9, 11.2, 28.7, 7.1, 15.5, 11.2),
  LB = c(9.6, 14.8, 11.6, 9.7, 4.3, 4.2, 6.0, 5.6, 11.6, 8.2, 8.0, 0.8, 7.9, 7.1, 8.9, 20.6, 4.3, 13.1, 9.0),
  UB = c(20.7, 25.5, 31.1, 16.1, 7.7, 12.1, 32.5, 24.4, 43.8, 14.9, 11.3, 1.6, 12.2, 8.7, 14.2, 40.2, 11.7, 18.3, 13.9)
)

ln_rate <- log(my_dat$Rate)
ln_LB <-log(my_dat$LB)
ln_UB <-log(my_dat$UB)

my_metagen <- metagen(TE = ln_rate,
                         lower = ln_LB,
                         upper = ln_UB,
                         studlab = ID,
                         data = my_dat,
                         sm = "IRLN",
                         method.tau = "DL",
                         comb.fixed = FALSE,
                         comb.random = TRUE, backtransf = TRUE,
                         title = "title",
                         text.random = "Overall")

summary(my_metagen)
weights(my_metagen)

study_ids <- my_metagen$studlab
weights_random <- my_metagen$w.random
weight_table <- data.frame(Temporary_ID = study_ids, w.random = weights_random)
print(weight_table)
#
Dear Adelina,

It seems that you ignored that the pooling goes on the log scale. The correct calculation is therefore (using the notation from your R code):
[1] 10.5499

where my_metagen$TE are the log-transformed rates and exp() backtransforms the average on the log scale back to the original scale.

Best,
Gerta



UNIVERSIT?TSKLINIKUM FREIBURG
Institute for Medical Biometry and Statistics

Dr. Gerta R?cker
Guest Scientist

Stefan-Meier-Stra?e 26 ? 79104 Freiburg
gerta.ruecker at uniklinik-freiburg.de

https://www.uniklinik-freiburg.de/imbi-en/employees.html?imbiuser=ruecker

-----Urspr?ngliche Nachricht-----
Von: R-sig-meta-analysis <r-sig-meta-analysis-bounces at r-project.org> Im Auftrag von Adelina Artenie via R-sig-meta-analysis
Gesendet: Samstag, 12. August 2023 12:28
An: r-sig-meta-analysis at r-project.org
Cc: Adelina Artenie <adelina.artenie at bristol.ac.uk>
Betreff: [R-meta] Calculating pooled effect size

Hi,

This is probably a silly question but can?t see where my error is, so it would be great to have your thoughts. I am doing a RE meta-analysis of rates and the pooled rate that I am getting does not equal the value I get from summing the individual effects multiplied by their prob. weights. I am ignoring the SE for this exercise, just looking at the pooled effect.

In this example, the pooled effect produced by R is 10.5499. If I do sum(individual rates * w.random) /sum(w.random), I get 12.45 (768.85 / 61.75). The pooled overall effect in R is consistently smaller relative to what I get when I calculate this by hand.

Thank you in advance.
Adelina

***
library(meta)
library(metafor)

my_dat <- data.frame(
  ID = 1:19,
  Rate = c(14.1, 19.4, 19.0, 12.5, 5.8, 7.2, 14.0, 11.6, 22.5, 11.1, 9.5, 1.1, 9.8, 7.9, 11.2, 28.7, 7.1, 15.5, 11.2),
  LB = c(9.6, 14.8, 11.6, 9.7, 4.3, 4.2, 6.0, 5.6, 11.6, 8.2, 8.0, 0.8, 7.9, 7.1, 8.9, 20.6, 4.3, 13.1, 9.0),
  UB = c(20.7, 25.5, 31.1, 16.1, 7.7, 12.1, 32.5, 24.4, 43.8, 14.9, 11.3, 1.6, 12.2, 8.7, 14.2, 40.2, 11.7, 18.3, 13.9)
)

ln_rate <- log(my_dat$Rate)
ln_LB <-log(my_dat$LB)
ln_UB <-log(my_dat$UB)

my_metagen <- metagen(TE = ln_rate,
                         lower = ln_LB,
                         upper = ln_UB,
                         studlab = ID,
                         data = my_dat,
                         sm = "IRLN",
                         method.tau = "DL",
                         comb.fixed = FALSE,
                         comb.random = TRUE, backtransf = TRUE,
                         title = "title",
                         text.random = "Overall")

summary(my_metagen)
weights(my_metagen)

study_ids <- my_metagen$studlab
weights_random <- my_metagen$w.random
weight_table <- data.frame(Temporary_ID = study_ids, w.random = weights_random)
print(weight_table)