Statistical & Math
Forest Plot Meta-Analysis: Pooled Effect, 95% CI & Inverse-Variance Weights
Build clinical-trial Forest Plot summary rows by exponentiating log-odds/log-risk effects EXP(theta +/- 1.96 * SE), computing fixed-effect inverse-variance weights w_i = 1 / SE_i^2, and pooling theta_pooled = SUM(w_i * theta_i) / SUM(w_i).
Why Forest Plot error bars MUST be calculated on the log scale before exponentiating!
Every medical systematic review and A/B experiment Roll-Up displays study-level and diamond-pooled effects on a Forest Plot! A classic spreadsheet mistake is adding +/- 1.96 * SE directly to an Odds Ratio or Hazard Ratio—producing impossible negative lower confidence bounds! Because Odds Ratios and Relative Risks are asymmetric multiplicative ratios, their sampling distributions are symmetric only on the natural-log scale (theta_i = LN(OR_i)) with standard error SE_i!
To build exact Forest Plot whiskers and fixed-effect inverse-variance pooling across K studies: (1) each study’s 95% CI spans [EXP(theta_i - 1.96 * SE_i), EXP(theta_i + 1.96 * SE_i)], (2) each study receives precision weight w_i = 1 / (SE_i ^ 2), and (3) the pooled summary diamond sits at OR_pooled = EXP(SUM(w_i * theta_i) / SUM(w_i)) with pooled standard error SE_pooled = 1 / SQRT(SUM(w_i))! Across three trials with log-ORs [-0.35, -0.52, -0.28] and SEs [0.20, 0.25, 0.16] (weights [25.00, 16.00, 39.0625]), pooled log-OR = -0.3498 -> OR_pooled = 0.70 (a statistically significant 30% odds reduction, 95% CI [0.57, 0.88] < 1.00)!
| Clinical Trial | Log-OR (theta_i) & SE_i | Precision Weight wi = 1 / SEi^2 | Study OR & 95% Forest Plot Whiskers |
|---|---|---|---|
| Trial Alpha | -0.35 (SE = 0.20) | 25.00 (31.2% share) | OR 0.70 [0.48, 1.04] |
| Trial Beta | -0.52 (SE = 0.25) | 16.00 (20.0% share) | OR 0.59 [0.36, 0.97] |
| Trial Gamma | -0.28 (SE = 0.16) | 39.06 (48.8% share) | OR 0.76 [0.55, 1.03] -> Pooled OR = 0.70 |
Inverse-Variance Fixed-Effect Pooled Odds Ratio Across 3 Trials
Weights each study log-effect B_i by w_i = 1 / C_i^2 and exponentiates the precision-weighted mean.
=IF(MIN(C2:C4) <= 0, "Invalid Standard Error", ROUND(EXP(((B2 / (C2 ^ 2)) + (B3 / (C3 ^ 2)) + (B4 / (C4 ^ 2))) / ((1 / (C2 ^ 2)) + (1 / (C3 ^ 2)) + (1 / (C4 ^ 2)))), 2))Upper 95% Forest Plot Diamond Bound: EXP(theta_pooled + 1.96 / SQRT(SUM(w_i)))
Tests statistical significance: when the upper 95% pooled bound is < 1.00 (or lower bound > 1.00), p < 0.05.
=IF(MIN(C2:C4) <= 0, "Invalid Standard Error", ROUND(EXP((((B2 / (C2 ^ 2)) + (B3 / (C3 ^ 2)) + (B4 / (C4 ^ 2))) / ((1 / (C2 ^ 2)) + (1 / (C3 ^ 2)) + (1 / (C4 ^ 2)))) + (1.96 / SQRT((1 / (C2 ^ 2)) + (1 / (C3 ^ 2)) + (1 / (C4 ^ 2))))), 2))Try the example
Use the original values or change them to test your understanding.