Quant Memo
Core

The Fisher z-Transformation and Correlation Inference

Sample correlation coefficients don't follow a normal distribution, especially near ±1, which breaks ordinary confidence intervals and significance tests — the Fisher z-transformation fixes this by mapping correlation onto a scale where normal-theory statistics actually apply.

Prerequisites: Correlation, Confidence Intervals

You compute a sample correlation of 0.85 between two factors from 40 months of data and want a 95% confidence interval around it. The naive approach — take the standard error of a correlation estimate and go plus-or-minus two standard errors — breaks down badly here, because it can produce an interval extending past 1.0, which is impossible for a correlation coefficient. The problem is that the sampling distribution of a correlation estimate is skewed and bounded between −1 and 1, especially once the true correlation is far from zero, so ordinary normal-based confidence intervals simply don't apply. The Fisher z-transformation fixes this by warping the correlation scale into one where normal-theory statistics finally work correctly.

An analogy: stretching a map near the poles

A flat map of the globe badly distorts distances near the poles — Greenland looks the size of Africa on a standard Mercator projection because the projection stretches areas near the edges of its range. Correlation coefficients have the same problem: near 0, small changes in the true correlation produce roughly symmetric, well-behaved sampling variation, but near ±1, the same true difference gets compressed into a tiny sliver of the [−1, 1] range, and the sampling distribution becomes badly skewed. The Fisher z-transformation is like re-projecting the map onto a scale — from −∞ to +∞ instead of −1 to 1 — where the distortion near the edges disappears and distances (i.e., statistical variability) behave uniformly everywhere.

The mechanics, one piece at a time

Given a sample correlation rr, the Fisher z-transformation is

z=12ln(1+r1r)=tanh1(r).z = \frac{1}{2} \ln\left( \frac{1+r}{1-r} \right) = \tanh^{-1}(r).

In plain English: this is the inverse hyperbolic tangent function, which takes any value between −1 and 1 and stretches it out to cover the entire real number line, with the stretching becoming more extreme the closer rr gets to ±1 — exactly compensating for how compressed the correlation scale becomes out there. The transformed variable zz is then, to a very good approximation, normally distributed with standard error

SE(z)=1n3,SE(z) = \frac{1}{\sqrt{n-3}},

where nn is the sample size. In plain English: once you're on the zz-scale, the usual "mean plus-or-minus 1.96 standard errors" recipe for a 95% confidence interval works correctly, because zz doesn't have the boundary problem rr does. To get back a confidence interval for rr itself, compute the interval in zz-space and then transform each endpoint back with r=tanh(z)=(e2z1)/(e2z+1)r = \tanh(z) = (e^{2z}-1)/(e^{2z}+1).

Worked example 1: a confidence interval for r = 0.85, n = 40

z=tanh1(0.85)=12ln(1.850.15)=12ln(12.33)12(2.512)1.256z = \tanh^{-1}(0.85) = \frac{1}{2}\ln\left(\frac{1.85}{0.15}\right) = \frac{1}{2}\ln(12.33) \approx \frac{1}{2}(2.512) \approx 1.256. Standard error: SE(z)=1/403=1/370.1644SE(z) = 1/\sqrt{40-3} = 1/\sqrt{37} \approx 0.1644. A 95% interval in zz-space: 1.256±1.96(0.1644)=1.256±0.3221.256 \pm 1.96(0.1644) = 1.256 \pm 0.322, giving (0.934,1.578)(0.934, 1.578). Transforming back: tanh(0.934)0.732\tanh(0.934) \approx 0.732 and tanh(1.578)0.918\tanh(1.578) \approx 0.918. So the 95% confidence interval for the true correlation is roughly (0.73,0.92)(0.73, 0.92) — notably asymmetric around 0.85 (wider below than above), correctly reflecting that correlation has more room to vary downward from 0.85 than upward toward the hard boundary of 1.0. A naive symmetric interval using the raw correlation's standard error would have missed this asymmetry and risked an interval poking past 1.0.

Worked example 2: testing whether two correlations differ

Two backtests, on different universes, give sample correlations r1=0.60r_1 = 0.60 (n=50) and r2=0.40r_2 = 0.40 (n=45) between a signal and forward returns. Is the difference statistically meaningful? Transform both: z1=tanh1(0.60)0.693z_1 = \tanh^{-1}(0.60) \approx 0.693, z2=tanh1(0.40)0.424z_2 = \tanh^{-1}(0.40) \approx 0.424. The standard error of the difference is 1/(503)+1/(453)=1/47+1/420.0213+0.02380.212\sqrt{1/(50-3) + 1/(45-3)} = \sqrt{1/47 + 1/42} \approx \sqrt{0.0213+0.0238} \approx 0.212. The z-statistic for the difference is (0.6930.424)/0.2121.27(0.693-0.424)/0.212 \approx 1.27, below the 1.96 threshold for significance at the 5% level — despite the correlations looking meaningfully different (0.60 vs 0.40), the sample sizes aren't large enough to rule out that this gap is sampling noise.

r = +1 r = -1 z stretches steeply near ±1
The Fisher z-transformation compresses near r=0 and stretches sharply near r=±1, undoing the skew and boundary-compression that makes ordinary normal-theory confidence intervals invalid for raw correlation coefficients.
in z-space: symmetric z=1.256 ± 0.322 back on r-scale: asymmetric r: 0.73 to 0.92, center 0.85
A symmetric interval built in z-space transforms back into a visibly asymmetric interval for the correlation itself — wider on the side with more room to move away from the ±1 boundary.

What this means in practice

Any time you report a confidence interval or a hypothesis test on a correlation coefficient — factor correlations, strategy return correlations, signal-to-outcome correlations — the Fisher z-transformation is the standard, correct way to do it, especially for smaller samples or correlations far from zero where the naive approach visibly breaks. It's also the standard way to test whether two correlations (from different samples, periods, or universes) differ significantly, as in worked example 2.

The Fisher z-transformation, z=tanh1(r)z = \tanh^{-1}(r), maps a sample correlation onto a scale where the sampling distribution is approximately normal with a simple standard error of 1/n31/\sqrt{n-3}, fixing the skew and boundary problems that make ordinary confidence intervals invalid on the raw correlation scale, especially when r|r| is large or nn is small.

It's tempting to build a symmetric confidence interval directly around a raw sample correlation using a generic standard-error formula — this can produce nonsensical intervals that extend past ±1, and it silently understates uncertainty near the boundaries where the true sampling distribution is most skewed. Always transform to zz, build the interval there, and transform back; never treat the correlation scale itself as approximately normal, no matter how large your sample is when r|r| is close to 1.

Related concepts

Practice in interviews

Further reading

  • Fisher, On the Probable Error of a Coefficient of Correlation, Metron (1921)
ShareTwitterLinkedIn