Which growth determinants survive when we average over every model?
With 9 candidate drivers of economic growth, there are 29 = 512 possible regression specifications. Standard practice picks one of them — and crosses its fingers. Bayesian Model Averaging (BMA) instead weights every model by how well it fits the data, then asks the same question of all 512 at once: for each variable, what fraction of the well-fitting models include it? That fraction is the Posterior Inclusion Probability (PIP).
This lab lets you watch the BMA machinery from four angles. You will see how the data concentrates posterior mass on a handful of specifications, compare PIPs across four different priors, run a skeptical-vs-generous prior sensitivity stress test, and trace which growth determinants tend to appear together in the best-fitting models.
From flat prior to concentrated posterior — 512 models at once
Each tile below represents one of the 512 possible models. The prior is uniform: every tile is equally bright. The data favours a few models heavily — model #1 alone gets 8.9% of the posterior probability mass. Watch the orange spots emerge as the animation switches from prior to posterior and back.
What to look for: in the prior frame, every cell has the same colour. In the posterior frame, a few cells glow orange — those are the models that fit the data best, and they carry most of the posterior weight.
PIP Forest
The post's headline result: 9 variables × up to 4 priors. Hover to read PM, PSD, and Raftery's evidence tier.
Prior Sensitivity Lab
Slide the prior model size from skeptical (2) to generous (8). Watch the variable hierarchy reshuffle in real time.
Jointness Heatmap
Which growth determinants are complements (always appear together) vs. substitutes? The HCGHM measure visualised.
Glossary (open a card if a term is unfamiliar)
BMA (Bayesian Model Averaging)
PIP (Posterior Inclusion Probability)
PMP (Posterior Model Probability)
Dynamic panel
EMS (Expected Model Size)
Weak exogeneity
Jointness (HCGHM)
Dilution prior
The three takeaways this lab is built around
- BMA replaces a binary pick with a probability scale. A kitchen-sink regression labels each variable "significant" or not. BMA scores each one on a continuous PIP scale from 0 to 1, integrating across all 512 specifications.
- Only population and life expectancy are robust. Across all four priors tested here, these two variables clear the PIP > 0.50 threshold. Even under a sharply skeptical EMS = 2 prior, population stays at PIP = 0.964.
- Prior choice matters more than people admit. Investment share and democracy each move from PIP > 0.7 (default prior) to PIP < 0.5 (skeptical prior). The same data, three different priors, three different stories.
The post's headline result — interactively
The numbers below come straight from the post's BMA tables — same 9 variables, same 4 prior specifications. Each row is one growth determinant; each panel is one prior. Toggle rows or priors to declutter, hover any point to see the posterior mean, the posterior standard deviation, and Raftery's evidence tier.
Priors
Variables
What to look for
- Population sits at the right edge of every panel. PIP = 0.990 (Binomial), 0.998 (Binomial-Beta), 0.964 (Skeptical), 0.989 (Dilution). It is the only variable that clears 0.95 in all priors — the gold standard for robustness.
- The Binomial-Beta panel is much further right than the Skeptical panel. The Binomial-Beta prior lets the data say "I want big models" and pushes every variable above PIP = 0.92. The Skeptical EMS=2 prior pulls every variable below 0.65 except population.
- Watch life expectancy. It hovers near PIP = 0.86 under the default prior but drops to 0.637 under the skeptical prior. Still "robust" by Raftery's classification, but visibly less stable than population.
- The bottom four (population growth, democracy, education, investment price) are mostly noise. Their PIPs swing from 0.34 to 0.94 across priors — the data is ambiguous about whether they belong.
Reading the chart
- Filled circle = posterior inclusion probability (PIP).
- Solid teal line at 0.95 = "strong evidence" (Raftery 1995).
- Dashed line at 0.75 = "positive evidence" threshold.
- Dotted line at 0.50 = "weak evidence" floor.
- Hover a circle for posterior mean, PSD, and evidence tier.
Prior Sensitivity Lab — stress-test the rankings
The post's §12 shows that PIPs change when you change the prior. This tab lets you turn that experiment into a slider. Move Expected Model Size (EMS) from skeptical (2 of 9 regressors expected to matter) to generous (8 of 9), with or without the dilution penalty. The bars below recompute every time you move the slider. Watch which variables survive even when the prior expects only 2 of them to matter.
What to look for
- Drag EMS down to 2. The post reports PIP(
pop) = 0.964 and PIP(lnlex) = 0.637 at this setting. Watch the rest of the variables fall below 0.5 — the survivor count drops from 9 to 2. - Drag EMS up to 8. All bars push to the right; every variable clears 0.90. This is the "generous prior" finding — when the prior is open to large models, the data is happy to include almost everything.
- Toggle dilution from 0 to 1. Variables that are correlated with Population (the highest-PIP regressor) lose a few percentage points because the dilution penalty discounts redundant overlap.
- Population is rock-solid. Its bar stays above 0.95 across the entire EMS range. That is what robustness looks like.
The simulated PIPs in this tab are a stylised approximation of the
Moral-Benito posterior calibrated to match the four prior anchors
in data/results.json. They reproduce the qualitative
ranking and order of magnitude — not the exact numbers from
bdsm::bma().
Jointness Heatmap — which growth determinants travel together?
PIPs tell us which variables matter on their own. Jointness tells us which variables matter in combination. Two regressors are complements if they tend to appear in the same models (high jointness), substitutes if they tend to appear apart. The HCGHM measure (Hofmarcher et al.) ranges from −1 (perfect substitutes) to +1 (perfect complements).
HCGHM jointness — all 36 pairs of the 9 regressors
What to look for
- Every cell is positive. In this post, no two regressors act as substitutes. Every pair is a complement — each variable adds something the others do not capture.
- The hottest cell is
pop × lnlexat 0.711. Population and life expectancy are the strongest complements. They are also the only two variables that survive across all priors. The two facts go together: robust variables anchor the best-fitting models, and they are typically anchored together. - The
poprow and column are uniformly hot. Population co-appears with everything — it is the connective tissue of the top models. Investment price (ipr) is the coldest row, consistent with its lowest PIP (0.656). - Three pairs clear 0.50:
pop × lnlex(0.71),pop × ish(0.53),pop × opem(0.52). These are the post's most reliable two-variable building blocks.
Variable codes
ish Investment share · sed Education · pgrw Population growthpop Population · ipr Investment price · opem Trade opennessgsh Government share · lnlex Life expectancy · polity DemocracyConnecting back to the other tabs
The hottest jointness cell is also the most robust PIP pair. The
same two variables (pop and lnlex) that
survive the Skeptical EMS = 2 prior in Tab 3 are also the only pair
with HCGHM > 0.7 here. The economic story is consistent across
every angle of the BMA machinery: population size and public
health (life expectancy) are the structural anchors of long-run
growth in this 73-country, 4-decade panel.