Baseline Productivity Path#
productivity.py modules
ogzaf.productivity#
The baseline path of total factor productivity (Z) and where it comes from.
South Africa’s productivity has fallen since 2008: in PWT 11.0, TFP
(rtfpna) fell 1.0% a year over 2008-2019 and real GDP per person engaged
grew 0.25% a year, against 2.4% over 1994-2008. The model’s long-run growth
rate of labour productivity, g_y = 1.4% (g_y_annual = 0.014), is set from the
1994-2019 average of 1.44%. Z is the
bridge: it lies below that trend now and closes the gap over the transition.
The path of output per hour the model is fitted to is the average of two baseline estimates, year by year:
Our rule. Growth starts from South Africa’s recent trend (real GDP growth of 1.1% a year, the 2022-2025 average, IMF WEO October 2026) and the productivity shortfall then shrinks by 11.35% a year. That is the cross-country persistence of growth rates: about 0.3 of a country’s gap to the world mean carries into the next decade (Pritchett and Summers 2014, NBER WP 20573, Table 1, adjacent-decade regression coefficients 0.21-0.38), and 0.3 ** (1/10) = 0.8865.
The OECD long-term baseline (Economic Outlook 117, June 2025, DF_EO_LTB): potential output per potential worker grows 0.7% a year in 2025-2030 and 1.9% in 2030-2040. We interpolate between the period midpoints and cap it at the 1994-2019 average, 1.44%; the OECD’s higher later rates rest on convergence toward the frontier, which we do not assume.
Forecasts by the IMF, the SARB and the National Treasury are not used: they assume reforms (energy, logistics) take hold, and the IMF’s five-year-ahead growth forecasts for South Africa overshot every outturn from 2008 to 2019, by 2.1 percentage points a year on average (WEO historical forecasts).
Model labour input is set by the demographics, at today’s employment rates by age (they are in the earnings matrix), so only productivity is fitted.
DRAGS holds the fitted fall in log Z below its trend in each year from
2026 to 2050. After 2050 the drag keeps shrinking at the rule’s 0.8865 a
year, and Z is normalised to 1 in the steady state, so the long run is
unchanged. z_path turns the drags into the packaged Z parameter.
- ogzaf.productivity.z_path(drags=None, n_years=60, persistence=0.8865)[source]#
The Z parameter: one value per year from the start year, steady-state 1.
- Parameters:
drags (list) – fall in log Z in each year after the start year
n_years (int) – years until Z reaches its steady-state value
persistence (float) – yearly decay of the drag after the last fitted year
- Returns:
[[Z_0], [Z_1], …, [1.0]], length n_years + 1
- Return type:
Z (list)