Unconditional and conditional β-convergence for a panel variable.
Regresses each unit’s annualized growth (y_end - y_start) / T on its initial level y_start over a common window. A negative slope β is convergence (units that start lower grow faster). With controls the conditional slope is read off a Frisch-Waugh- Lovell partial regression that holds the controls’ initial-year values fixed. The slope maps to a speed λ = -ln(1 + β·T)/T and half-life ln 2 / λ.
The variable is used as supplied — no log is taken — so for the canonical income case pass log GDP per capita (then growth is the annualized log-difference and the x-axis is the initial log level).
First and last year used to form the growth rate. Default to the earliest and latest year in the panel; only units observed at both endpoints are kept.
First and last year used to form the growth rate. Default to the earliest and latest year in the panel; only units observed at both endpoints are kept.
The cross-section df; the unconditional scatter fig; the conditional FWL scatter fig_conditional and rolling plot fig_rolling (each None when not applicable); the comparison table gt / summary; the rolling frame; the fitted models; and the scalar fit statistics (beta/speed/half_life and their *_cond counterparts).
Examples
Basic — unconditional convergence of log GDP per capita across Bolivian provinces. Setting the labels with set_panel=True declares the panel (entity, time), so the call can omit entity= / time= and the figure/table get readable labels: