La siguiente entrada muestra como especificar un Modelo de
Análisis Macroeconómico Bayesiano para la economía dominicana, disponible como
serie de estudio en la pagina del Banco
Central de la República Dominicana. Esta aplicación se realiza en IRIS (Macroeconomic Modeling Toolbox) un paquete
desarrollado por el Fondo Monetario Internacional.
Posterior a instalar el paquete IRIS y anexarlo al path
de MATLAB. En primer lugar es necesario desarrollar el archivo “.model”, que es
un script en Matlab donde presentamos las variables, los parámetros y las ecuaciones
del modelo. El detalle de esta estructura puede verse en el paper presentado
por Franz Hanann y mencionado anteriormente.
!variables
"brecha del producto" y_gap
"brecha de tasa de interes real" r_gap
"inflacion trimestral anualizada" pic
"tasa de politica monetaria" tpm
"inflacion interanual" picA
"log pib" y
"pib potencial" y_pot
"tasa de interes real" r
!shocks
"choque
de brecha del producto" eta_y_gap
"choque
de oferta o costes" eta_pic
"choque
de politica monetaria" eta_tpm
"choque
de pib potencial" eta_y_pot
!parameters
%brecha del producto
"persistencia de la brecha del producto" bet_1
"componente prospectivo, expectativas" bet_2
"elasticidad de la brecha de tasa, pendiente
curba IS" bet_3
%curva de Phillips
"inercia inflacionaria" alp_1
"componente prospectivo expectativas" alp_2
"pendiente curva de Phillips" alp_3 %mas pequeno, menos sensible es la inflacion a la brecha
% Regla de Taylor
"persistencia tpm" phi_tpm
"parametro de taylor" phi_pic
"brecha del producto" phi_y_gap
% parametros de largo plazo
"meta de tasa" meta_pic
"Tasa de interes neutral" i_neutral
"Tasa de interes real de largo plazo" r_neutral
"Crecimiento potencial" gA_pot
!equations
%brecha
del producto
y_gap = bet_1*y_gap{-1}+
bet_2*y_gap{+1}-bet_3*r_gap + eta_y_gap;
%curva
de phillips
pic =
alp_1*pic{-1}+alp_2*pic{+1}+alp_3*y_gap+eta_pic;
%regla
de politica
tpm =
phi_tpm*tpm{-1}+(1-phi_tpm)*(i_neutral+phi_pic*(picA{-1}-meta_pic)+phi_y_gap*y_gap)+eta_tpm;
%
tasa de interes real
r = tpm - pic{-1};
%brecha
de la tasa de interes real
r_gap = r - r_neutral;
%log pib
y=y_gap+y_pot;
%log
pib pot
y_pot=y_pot{-1} + eta_y_pot; %+ 0.25*gA_pot
%inflacion
anual
picA=0.25*(pic+pic{-1}+pic{-2}+pic{-3});
Posteriormente, una vez hayamos generado esta estructura, es
necesario definir el valor de los parámetros y correr los programas que
resuelven el modelo. Usamos la función Model.fromFile
Que carga la estructura del modelo, colocado anteriormente en un scipt
de extensión “.model”. Note que posteriormente asignamos el valor de estimación
a los parámetros del modelo para posteriormente resolver el estado estacionario
del modelo.
%% Clear
workspace
clear;
close all;
clc;
%#ok<*NOPTS>
%% Load model
file and create model object
m = Model.fromFile("EcnCerrada.model");
%% Assign parameters
%brecha del producto
m.bet_1 = 0.5; %persistencia de la brecha del producto
m.bet_2 = 0.05; %componente prospectivo,
expectativas
m.bet_3 = 0.20; %elasticidad de la brecha de
tasa, pendiente curba IS
%curva de Phillips
m.alp_1 = 0.4; %inercia inflacionaria
m.alp_2 = (1-m.alp_1); %componente
prospectivo, expectativas
m.alp_3 = 0.10; %pendiente curva de Phillips. mas pequeno, menos sensible
es la inflacion a la brecha
% Regla de Taylor
m.phi_tpm = 0.7; %persistencia tpm
m.phi_pic = 1.5; %a mayor, mayor es la
respuesta de la polibica a la infalcion. parametro de taylor (tema: este se
puede estimar)
m.phi_y_gap = 0.5; %brecha del producto
% parametros de largo plazo
m.meta_pic = 4; %meta de tasa
m.i_neutral = 6; %promedio de la tasa entre
2013-2019
m.r_neutral = m.i_neutral-m.meta_pic; %tasa
de interes real de largo plazo
m.gA_pot = 5.1;
%% Compute
steady state
% * Calculate
(stationary) steady state for given parameters
% * Make sure
it is a valid steady state
% * Print a
steady state table
m = steady(m);
checkSteady(m);
%% Show a
steady state table
table(m, ["steadyLevel", "description"])
%% Calculate
first-order solution matrices
%
% Run
`solve()` to calculate a first-order expansion of the model
% equations
around the steady state, and finds a first-order
%
rational-expectations solution. The solution matrices (state-space
% matrices)
are stored within the model object; they are examined in
%
<know_all_about_solution>. The availability of a first-order solution is
% indicated
the model object is displayed.
m = solve(m)
Ahora se generan la estructura
de data para simular choques y recuperar impulso respuesta. Aquí asignamos valores a los choques (d2.eta_tpm(1:5)
= 1;) para posteriormente ver
la repuesta del sistema a esta perturbación. Finalmente estudiamos gráficamente
la respuesta de 4 variables ('y_gap', 'r_gap', 'y', 'pic') a este tipo de perturbación. Observándose, como es natural que los
choques mas persistente tienen a tener un efecto mayor en la evolución de las
variables.
%% Find
steady state
% * Create a
steady-state database
% * Enter a
productivity shock
% * Display
the input time series for the shock on the screen
d0 = steadydb(m, 1:40)
d = d0;
d.eta_tpm(1) = 1;
disp(d.eta_tpm);
%% Choque en la tasa de politica monetaria
d1 = d;
d1 = sstatedb(m, 1:40);
d1.eta_tpm(1) = 1;
disp(d1.eta_tpm)
s1 = simulate(m, d1, 1:40); %simula impulso
respuesta choque
%choque mas persistente.
% Parte de un escenario nuevo
d2 = d;
d2.eta_tpm(1:5) = 1;
s2 = simulate(m, d2, 1:40);
% Gráfico de la variable de interes
s = s1 & s2;
dbplot(s, 0:40, {'y_gap', 'r_gap',
'y', 'pic'},
'Tight=', true);
le = visual.hlegend('bottom', 'No Persistente', 'Persistente');
title(le, 'Choque tpm');

Podemos generar el mismo choque, pero en un contexto de
mayor persistencia de la inflación, por lo que, modificamos el valor del
coeficiente asociado a la persistencia. AL hacer esta modificación en el nivel
de persistencia, es importante tener en cuenta el valor de otros coeficientes. Primero
clonamos el modelo anterior, modificamos los parámetros y luego pasados a
identificar el estado estacionario y solución del modelo en un nuevo objeto.
Finalmente, simulamos el choque sobre este nuevo objeto.
m1 = m;
m1.alp_1 = m.alp_1*1.2;
m1.alp_2 = (1-m1.alp_1);
m1 = steady(m1);
m1 = solve(m1)
d3 = sstatedb(m1, 1:40);
d3.eta_tpm(1) = 1;
s3 = simulate(m1, d3,
1:40);
% Gráfico de la variable de interes
s = s1 & s3;
dbplot(s, 0:40, {'y_gap', 'r_gap',
'y', 'pic'},
'Tight=', true);
le = visual.hlegend('bottom', 'No Persistente', 'Persistente');
title(le, 'Choque tpm');
% Comparar estados
table( ...
[m, m1], ["steadyLevel",
"steadyChange", "form", "description"]
...
, "writeTable",
"steady.xlsx" ...
)