Search code examples
rrandom-effectsmetaformeta-analysis

Discrepancy when printing meta-analysis results using summary() function and accessing the elements with in the meta-analysis object


I'm performing a huge chunk of random-effects meta-analysis in R using the meta package and I am trying to export my results. However, I'm encountering a discrepancy in the pooled effect sizes per subgroup that I obtain when using the summary function compared to directly accessing the pooled effects from the elements of my meta-analysis object.

Here's a reproducible example with a simplified dataset:

# Load the meta package
library(meta)
library(meta)

# Create a data frame with meta-analysis data
meta_data <- data.frame(
  subgroup = c("Subgroup1", "Subgroup1", "Subgroup2", "Subgroup2", "Subgroup1", "Subgroup2"),
  cor = c(0.5, 0.6, 0.7, 0.8, 0.7, 0.65),
  se = c(0.1, 0.2, 0.15, 0.25, 0.21, 0.18),
  n = c(50, 60, 70, 80, 90, 85)
)

# Perform the meta-analysis
x <- metacor(
  cor = meta_data$cor,
  n = meta_data$n,
  data = meta_data,
  common = FALSE,
  random = TRUE,
  subgroup = subgroup
)

# Extract subgroup-specific results using 'summary'
   summary(x)

    summary(x)
     COR           95%-CI %W(random)  subgroup
1 0.5000 [0.2575; 0.6833]       13.8 Subgroup1
2 0.6000 [0.4083; 0.7410]       15.3 Subgroup1
3 0.7000 [0.5566; 0.8029]       16.6 Subgroup2
4 0.8000 [0.7040; 0.8673]       17.6 Subgroup2
5 0.7000 [0.5765; 0.7922]       18.6 Subgroup1
6 0.6500 [0.5071; 0.7581]       18.1 Subgroup2

Number of studies: k = 6
Number of observations: o = 435

                        COR           95%-CI     z  p-value
Random effects model 0.6755 [0.5905; 0.7457] 11.30 < 0.0001

Quantifying heterogeneity:
 tau^2 = 0.0169 [0.0000; 0.1912]; tau = 0.1302 [0.0000; 0.4373]
 I^2 = 53.6% [0.0%; 81.5%]; H = 1.47 [1.00; 2.32]

Test of heterogeneity:
     Q d.f. p-value
 10.78    5  0.0558

Results for subgroups (random effects model):
                       k    COR           95%-CI  tau^2    tau    Q   I^2
subgroup = Subgroup1   3 0.6190 [0.4920; 0.7201] 0.0105 0.1022 3.24 38.3%
subgroup = Subgroup2   3 0.7228 [0.6176; 0.8025] 0.0155 0.1247 4.35 54.0%

Test for subgroup differences (random effects model):
                  Q d.f. p-value
Between groups 1.95    1  0.1621

Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
- Q-Profile method for confidence interval of tau^2 and tau
- Fisher's z transformation of correlations

Access subgroup-specific effect sizes directly from the elements of the meta-analysis object

cbind(k=results$k.study.w,
      COR=round(results$TE.random.w, 3), 
      `95%CI`= paste(round(results$lower.random.w, 3),
                     round(results$upper.random.w, 3),sep = "; "), 
      tau2 = round(results$tau2.w, 3),
      I2 = paste(round(results$I2.w*100, 2), "%", sep=""))

The result shows

            k   COR     95%CI          tau2    I2      
Subgroup1 "3" "0.723" "0.539; 0.908" "0.01"  "38.32%"
Subgroup2 "3" "0.913" "0.721; 1.106" "0.016" "54%" 

Take a look at the pooled values for Subgroup1 and Subgroup2 from the summary and compare the difference with the others that I sorted with cbind().
From the summary

                         k    COR           95%-CI  tau^2    tau    Q   I^2
   subgroup = Subgroup1   3 0.6190 [0.4920; 0.7201] 0.0105 0.1022 3.24 38.3%
    subgroup = Subgroup2   3 0.7228 [0.6176; 0.8025] 0.0155 0.1247 4.35 54.0%

Accessing them from the elements of the meta-analysis object

     k   COR     95%CI          tau2    I2      
Subgroup1 "3" "0.723" "0.539; 0.908" "0.01"  "38.32%"
Subgroup2 "3" "0.913" "0.721; 1.106" "0.016" "54%" 

There is a big discrepancy between COR, lower, and upper values. I-square and Tau-square values are the same. This looks like there is bug. Is there any additional processing or adjustment applied by the summary function that I'm not aware of? Or am I missing something in my analysis? And help will be greatly appreciated.


Solution

  • The results that you are extracting are the values in the r-to-z transformed space (note that the analysis is done with Fisher's z transformed correlations). When using summary(), the results are back-transformed to correlations.