% simula o modelo mod_fiscal_04 sob parametrizacao basica
% calcula multiplicadores de gastos sob diferentes regras fiscais
% graficos p BRE
% compara modelos com diferentes valores de nr

clear all;

global nr_i beta_i h_i sigma_c_i sigma_l_i eta_t_k_i eta_t_l_i eta_nt_k_i eta_nt_l_i delta_i delta_til_i gamma_i eta_i eta_t_g_i eta_nt_g_i mu_t_i mu_nt_i tao_star_i mu_w_i phi_i miw_i  y_star_i pt_star_i taoc_star_i g_i ig_i tl_i wm_i taoc_i taow_ss_i taok_ss_i taox_ss_i rho_b_i rho_i_i rho_R_star_i rho_pi_star_i rho_premium_i rho_a_t_i rho_a_nt_i rho_l_i rho_taoc_star_i rho_y_star_i rho_p_star_i rho_target_i theta_i a_i r_star_i g_ss_i  ig_ss_i t_ss_i wm_ss_i taoc_ss_i rendak_ss_i bc_ss_i gg_ss_i uwg_ss_i lg_llt_ss_i big_i bag_i wmt_ss_i uwt_ss_i nr2_i f_uwt_i cct_ss_i;

% --------------------------------------------------------
%   Valores atribuídos às variáveis exógenas no steady-state:
% --------------------------------------------------------

%   Setor externo
y_star_i = 100;%100;
pt_star_i = 1;%1;
taoc_star_i = 0;%0;
r_star_i=1/0.995;

%   Variáveis fiscais
g_ss_i = 0.51;%0.58;
ig_ss_i = 0.2;%0.2;
t_ss_i = 0.6;%0.04;
wm_ss_i = 1.7;%1.9;
taoc_i = 0.28;%0.28;
taow_i = 0.22;%0.22;
taok_i = 0.24;%0.24;
taox_i = 0.045;%0.045;
qui_1_i = 0.5;%0.5;
qui_2_i = 0.1;%0.1;

uwt_ss_i = 1;
f_uwt_i = 0.5;

% --------------------------------------------------------
% Parametros (1)
% --------------------------------------------------------

%Taxa de depreciação do capital:
delta_i = 0.02;%0.025;
delta_til_i = 0.02;%0.025;

% Coeficiente da regras de política monetaria:
phi_r_i = 0.5;%0.5;

% Coeficientes das regras de política fiscal:
f_fiscal = 0.89; %persistencia das variaveis fiscais - meia-vida=6
f_g_i = f_fiscal;%0.5;
phi_g_i = -0.025;%-0.025;
f_tao_i = f_fiscal;%0.5;
phi_tao_i = 0.025;%0.025;
f_ig_i = f_fiscal;%0.5;
phi_ig_i = -0.025;%-0.025;
f_w_i = f_fiscal;%0.5;
phi_w_i = -0.025;%-0.025;
f_t_i = f_fiscal;%0.5;
phi_t_i = 0.025;%0.025;

% emprego publico
uwg_ss_i = 1.2;%1.25;
lg_llt_ss_i = 0.3;%0.3;

big_i = 0.1;%0.1;
bag_i = 0.1;%0.1;
f_uwg_i = f_fiscal;%0.5;
f_lg_i = f_fiscal;%0.5;

%Impaciência dos indivíduos:
beta_i = 0.9875;%0.9875;

%Grau de indexação dos preços dos bens tradables:
gamma_p_t_i = 0.469;%0.469;

%Grau de indexação dos preços dos bens non-tradables:
gamma_p_nt_i = 0.469;%0.469;

%Parâmetros das funções de produção das firmas produtoras de bens intermediários:
eta_t_k_i = 0.425;%0.425;
eta_t_l_i = 0.4;%0.4;
eta_nt_k_i = 0.25;%0.25;
eta_nt_l_i = 0.65;%0.65;

%Sensibilidade com relação ao capital público:
eta_t_g_i = 0.05;%0.05;
eta_nt_g_i = 0.05;%0.05;

%Grau de indexação dos salários:
gamma_w_i = 0.7;%0.7;

%Parâmetro de Calvo para salários: 
alfa_w_i = 0.6;

%Mark-up dos salários em ss:
mu_w_i = 0.5;%0.5; 

%Participação de itens tradables no grupo de bens intermediários:
gamma_i = 0.32;%0.32;

%Parâmetro que mede a sensibilidade da demanda doméstica por bens tradables e non-tradables com relação aos seus preços relativos (own-price elasticity):
eta_i = 2;%2;

%Perdas oriundas de variações na capacidade instalada:
psi_i = 1/0.169;%1/0.169;

%Proporção do trabalho ofertado por indivíduos ricardianos no trabalho total utilizado pelas firmas do setor
%de bens intermediários:
phi_i = 0.7;%0.7;

%Parâmetro que define a sensibilidade da demanda por trabalho (ricardiano
%ou não) com relação ao seu preço relativo (own-price elasticity)
a_i = 50;

%Alíquota de impostos em ss:
tao_ss_i = 0.2;%0.2;
taok_ss_i = taok_i;
taoc_ss_i = taoc_i;
taow_ss_i = taow_i;
taox_ss_i = taox_i;
taoc_star_ss_i = taoc_star_i;

%Parâmetro que mede a sensibilidade do prêmio de risco:
theta_i = 1.1;%1.1;

% premio de risco em SS *************

%Perdas ao longo do processo de crescimento do estoque de capital:
ni_i = 1/6.771;%1/6.771;

%Parâmetro que mede a sensibilidade da demanda externa com relação ao preço "externo" dos bens tradables produzidos domesticamente:
tao_star_i = 10;%10;

%Parâmetros que só aparecem em SS
mu_t_i = 0.1;%0.1;
mu_nt_i = 0.2;%0.2;

%Persistência dos choques estruturais:
rho_b_i = 0.9;%0.9;
rho_i_i = 0.9;%0.9;
rho_a_t_i = 0.9;%0.9;
rho_a_nt_i = 0.9;%0.9;
rho_l_i = 0.9;%0.9;
rho_target_i = 0.9;%0.9;
rho_R_star_i = 0.9;%0.9;
rho_pi_star_i = 0.9;%0.9;
rho_premium_i = 0.9; %0.9;
rho_taoc_star_i = 0.9;%0.9;
rho_y_star_i = 0.9;%0.9;
rho_p_star_i = 0.9;%0.9;


% --------------------------------------------------------
% Parametros (2)
% --------------------------------------------------------

%Elasticidade da utilidade marginal do consumo:sigma_c = sigma_c_i; (1.01,1.2,2)
%Elasticidade da desutilidade marginal do trabalho:sigma_l = sigma_l_i;
%(2, 2.4, 4)
%Parâmetro da formação de hábito:h = h_i; (0.25, 0.5, 0.75)
%Parâmetro de Calvo para preços de bens tradables:alfa_p_t=alfa_p_t_i;
%(0.3, 0.5, 0.7)
%Parâmetro de Calvo para preços de non-tradables:alfa_p_nt=alfa_p_nt_i;
%(0.2, 0.5, 0.6)
%Coeficientes na regra de política monetária:phi_pi=phi_pi_i; (0.55, 2, 4)
%phi_y=phi_y_i; (0, 0.1, 0.5)
%Coeficientes na regra de política fiscal:phi_ig=phi_ig_i; (0, -0.25, -0.5)
%Parâmetro de Calvo para salários: alfa_w = alfa_w_i ; (0.3, 0.6, 0.9)
%Parâmetro relativo a proporção de agentes não ricardianos na economia: nr=nr_i; (0.25, 0.5, 1) 

%              1           2           3           4           5           6           7           8           9           10           11           12          13          14
parametros = ['sigma_c  ';'sigma_l  ';'h        ';'alfa_p_t ';'alfa_p_nt';'phi_pi   ';'phi_y    ';'big      ';'bag      ';'\zeta_c  ';'phi      '; 'a        ';'qui_1    ';'zeta_a   ' ];
valores = [1.01 1.2 2.4; 1.5 2 4; 0.25 0.65 0.75; 0.3 0.5 0.7; 0.2 0.5 0.6; 0.55 1 2; 0 0.1 0.5; 0 0 10;     0 0 1;     0.2 0.2 0.2; 0.35 0.65 0.75; 0.1 5 50 ; 0 0 0;     0.1 0.26 0.4];

    sigma_c_i = valores(1,2);
    sigma_l_i = valores(2,2);
    h_i = valores(3,2);
    alfa_p_t_i= valores(4,2);
    alfa_p_nt_i= valores(5,2);
    phi_pi_i = valores(6,2);
    phi_y_i= valores(7,2);
    big_i= valores(8,2);
    bag_i = valores(9,2);
    nr_i = valores(10,2);
    phi_i = valores(11,2);
    a_i = valores(12,2);
    qui_1_i = valores(13,2);
    nr2_i = valores(14,2);

phi_pi_def_i = phi_pi_i*0;
phi_pi_cor_i = phi_pi_i*1;
phi_pi_fut_i = phi_pi_i*0;
phi_y_def_i  = phi_y_i*0;
phi_y_cor_i  = phi_y_i*1;
phi_y_fut_i  = phi_y_i*0;


        % --------------------------------------------------------
        % Parametros derivados
        % --------------------------------------------------------

        kappa_p_t_i = ((1-alfa_p_t_i*beta_i)*(1-alfa_p_t_i))/alfa_p_t_i;
        kappa_p_nt_i = ((1-alfa_p_nt_i*beta_i)*(1-alfa_p_nt_i))/alfa_p_nt_i;
        cte_i = 1 + ((1+mu_w_i)*sigma_l_i)/mu_w_i;
        kappa_w_i = ((1-alfa_w_i*beta_i)*(1-alfa_w_i))/alfa_w_i; 
        k_w_i = kappa_w_i/cte_i;
        rk_ss_i = (1-beta_i*(1-delta_i))/(beta_i*(1-taok_ss_i)*(1+taoc_ss_i));

        % --------------------------------------------------------
        % VARIA nr/zeta_c
        % --------------------------------------------------------

        p=10; %parametro que varia = nrt = nr+nr2
        for i=1:3
            nr_i = valores(10,i);
            
        % --------------------------------------------------------
        % Calcula SS
        % --------------------------------------------------------

         mod_fiscal_04_ss_solve;

        % --------------------------------------------------------
        % Solucao e simulacao do modelo log-linearizado
        % --------------------------------------------------------

        % Choques        
        var_ch_vg = (x(30)*x(31)*0.01 / g_ss_i)^2;
        var_ch_vig = (x(30)*x(31)*0.01 / ig_ss_i)^2;
        var_ch_vw = (x(30)*x(31)*0.01 / (wm_ss_i*par_pop+wmt_ss_i*par_pop2) )^2;
        var_ch_vuwg = (x(30)*x(31)*0.01 / (x(33)*x(35)) )^2;
        var_ch_vlg = (x(30)*x(31)*0.01 / (x(33)*x(35)) )^2;

            dynare mod_fiscal_04d_ajs_tax noclearall;
%            dynare mod_fiscal_04d_ajds_ig noclearall;
            
        A(:,1+(i-1)*12:12+(i-1)*12)=[pib_vg0 c_vg0 il_vg0 l_vg0 pi_vg0 r_vg0 w_vg0 wrel_vg0 cl_vg0 cc_vg0 lrel_vg0 yrel_vg0];
        AA(:,1+(i-1)*12:12+(i-1)*12)=[g_vg0 wm_vg0 ig_vg0 lg_vg0 wg_vg0 gg_vg0 d_vg0 sp_vg0 taok_vg0 kg_vg0 kl_vg0 bc_vg0];
       
        B(:,1+(i-1)*12:12+(i-1)*12)=[pib_vw0 c_vw0 il_vw0 l_vw0 pi_vw0 r_vw0 w_vw0 wrel_vw0 cl_vw0 cc_vw0 lrel_vw0 yrel_vw0];
        BB(:,1+(i-1)*12:12+(i-1)*12)=[g_vw0 wm_vw0 ig_vw0 lg_vw0 wg_vw0 gg_vw0 d_vw0 sp_vw0 taok_vw0 kg_vw0 kl_vw0 bc_vw0];

        C(:,1+(i-1)*12:12+(i-1)*12)=[pib_vig0 c_vig0 il_vig0 l_vig0 pi_vig0 r_vig0 w_vig0 wrel_vig0 cl_vig0 cc_vig0 lrel_vig0 yrel_vig0];
        CC(:,1+(i-1)*12:12+(i-1)*12)=[g_vig0 wm_vig0 ig_vig0 lg_vig0 wg_vig0 gg_vig0 d_vig0 sp_vig0 taok_vig0 kg_vig0 kl_vig0 bc_vig0];

        D(:,1+(i-1)*12:12+(i-1)*12)=[pib_vlg0 c_vlg0 il_vlg0 l_vlg0 pi_vlg0 r_vlg0 w_vlg0 wrel_vlg0 cl_vlg0 cc_vlg0 lrel_vlg0 yrel_vlg0];
        DD(:,1+(i-1)*12:12+(i-1)*12)=[g_vlg0 wm_vlg0 ig_vlg0 lg_vlg0 wg_vlg0 gg_vlg0 d_vlg0 sp_vlg0 taok_vlg0 kg_vlg0 kl_vlg0 bc_vlg0];

        E(:,1+(i-1)*12:12+(i-1)*12)=[pib_vuwg0 c_vuwg0 il_vuwg0 l_vuwg0 pi_vuwg0 r_vuwg0 w_vuwg0 wrel_vuwg0 cl_vuwg0 cc_vuwg0 lrel_vuwg0 yrel_vuwg0];
        EE(:,1+(i-1)*12:12+(i-1)*12)=[g_vuwg0 wm_vuwg0 ig_vuwg0 lg_vuwg0 wg_vuwg0 gg_vuwg0 d_vuwg0 sp_vuwg0 taok_vuwg0 kg_vuwg0 kl_vuwg0 bc_vuwg0];
        
        end
                

   % ------------------------------------------------------------------
   % GRAFICOS 
   % ------------------------------------------------------------------

%-------
%parametros para eixo nos graficos
%-------

e1=-0.03;
e2=0.02;
e3=-0.005;
e4=0.01;
e5=-0.03;
e6=0.03;
e7=-0.02;
e8=0.04;
e9=-0.06;
e10=0.06;


        % --------------------------------------------------------
        % GRAFICOS - CHOQUE EM WM
        % --------------------------------------------------------

    variaveis = ['y ';'c ';'i ';'l ';'pi';'r ';'w ';'wr'; 'cl'; 'cc'; 'lr'; 'yr'];
    figure('Name','Ch. Nao antecipado - WM','PaperOrientation','landscape','PaperUnits', 'normalized', 'PaperPosition',[0,0,1,1])
    for j=1:12
        subplot(3,4,j)
        plot([B(:,1+(j-1)) B(:,13+(j-1)) B(:,25+(j-1)) ], 'LineWidth', 2)
        title(variaveis(j,:))
        if j<5
            axis([0 20 e1 e2])
        elseif ((j>4) && (j<7))
            axis([0 20 e3 e4])
        elseif ((j>6) && (j<9))
            axis([0 20 e5 e6])
        elseif ((j>8) && (j<11))
            axis([0 20 e7 e8])
        else
            axis([0 20 e9 e10])
        end
    end
    legenda=legend([parametros(p,:) '=' num2str(valores(p,1))], [parametros(p,:) '=' num2str(valores(p,2))], [parametros(p,:) '=' num2str(valores(p,3))], 'Location','NorthEast');
    set(legenda, 'FontSize', 7);


        % --------------------------------------------------------
        % GRAFICOS - CHOQUE EM IG
        % --------------------------------------------------------

    variaveis = ['y ';'c ';'i ';'l ';'pi';'r ';'w ';'wr'; 'cl'; 'cc'; 'lr'; 'yr'];
    figure('Name','Ch. Nao antecipado - IG','PaperOrientation','landscape','PaperUnits', 'normalized', 'PaperPosition',[0,0,1,1])
    for j=1:12
        subplot(3,4,j)
        plot([C(:,1+(j-1)) C(:,13+(j-1)) C(:,25+(j-1))], 'LineWidth', 2)
        title(variaveis(j,:))
        if j<5
            axis([0 20 e1 e2])
        elseif ((j>4) && (j<7))
            axis([0 20 e3 e4])
        elseif ((j>6) && (j<9))
            axis([0 20 e5 e6])
        elseif ((j>8) && (j<11))
            axis([0 20 e7 e8])
        else
            axis([0 20 e9 e10])
        end
    end
    legenda=legend([parametros(p,:) '=' num2str(valores(p,1))], [parametros(p,:) '=' num2str(valores(p,2))], [parametros(p,:) '=' num2str(valores(p,3))], 'Location','NorthEast');
    set(legenda, 'FontSize', 7);


        % --------------------------------------------------------
        % GRAFICOS - CHOQUE EM LG
        % --------------------------------------------------------

    variaveis = ['y ';'c ';'i ';'l ';'pi';'r ';'w ';'wr'; 'cl'; 'cc'; 'lr'; 'yr'];
    figure('Name','Ch. Nao antecipado - LG','PaperOrientation','landscape','PaperUnits', 'normalized', 'PaperPosition',[0,0,1,1])
    for j=1:12
        subplot(3,4,j)
        plot([D(:,1+(j-1)) D(:,13+(j-1)) D(:,25+(j-1)) ], 'LineWidth', 2)
        title(variaveis(j,:))
        if j<5
            axis([0 20 e1 e2])
        elseif ((j>4) && (j<7))
            axis([0 20 e3 e4])
        elseif ((j>6) && (j<9))
            axis([0 20 e5 e6])
        elseif ((j>8) && (j<11))
            axis([0 20 e7 e8])
        else
            axis([0 20 e9 e10])
        end
    end
    legenda=legend([parametros(p,:) '=' num2str(valores(p,1))], [parametros(p,:) '=' num2str(valores(p,2))], [parametros(p,:) '=' num2str(valores(p,3))], 'Location','NorthEast');
    set(legenda, 'FontSize', 7);



% ------------------------------------
% EXPORTA GRAFICOS
% ------------------------------------
    psname = 'graficos_aj_temp1.ps'; 

    print ( '-dpsc2', psname, '-f1' )
    
    for jj=2:3
    print ( '-dpsc2', psname, '-append', ['-f' num2str(jj)] )
    end

    close all;

% ------------------------------------
% EXPORTA RESULTADOS
% ------------------------------------

%xlswrite('results1',[A(:,13:60) B(:,13:60) C(:,13:60) D(:,13:60) E(:,13:60)]);
%xlswrite('results2',[AA(:,13:60) BB(:,13:60) CC(:,13:60) DD(:,13:60) EE(:,13:60)]);
