Panel de establecimientos#

La EAM sigue a las mismas plantas año tras año (nordest). Con dd.eam.panel() se arma un panel listo para econometría; antes conviene revisar que los identificadores se mantengan.

import numpy as np

import dane_data as dd

eam = dd.eam.load(range(2000, 2025))
superv = dd.eam.supervivencia(eam)
superv.tail(8).round(1)
anio siguiente establecimientos siguen_al_anio_siguiente pct_siguen
16 2016 2017 8466 8051 95.1
17 2017 2018 8214 7789 94.8
18 2018 2019 7911 7569 95.7
19 2019 2020 7631 7270 95.3
20 2020 2021 7343 7094 96.6
21 2021 2022 7138 6711 94.0
22 2022 2023 6775 6605 97.5
23 2023 2024 6714 6420 95.6
ax = superv.plot(x="anio", y="pct_siguen", marker="o", ms=4, legend=False)
ax.yaxis.set_major_formatter(mtick.PercentFormatter(decimals=0))
ax.set_ylim(0, 100)
ax.set_xlabel("")
ax.set_title("Establecimientos de cada año que siguen al año siguiente");

Todos los años, más del 90 % de los establecimientos sigue al año siguiente, sin caídas bruscas: los identificadores se mantienen desde 2000. Si un año la proporción se desplomara, lo más probable sería un cambio de identificadores entre catálogos del ANDA, no el cierre de las plantas, y un panel que cruce ese año no seguiría a las mismas plantas.

Un panel balanceado#

panel = dd.eam.panel(eam, balanceado=True, anios=range(2012, 2025))
panel = panel[(panel["valagri"] > 0) & (panel["pertotal"] > 0)].copy()
panel["log_productividad"] = np.log(panel["valagri"] / panel["pertotal"])
panel.index.get_level_values("nordest").nunique(), len(panel)
(5428, 70506)

Persistencia de la productividad#

Las plantas más productivas un año lo siguen siendo al siguiente: la correlación de la productividad (en logaritmos) entre un año y el siguiente es de 0,85.

panel["log_productividad_anterior"] = panel.groupby(level="nordest")["log_productividad"].shift()
d = panel.dropna(subset=["log_productividad_anterior"])

fig, ax = plt.subplots(figsize=(6.4, 5.4))
hb = ax.hexbin(d["log_productividad_anterior"], d["log_productividad"], gridsize=60, mincnt=1, cmap="Blues", bins="log")
ax.set_xlabel("log(valor agregado por ocupado), año anterior")
ax.set_ylabel("log(valor agregado por ocupado)")
ax.set_title("Productividad laboral de las plantas, 2013–2024")
ax.grid(False)
fig.colorbar(hb, ax=ax, label="Plantas-año");
d[["log_productividad", "log_productividad_anterior"]].corr().round(3)
log_productividad log_productividad_anterior
log_productividad 1.000 0.846
log_productividad_anterior 0.846 1.000

Dispersión entre plantas#

La razón entre el percentil 90 y el 10 de la productividad mide qué tan distintas son las plantas:

p = panel.groupby(level="anio")["log_productividad"].quantile([0.1, 0.9]).unstack()
(np.exp(p[0.9] - p[0.1])).round(1).rename("p90/p10")
anio
2012    10.3
2013    10.5
2014    10.5
2015    10.8
2016    10.9
2017    10.7
2018    10.8
2019    11.5
2020    15.1
2021    13.0
2022    13.7
2023    13.1
2024    11.6
Name: p90/p10, dtype: float64

Truco

El panel tiene índice (nordest, anio): se puede pasar directamente a linearmodels.PanelOLS para estimar modelos con efectos fijos.