Primeiro passo:
Instalar o Dynare:
https://www.dynare.org/download/
Segundo passo:
Adicionar a pasta onde você irá colocar os seus arquivos em formato .mod, que é o formato que o Dynare lê. Para tanto, coloque o seguinte código na Command Window do Matlab:
addpath /Applications/Dynare/4.x.y/nomedapasta
No caso o Dynare foi baixado em Applications e estou usando a versão 4.5.7, mas deixei no código 4.x.y para que o leitor adeque à versão que está utilizando.
Terceiro passo:
Montar o arquivo .mod com o seu modelo.
Para tanto, clique em Home> New Script

Clique em save as, coloque format file: all formats e salve o arquivo em .mod:

Há diversos modelos DSGE, a seguinte resposta seguirá o modelo do capítulo 3 do Galí, utilizando o código do Pfeifer, disponibilizado aqui.
Os comentários no Dynare podem ser feitos com as duas barras //, para um comentário de linha e /* */ para comentários maiores, os quais ficam entre esses símbolos. Cuidado ao nomear a variável com algum valor predefinido pelo Matlab. Não use i para denotar uma variável, pois para o Matlab i representa um número imaginário.
Primeira parte do código do script:
Selecione as variáveis que terá em seu modelo: endógenas e exógenas. Explicite também os parâmetros.
var pi ${\pi}$ (long_name='inflation')
y_gap ${\tilde y}$ (long_name='output gap')
y_nat ${y^{nat}}$ (long_name='natural output') //(in contrast to the textbook defined in deviation from steady state)
y ${y}$ (long_name='output')
r_nat ${r^{nat}}$ (long_name='natural interest rate')
r_real ${r^r}$ (long_name='//real interest rate')
i ${i}$ (long_name='nominal interrst rate')
n ${n}$ (long_name='hours worked')
m_real ${m-p}$ (long_name='real money stock')
m_growth_ann ${\Delta m}$ (long_name='money growth annualized')
@#if money_growth_rule==0
nu ${\nu}$ (long_name='AR(1) monetary policy shock process')
@#else
money_growth ${\Delta m_q}$ (long_name='money growth')
@#endif
a ${a}$ (long_name='AR(1) technology shock process')
r_real_ann ${r^{r,ann}}$ (long_name='annualized real interest rate')
i_ann ${i^{ann}}$ (long_name='annualized nominal interest rate')
r_nat_ann ${r^{nat,ann}}$ (long_name='annualized natural interest rate')
pi_ann ${\pi^{ann}}$ (long_name='annualized inflation rate')
;
varexo eps_a ${\varepsilon_a}$ (long_name='technology shock')
@#if money_growth_rule==0
eps_nu ${\varepsilon_\nu}$ (long_name='monetary policy shock')
@#else
eps_m ${\varepsilon_\m}$ (long_name='money growth rate shock')
@#endif
;
parameters alppha ${\alppha}$ (long_name='capital share')
betta ${\beta}$ (long_name='discount factor')
rho_a ${\rho_a}$ (long_name='autocorrelation technology shock')
@#if money_growth_rule==0
rho_nu ${\rho_{\nu}}$ (long_name='autocorrelation monetary policy shock')
@#else
rho_m ${\rho_{m}}$ (long_name='autocorrelation monetary growth rate shock')
@#endif
siggma ${\sigma}$ (long_name='log utility')
phi ${\phi}$ (long_name='unitary Frisch elasticity')
phi_pi ${\phi_{\pi}}$ (long_name='inflation feedback Taylor Rule')
phi_y ${\phi_{y}}$ (long_name='output feedback Taylor Rule')
eta ${\eta}$ (long_name='semi-elasticity of money demand')
epsilon ${\epsilon}$ (long_name='demand elasticity')
theta ${\theta}$ (long_name='Calvo parameter')
;
Como o Matlab tem integração com o Latex, após cada variável coloque a forma matemática da variável ou parâmetro com ${\codigoemlatexdavariável}$ . Após isso explicite o "long_name" da variável para que os gráficos das funções impulso-resposta sejam acompanhados do nome completo da variável.
Segunda parte do código:
Parametrização: defina os valores dos seus parâmetros.
Coloque o ; após cada expressão, caso contrário o MATLAB computa imediatamente o valor.
phi=1;
phi_pi = 1.5;
phi_y = .5/4;
theta=2/3;
@#if money_growth_rule==0
rho_nu =0.5;
@#else
rho_m=0.5;
@#endif
rho_a = 0.9;
betta = 0.99;
eta =4;
alppha=1/3;
epsilon=6;
Terceira parte do código:
Insira as condições de primeira ordem , defina as variâncias dos choques, e compute os valores de estado estacionário. Gere as funções de impulso resposta e o código Latex:
model(linear);
//Composite parameters
#Omega=(1-alppha)/(1-alppha+alppha*epsilon); //defined on page 47
#psi_n_ya=(1+phi)/(siggma*(1-alppha)+phi+alppha); //defined on page 48
#lambda=(1-theta)*(1-betta*theta)/theta*Omega; //defined on page 47
#kappa=lambda*(siggma+(phi+alppha)/(1-alppha)); //defined on page 49
//1. New Keynesian Phillips Curve eq. (21)
pi=betta*pi(+1)+kappa*y_gap;
//2. Dynamic IS Curve eq. (22)
y_gap=-1/siggma*(i-pi(+1)-r_nat)+y_gap(+1);
//3. Interest Rate Rule eq. (25)
@#if money_growth_rule==0
i=phi_pi*pi+phi_y*y_gap+nu;
@#endif
//4. Definition natural rate of interest eq. (23)
r_nat=siggma*psi_n_ya*(a(+1)-a);
//5. Definition real interest rate
r_real=i-pi(+1);
//6. Definition natural output, eq. (19)
y_nat=psi_n_ya*a;
//7. Definition output gap
y_gap=y-y_nat;
//8. Monetary policy shock
@#if money_growth_rule==0
nu=rho_nu*nu(-1)+eps_nu;
@#endif
//9. TFP shock
a=rho_a*a(-1)+eps_a;
//10. Production function (eq. 13)
y=a+(1-alppha)*n;
//11. Money growth (derived from eq. (4))
m_growth_ann=4*(y-y(-1)-eta*(i-i(-1))+pi);
//12. Real money demand (eq. 4)
m_real=y-eta*i;
@#if money_growth_rule==1
//definition nominal money growth
money_growth=m_real-m_real(-1)+pi;
//exogenous process for money growth
money_growth=rho_m*(money_growth(-1))+eps_m;
@#endif
//13. Annualized nominal interest rate
i_ann=4*i;
//14. Annualized real interest rate
r_real_ann=4*r_real;
//15. Annualized natural interest rate
r_nat_ann=4*r_nat;
//16. Annualized inflation
pi_ann=4*pi;
end;
Choques:
@#if money_growth_rule==0
var eps_nu = 0.25^2; //1 standard deviation shock of 25 basis points, i.e. 1 percentage point annualized
@#else
var eps_m = 0.25^2; //1 standard deviation shock of 25 basis points, i.e. 1 percentage point annualized
@#endif
end;
Computar o steady state e checar a condição de Blanchard-Kuhn:
resid(1);
steady;
check;
Gerar as funções de Impulso-Resposta, e replicar as figuras do livro do Galí:
@#if money_growth_rule==0
stoch_simul(order = 1,irf=15) y_gap pi_ann i_ann r_real_ann m_growth_ann nu;
@#else
stoch_simul(order = 1,irf=15) y_gap pi_ann i_ann r_real_ann m_real money_growth;
@#endif
shocks;
@#if money_growth_rule==0
var eps_nu = 0; //shut off monetary policy shock
@#else
var eps_m = 0; //shut off monetary policy shock
@#endif
var eps_a = 1^2; //unit shock to technology
end;
Finalmente, gerando as IRF e gerando o arquivo em LATEX:
stoch_simul(order = 1,irf=15,irf_plot_threshold=0) y_gap pi_ann y n i_ann r_real_ann m_growth_ann a ;
write_latex_dynamic_model;
Quarto passo:
Na Command Window do Matlab digite:
dynare nomedoarquivo.mod
Pronto! O programa computa os resultados do modelo, inclusive as IRF:
