Arte SheetsLearn. Try. Understand.

Statistical & Clinical Analysis

Egger’s Linear Regression Test: Funnel Plot Asymmetry & Small-Study Publication Bias

Detect small-study publication bias in meta-analysis by regressing Standardized Normal Deviate SND_i = θ_i / SE_i on Precision P_i = 1 / SE_i via INTERCEPT and SLOPE.

How Matthias Egger transformed weighted inverse-variance regression into a simple OLS INTERCEPT test!

Matthias Egger et al. (1997, BMJ) noticed that testing weighted linear regression θ_i = β_1 + β_0 * SE_i with inverse-variance weights w_i = 1 / SE_i^2 is algebraically IDENTICAL to running ordinary unweighted linear regression of Standardized Normal Deviate SND_i = θ_i / SE_i (y-axis) against study Precision P_i = 1 / SE_i (x-axis): SND_i = β_0 + β_1 * (1 / SE_i)!

In a symmetric funnel plot without publication bias, small imprecise trials (1 / SE_i -> 0) scatter symmetrically around the pooled effect so the regression line passes through the origin (Egger intercept β_0 = 0), while slope β_1 estimates the bias-adjusted large-study effect! Across 5 trials where small high-SE studies report exaggerated log-ORs (-0.95 at SE 0.45 down to -0.25 at SE 0.10), Egger’s intercept is β_0 = -1.9917 (severe negative funnel asymmetry, vs. β_0 = 0 when all studies share θ_i = -0.30)!

Meta-Analysis Funnel Pattern (5 Studies)Egger Asymmetry Intercept β_0Precision Slope β_1 (Large-Study Limit)Publication Bias Conclusion
Exaggerated Small Studies (-0.95 to -0.25)-1.9917-0.0429 (Attenuated True Effect)Strong Small-Study Asymmetry
Symmetric Constant Effect (All θ_i = -0.30)0.0000-0.3000 (Exact True Effect)Zero Publication Bias
Non-Positive Standard Error (SE <= 0)Error Guard"SE Values Must Be Positive"Variance Audit Guard

Egger Funnel-Asymmetry Regression Intercept β_0 = INTERCEPT(SND, Precision)

Computes the unweighted OLS intercept of standardized effect E2:E6 = θ_i / SE_i on precision D2:D6 = 1 / SE_i.

=IF(MIN(C2:C6) <= 0, "SE Values Must Be Positive", ROUND(INTERCEPT(E2:E6, D2:D6), 4))

Large-Study Bias-Adjusted Effect Slope β_1 = SLOPE(SND, Precision)

Estimates the asymptotic treatment effect as SE_i -> 0 (infinite precision).

=IF(MIN(C2:C6) <= 0, "SE Values Must Be Positive", ROUND(SLOPE(E2:E6, D2:D6), 4))

Try the example

Use the original values or change them to test your understanding.

Further reading