Dynamic Panel BMA — Interactive Lab

A pedagogical companion to Dynamic Panel BMA: Which Factors Truly Drive Economic Growth? ↗ Back to the post

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.

Tab 2

PIP Forest

The post's headline result: 9 variables × up to 4 priors. Hover to read PM, PSD, and Raftery's evidence tier.

Tab 3

Prior Sensitivity Lab

Slide the prior model size from skeptical (2) to generous (8). Watch the variable hierarchy reshuffle in real time.

Tab 4

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)
Weighted average over all 2K regression models, where each weight is proportional to how well that model fits the data.
PIP (Posterior Inclusion Probability)
For each variable, the total posterior weight on models that include it. PIP ≥ 0.80 is a common "robustness" threshold.
PMP (Posterior Model Probability)
The Bayesian weight on a single specific model. PMPs sum to 1 across all 512 models.
Dynamic panel
A panel regression that includes a lagged dependent variable. Lets GDP today depend on GDP yesterday — captures persistence and resolves reverse causality.
EMS (Expected Model Size)
The prior expected number of regressors. EMS = K/2 (= 4.5 here) is the default; EMS = 2 is skeptical; EMS = 8 is generous.
Weak exogeneity
Current regressors may be correlated with past shocks but not with the current idiosyncratic shock. Weaker than strict exogeneity — fits growth data.
Jointness (HCGHM)
Hofmarcher et al.'s measure. Values near +1 = perfect complements (appear together); near 0 = independent; near −1 = substitutes.
Dilution prior
George (2010). Down-weights models whose regressors are highly correlated, preventing PIP inflation from near-duplicate variables.

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.

Move left → skeptical prior (fewer regressors expected). Move right → generous (more regressors expected).
0 = no dilution; 1 = strong penalty for correlated regressors (George 2010).
A variable is "robust" if its simulated PIP clears this threshold under the chosen prior.
variables above threshold
out of 9 candidates
average PIP
across all 9 variables
implied posterior EMS
sum of PIPs
top variable
always Population in the post

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 × lnlex at 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 pop row 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 growth
pop Population · ipr Investment price · opem Trade openness
gsh Government share · lnlex Life expectancy · polity Democracy

Connecting 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.