Average <em>r</em> = .30 and <em>r</em> = .80 directly and you get .55. Go through Fisher’s z, average there and come back with the hyperbolic tangent: <strong>.607</strong>. Nearly six hundredths of difference with two studies; with twenty and high correlations, that difference decides what your abstract says.
z = ½ · ln( (1 + r) / (1 − r) ) = artanh(r)
r = (e^2z − 1) / (e^2z + 1) = tanh(z)
Var(z) = 1 / (N − 3) SE(z) = 1 / √(N − 3)
95% CI of r = tanh( z ± 1.96 / √(N − 3) )
Example: r = .45 N = 60 → z = 0.485 SE = 0.132 95% CI [.221, .632]
The sampling distribution of r is skewed, and the higher the correlation, the more skewed. An r of .80 cannot go above 1 but can drop a long way, so the error is spread asymmetrically and the arithmetic mean of several r values pulls downwards. With two studies of the same sample size, r = .30 and r = .80, the direct average gives .55; converted to z (0.309 and 1.099), averaged there and brought back with tanh, they give .607. Nearly six hundredths for averaging on the wrong scale.
The other problem is weight. The variance of r depends on r itself: approximately (1−r²)²/(N−1). With N = 50, a study with r = .80 has a variance seven times smaller than one with r = .20, and in an inverse-variance weighted mean that means it weighs seven times more just for having come out high. The z cuts the loop: its variance is 1/(N−3) and does not look at the result, so the weight is set by sample size, which is what you wanted.
That is why metacor() in meta and corr.test() in psych pool in z and hand you back the r already translated. In metafor it is not automatic: you ask for it, with measure = "ZCOR" in escalc() and transf.ztor when reporting, because rma() prints the estimate in z unless you ask for the way back. If you are building the meta-analysis by hand in a spreadsheet, the conversion is not a methodological ornament: it is the difference between weighting by sample and weighting by how well the study did. Declaring it costs one line in methods: "correlations were transformed to Fisher’s z for pooling and back-transformed to r for reporting".
With r = .45 and N = 60: z = 0.485, SE = 1/√57 = 0.132, interval in z of [0.225, 0.744] and back to [.221, .632]. Notice that it goes down 229 thousandths and up 182. The asymmetry is not an artifact of the arithmetic: it reflects that there is more room below .45 than above it, because the ceiling of 1 sits above and the uncertainty cannot pass through it.
Where the difference stops being cosmetic is in small samples with high correlations. With r = .85 and N = 15, the Wald interval computed on the r scale gives [.705, .995], nearly touching the ceiling. Through Fisher’s z it gives [.598, .949]. The lower limit moves by more than a tenth, and it is precisely the limit that decides whether your correlation can be told apart from a moderate one.
R’s cor.test() returns the Fisher interval by default, so if your correlations come from there it is already done. If you are working from a published table that only gives r, N and the asterisk, you build the interval yourself — and it is the first thing missed when someone tries to reanalyze the study. It costs two lines and changes what can be claimed in the discussion.
The −3 and the normality of z are derived assuming bivariate normality. With heavy tails, with a couple of influential cases or with a floor effect in one variable (symptoms measured in the general population, for instance), the real coverage of your 95% interval drifts away from 95%, and usually falls short. If the scatterplot does not look like an elliptical cloud, the Fisher interval is an optimistic estimate and is worth checking against a bootstrap before writing it down.
1/(N−3) also assumes independence. The twelve correlations of one matrix come from the same people and are not twelve independent data points: if you are going to compare them with each other, or put several from the same study into a pooled estimate, you need a multilevel model or a robust variance-covariance matrix, not twelve intervals computed as if each came from its own sample.
And an honesty that almost no converter puts in writing: averaging in z and returning with tanh does not give an unbiased estimate of the mean correlation under heterogeneity — it returns it slightly high. That is why Hunter and Schmidt argue for pooling in r without transforming, while Hedges and Olkin argue for z. The bias of the transformation itself is small (with N = 20 and ρ = .50, one hundredth in r); the heterogeneity bias grows with τ². If your conclusion changes depending on which you use, that goes in the paper.
All thirteen effect size conversions, grouped by what each one is for, are in the index.
If you use it in your thesis or in a paper, cite it so that readers of your Methods section know how the calculation was done.
Ciudad-Fernández, V. (2026). r to Fisher's z converter [Web application]. Ciudad Science. Retrieved October 14, 2026, from https://analisisdedatospsicologia.com/en/convert/r-to-fishers-z
For your Methods section: Correlations were transformed with Fisher's z (Fisher, 1915), using the Ciudad Science r to Fisher's z converter (Ciudad-Fernández, 2026).
@misc{ciudadfernandez2026convrazdefisher,
author = {Ciudad-Fern{\'a}ndez, V{\'i}ctor},
title = {{r to Fisher's z converter}},
year = {2026},
publisher = {Ciudad Science},
howpublished = {Web application},
url = {https://analisisdedatospsicologia.com/en/convert/r-to-fishers-z},
urldate = {2026-10-14},
note = {Accessed 2026-10-14},
}Because the 1/(N−3) variance is that of the transformed z, not of r. The −3 comes from Fisher’s 1921 approximation and is not negotiable. It matters little in large samples: with N = 200, using N leaves the SE 0.8% short. In small ones it matters: with N = 20 the difference is 8%.
No, and it is the most frequent confusion. A z-score is in standard deviations of a specific distribution; Fisher’s z is a correlation rescaled onto an infinite line. They share a letter and little else. The test statistic is a real z: z·√(N−3), which with r = .45 and N = 60 is 3.66.
For both, with the adjustment in place. For Spearman the variance is approximately 1.06/(N−3), a standard error 3% larger. For a partial with k covariates, 1/(N−3−k). The transformation is identical; what changes is the precision, and with small N that difference shows up immediately in the interval.
You can, and there is an entire tradition that argues for it (Hunter and Schmidt). But then you weight with a variance that depends on r itself, and studies with high correlations weigh too much. The sensible thing is to run the main analysis in z and repeat it in r as a sensitivity analysis. If they agree, one paragraph settles it.