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 β_0 | Precision 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.