Ejemplo 2 de modelos de variable binaria– Pronosticando crisis bancarias y de balanza de pagos
Universidad de Costa Rica, EC4300 Microeconometría
Autor/a
Randall Romero Aguilar, PhD
Fecha de publicación
17 de abril de 2023
Acerca de este ejemplo
Este ejemplo se basa en un pequeño artículo que escribí mientras cursaba mi doctorado, que a su vez estuvo motivado por Kaminsky (1999) Currency and Banking Crises– The Early Warnings of Distress. Busca determinar la probabilidad de que suceda una crisis bancaria y/o de balanza de pagos en los siguientes dos años en función de varios indicadores macroeconómicos. Los datos utilizados corresponden a siete países de América Latina para el periodo 1970-2005.
1 El modelo
Las variables de este modelo siguen de cerca las definiciones de Kaminsky (1999) Currency and Banking Crises– The Early Warnings of Distress.
Tenemos dos variables dependientes, que modelamos por separado:
crisisbank: =1 si hay una crisis bancaria en los siguientes 24 meses
crisisbop: =1 si hay una crisis de balanza de pagos en los siguientes 24 meses
Consideramos los siguientes indicadores macroeconómicos como variables explicativas:
dolar: Dolarización (nivel)
dolarg: Dolarización (Δ%)
dom: Crédito doméstico / PIB
rdegr: Depósitos domésticos (Δ%)
expgr: Exportaciones (Δ%)
impgr: Importaciones (Δ%)
omega: Déficit comercial (nivel)
resgr: Reservas (Δ%)
rerres: Tipo de cambio real (desv. tendencia)
inf: Inflación (nivel)
mmgr: Multiplicador dinero (Δ%)
mresg: M2 / Reservas (Δ%)
rus: Interés EEUU (nivel)
2 Preparación
En este cuaderno usamos el comando labsumm, que es similar a summarize pero que muestra las etiquetas de las variables en lugar de sus nombres. Para instalarlo, ejecutar net install labsumm.
Los datos están en un libro de Excel, que importamos con import excel.
Código
cd "C:\Users\randa\OneDrive\Documents\Teaching\UCR\EC4300 Microeconometría\Materiales\Binary"import excel "crisis-binary.xlsx", sheet("Sheet1") firstrow
Para simplificar el código, definimos algunas variables globales. Estas variables nos servirán para asegurarnos de que mantenemos consistencia en el listado de variables explicativas, y en el formato de los gráficos.
Además, definimos los datos como de panel (indexados por meses y por países).
Código
encode country, generate(pais)gen meses = ym(year(dateid), month(dateid))tsset pais meses, monthly
Panel variable: pais (strongly balanced)
Time variable: meses, 1970m1 to 2005m12
Delta: 1 month
Finamente, etiquetamos los datos para obtener resultados con las etiquetas apropiadas (serán más fáciles de recordar, al no obligarnos a recordar los nombres de las variables).
margins, dydx(*) atmeans noci postestimatesstore margin_bank_atmeansestimatesrestore bank_logitmargins, dydx(*) noci postestimatesstore margin_bankestimatesrestore bank_logit
Conditional marginal effects Number of obs = 2,773
Model VCE: Robust
Expression: Pr(crisis), predict()
dy/dx wrt: dolar dolarg dom expgr impgr inf mmgr mresg omega rdegr rerres resgr rus
2.pais 3.pais 4.pais 5.pais 6.pais 7.pais
At: dolar = .0911226 (mean)
dolarg = .0190081 (mean)
dom = .0266963 (mean)
expgr = .1372507 (mean)
impgr = .140755 (mean)
inf = .0425624 (mean)
mmgr = .0428351 (mean)
mresg = .0650741 (mean)
omega = -.1289817 (mean)
rdegr = .0813646 (mean)
rerres = .683406 (mean)
resgr = .2681343 (mean)
rus = 6.248104 (mean)
1.pais = .1471331 (mean)
2.pais = .1081861 (mean)
3.pais = .1489362 (mean)
4.pais = .1489362 (mean)
5.pais = .1489362 (mean)
6.pais = .1489362 (mean)
7.pais = .1489362 (mean)
-----------------------------------------------------
| Delta-method
| dy/dx std. err. z P>|z|
-------------+---------------------------------------
dolar | .3878804 .051841 7.48 0.000
dolarg | -.0346377 .0658742 -0.53 0.599
dom | .1406524 .0227766 6.18 0.000
expgr | -.0115466 .0149594 -0.77 0.440
impgr | -.105129 .0176972 -5.94 0.000
inf | -.1259053 .0557227 -2.26 0.024
mmgr | .0092694 .0120071 0.77 0.440
mresg | .0392879 .0098893 3.97 0.000
omega | -.0800907 .0125584 -6.38 0.000
rdegr | -.0680964 .0178888 -3.81 0.000
rerres | -.0002185 .0001728 -1.26 0.206
resgr | -.0053035 .0085807 -0.62 0.537
rus | .0068563 .0012517 5.48 0.000
|
pais |
BRA | -.1030989 .0273864 -3.76 0.000
CHI | -.1882527 .0238854 -7.88 0.000
COL | -.0428045 .0367298 -1.17 0.244
MEX | -.1258528 .028143 -4.47 0.000
PER | -.1517599 .0263421 -5.76 0.000
VEN | -.1641821 .0243284 -6.75 0.000
-----------------------------------------------------
Note: dy/dx for factor levels is the discrete change
from the base level.
(results bank_logit are active now)
Average marginal effects Number of obs = 2,773
Model VCE: Robust
Expression: Pr(crisis), predict()
dy/dx wrt: dolar dolarg dom expgr impgr inf mmgr mresg omega rdegr rerres resgr rus
2.pais 3.pais 4.pais 5.pais 6.pais 7.pais
-----------------------------------------------------
| Delta-method
| dy/dx std. err. z P>|z|
-------------+---------------------------------------
dolar | .4868221 .0621842 7.83 0.000
dolarg | -.0434732 .082635 -0.53 0.599
dom | .1765304 .0286189 6.17 0.000
expgr | -.0144919 .0187637 -0.77 0.440
impgr | -.1319457 .0224053 -5.89 0.000
inf | -.1580216 .0701566 -2.25 0.024
mmgr | .0116339 .0151103 0.77 0.441
mresg | .0493095 .0121184 4.07 0.000
omega | -.1005205 .0157516 -6.38 0.000
rdegr | -.0854667 .0224627 -3.80 0.000
rerres | -.0002742 .0002185 -1.25 0.210
resgr | -.0066564 .010754 -0.62 0.536
rus | .0086052 .0015531 5.54 0.000
|
pais |
BRA | -.102001 .0269919 -3.78 0.000
CHI | -.211556 .0222333 -9.52 0.000
COL | -.0402919 .0348531 -1.16 0.248
MEX | -.127607 .0279135 -4.57 0.000
PER | -.1592223 .0261813 -6.08 0.000
VEN | -.1756954 .0247131 -7.11 0.000
-----------------------------------------------------
Note: dy/dx for factor levels is the discrete change
from the base level.
(results bank_logit are active now)
3.1.3 Probabilidad pronosticada de crisis
Código
predict phatbank, pr
(251 missing values generated)
Código
kdensity phatbank if crisis==1, $kernelplotaddplot((kdensity phatbank if crisis==0)) title(Probabilidad pronosticada de crisis bancaria) name(bank_kdensity, replace)
3.1.4 Clasificación
Código
estat classification
Logistic model for crisis
-------- True --------
Classified | D ~D | Total
-----------+--------------------------+-----------
+ | 85 32 | 117
- | 265 2391 | 2656
-----------+--------------------------+-----------
Total | 350 2423 | 2773
Classified + if predicted Pr(D) >= .5
True D defined as crisis != 0
--------------------------------------------------
Sensitivity Pr( +| D) 24.29%
Specificity Pr( -|~D) 98.68%
Positive predictive value Pr( D| +) 72.65%
Negative predictive value Pr(~D| -) 90.02%
--------------------------------------------------
False + rate for true ~D Pr( +|~D) 1.32%
False - rate for true D Pr( -| D) 75.71%
False + rate for classified + Pr(~D| +) 27.35%
False - rate for classified - Pr( D| -) 9.98%
--------------------------------------------------
Correctly classified 89.29%
--------------------------------------------------
margins, dydx(*) atmeans noci postestimatesstore margin_bop_atmeansestimatesrestore bop_logitmargins, dydx(*) noci postestimatesstore margin_bopestimatesrestore bop_logit
Conditional marginal effects Number of obs = 2,773
Model VCE: Robust
Expression: Pr(crisis), predict()
dy/dx wrt: dolar dolarg dom expgr impgr inf mmgr mresg omega rdegr rerres resgr rus
2.pais 3.pais 4.pais 5.pais 6.pais 7.pais
At: dolar = .0911226 (mean)
dolarg = .0190081 (mean)
dom = .0266963 (mean)
expgr = .1372507 (mean)
impgr = .140755 (mean)
inf = .0425624 (mean)
mmgr = .0428351 (mean)
mresg = .0650741 (mean)
omega = -.1289817 (mean)
rdegr = .0813646 (mean)
rerres = .683406 (mean)
resgr = .2681343 (mean)
rus = 6.248104 (mean)
1.pais = .1471331 (mean)
2.pais = .1081861 (mean)
3.pais = .1489362 (mean)
4.pais = .1489362 (mean)
5.pais = .1489362 (mean)
6.pais = .1489362 (mean)
7.pais = .1489362 (mean)
-----------------------------------------------------
| Delta-method
| dy/dx std. err. z P>|z|
-------------+---------------------------------------
dolar | -1.343759 .1231165 -10.91 0.000
dolarg | .2414794 .109476 2.21 0.027
dom | .2380116 .0422329 5.64 0.000
expgr | -.0470219 .0246548 -1.91 0.056
impgr | -.070442 .0262885 -2.68 0.007
inf | .283905 .2636708 1.08 0.282
mmgr | .0493052 .0249174 1.98 0.048
mresg | .1380623 .0220845 6.25 0.000
omega | .0294066 .0237446 1.24 0.216
rdegr | -.1693807 .0342112 -4.95 0.000
rerres | -.0000371 .0003603 -0.10 0.918
resgr | .0293626 .013044 2.25 0.024
rus | .0181604 .0023233 7.82 0.000
|
pais |
BRA | .2545243 .0375927 6.77 0.000
CHI | -.036317 .0264694 -1.37 0.170
COL | -.022652 .0328935 -0.69 0.491
MEX | .0882344 .034709 2.54 0.011
PER | -.0601932 .0254236 -2.37 0.018
VEN | .0979301 .0351546 2.79 0.005
-----------------------------------------------------
Note: dy/dx for factor levels is the discrete change
from the base level.
(results bop_logit are active now)
Average marginal effects Number of obs = 2,773
Model VCE: Robust
Expression: Pr(crisis), predict()
dy/dx wrt: dolar dolarg dom expgr impgr inf mmgr mresg omega rdegr rerres resgr rus
2.pais 3.pais 4.pais 5.pais 6.pais 7.pais
-----------------------------------------------------
| Delta-method
| dy/dx std. err. z P>|z|
-------------+---------------------------------------
dolar | -1.332323 .1220498 -10.92 0.000
dolarg | .2394243 .1080927 2.21 0.027
dom | .235986 .0420344 5.61 0.000
expgr | -.0466217 .0244767 -1.90 0.057
impgr | -.0698425 .0259955 -2.69 0.007
inf | .2814889 .2618264 1.08 0.282
mmgr | .0488856 .0247312 1.98 0.048
mresg | .1368873 .0203387 6.73 0.000
omega | .0291563 .0235405 1.24 0.216
rdegr | -.1679392 .0336569 -4.99 0.000
rerres | -.0000368 .0003574 -0.10 0.918
resgr | .0291127 .0128264 2.27 0.023
rus | .0180059 .0022163 8.12 0.000
|
pais |
BRA | .2237431 .0320667 6.98 0.000
CHI | -.0385945 .0277888 -1.39 0.165
COL | -.0237074 .0344942 -0.69 0.492
MEX | .0841388 .0328992 2.56 0.011
PER | -.0659074 .0272463 -2.42 0.016
VEN | .0928011 .0328409 2.83 0.005
-----------------------------------------------------
Note: dy/dx for factor levels is the discrete change
from the base level.
(results bop_logit are active now)
Código
predict phatbop, pr
(251 missing values generated)
Código
kdensity phatbop if crisis==1, $kernelplotaddplot((kdensity phatbop if crisis==0)) title(Probabilidad pronosticada de crisis de balanza de pagos) name(bop_kdensity, replace)
3.2.3 Clasificación
Código
estat classification
Logistic model for crisis
-------- True --------
Classified | D ~D | Total
-----------+--------------------------+-----------
+ | 179 142 | 321
- | 465 1987 | 2452
-----------+--------------------------+-----------
Total | 644 2129 | 2773
Classified + if predicted Pr(D) >= .5
True D defined as crisis != 0
--------------------------------------------------
Sensitivity Pr( +| D) 27.80%
Specificity Pr( -|~D) 93.33%
Positive predictive value Pr( D| +) 55.76%
Negative predictive value Pr(~D| -) 81.04%
--------------------------------------------------
False + rate for true ~D Pr( +|~D) 6.67%
False - rate for true D Pr( -| D) 72.20%
False + rate for classified + Pr(~D| +) 44.24%
False - rate for classified - Pr( D| -) 18.96%
--------------------------------------------------
Correctly classified 78.11%
--------------------------------------------------
Código
generate bopnoise = 0.5*crisis + runiform(-0.1,0.1)twoway (scatter phatbank bopnoise, $noiseplot1), $noiseplot2xtitle(¿Crisis de balanza de pagos?) name(bop_clasifica, replace)