Pooling Correlation Coefficients
Introduction
Pearson correlation coefficients have skewed sampling distributions with heteroscedastic variance. Fisher’s z transformation converts them to an approximately normal scale with constant variance, enabling standard inverse-variance meta-analysis.
Prerequisites
Pearson correlation; variance-stabilising transformations.
Theory
\[z = \frac{1}{2} \log\left(\frac{1 + r}{1 - r}\right) = \tanh^{-1}(r), \quad \text{Var}(z) = \frac{1}{n - 3}.\]
Pool \(z\) values on the transformed scale; exponentiate back via \(r = \tanh(z)\).
Assumptions
Bivariate normal data in each study; independent studies.
R Implementation
library(metafor)
set.seed(2026)
k <- 10
# Simulated correlations and sample sizes
df <- data.frame(
ri = c(0.25, 0.32, 0.18, 0.40, 0.28, 0.35, 0.22, 0.30, 0.45, 0.38),
ni = sample(50:300, k, replace = TRUE)
)
es <- escalc(measure = "ZCOR", ri = ri, ni = ni, data = df)
re <- rma(yi, vi, data = es, method = "REML")
# Convert pooled z back to correlation
pooled_z <- re$b
pooled_r <- tanh(pooled_z)
ci_r <- tanh(c(re$ci.lb, re$ci.ub))
c(pooled_r = round(pooled_r, 3),
lower = round(ci_r[1], 3), upper = round(ci_r[2], 3))
re$I2Output & Results
Pooled correlation ~0.31 with 95 % CI on the natural r scale; \(I^2\) quantifies heterogeneity.
Interpretation
“Random-effects pooled correlation across 10 studies was r = 0.31 (95 % CI 0.25-0.37), with modest heterogeneity (\(I^2 = 28 \%\)); the Fisher z back-transformation maintained correct coverage despite the bounded [-1, 1] nature of r.”
Practical Tips
- Always pool on z scale; pooling raw r biases estimates for high correlations.
metafor::escalc(measure = "ZCOR")handles the transformation in one call.- Report both z and r back-transformed; r is more interpretable.
- For partial correlations, use the same approach with df-adjusted sample size.
- Small-study adjustment (Hartung-Knapp) is especially important with few or uneven-size studies.