clc, clear all, close all; %% Cell arrays for IRFs and Welfare measure interestrules=14; %Number of interest rate rules (+1 for PEG) calibrations=14; %Number of different calibrations irfperiods=20; %Impulse Response Function periods IRF_ALL=cell(calibrations,interestrules+1); U=table(zeros(interestrules,1), zeros(interestrules,1), 'VariableNames',... {'Conditional' 'Unconditional'}); %Table for saving welfare results (of each iteration / different MP) Welfare=table(zeros(interestrules,1), zeros(interestrules,1), ... 'VariableNames', {'Conditional' 'Unconditional'}); %Table for saving welfare results (of each iteration / different MP) %% Welfare calculations i=1; %Policy regimes j=1; %Calibrations phi_pis=repelem(1.27,14); %Different weights on inflation (Interest rate rule for MP) phi_ys=repelem(0.47,14); %Different weights on output gap (How strongly monetary authority reacts) phi_epss=(0:0.1:1.30); %Different weights on output gap (How strongly monetary authority reacts) phi_epss(14)=1.27; for i=1:(calibrations) phi_pi=phi_pis(i); %Taking different weights from phi_pis vector phi_y=phi_ys(i); phi_eps=phi_epss(i); save MP_weights.mat phi_pi phi_y phi_eps %Saving the weights into a file that will be loaded in dynare dynare SOE_CITR.mod; % Non-stationary variables PH=ones(1,21); %Domestic price level P = ones(1,21); %CPI level NER = ones(1,21); %Nominal exchange rate level % Stationary variables PIH = 1+oo_.irfs.Pi_H_eps_A; %Domestic inflation PI = 1+oo_.irfs.Pi_eps_A; % CPI inflation Delta_NER = 1+oo_.irfs.delta_eps_eps_A; %Change in NER for ii=(2:(irfperiods+1)) %Evolution of the non-stationary variables (given inflation, changes in NER) PH(ii) = PH(ii-1)*PIH(ii-1); P(ii) = P(ii-1)*PI(ii-1); NER(ii) = NER(ii-1)*Delta_NER(ii-1); end %To start from zero PH=PH-1; P=P-1; NER=NER-1; %Extracting IRF from Dynare results irf = array2table(zeros(irfperiods,16), 'VariableNames', {'PIH' 'Y_gap' 'PI' 'ToT' ... 'NER' 'IR' 'PH' 'CPI' 'REER' 'MC' 'N' 'C'... 'w' 'nx', 'Y', 'Y_flex'}); irf{:,1} = transpose(oo_.irfs.Pi_H_eps_A); irf{:,2} = transpose(oo_.irfs.y_gap_eps_A); irf{:,3} = transpose(oo_.irfs.Pi_eps_A); irf{:,4} = transpose(oo_.irfs.S_eps_A); irf{:,5} = transpose(NER(2:end)); irf{:,6} = transpose(oo_.irfs.R_eps_A); irf{:,7} = transpose(PH(2:end)); irf{:,8} = transpose(P(2:end)); irf{:,9} = transpose(oo_.irfs.q_eps_A); irf{:,10} = transpose(oo_.irfs.mc_eps_A); irf{:,11} = transpose(oo_.irfs.N_eps_A); irf{:,12} = transpose(oo_.irfs.C_eps_A); irf{:,13} = transpose(oo_.irfs.w_eps_A); irf{:,14} = transpose(oo_.irfs.nx_eps_A); irf{:,15} = transpose(oo_.irfs.Y_eps_A); irf{:,16} = transpose(oo_.irfs.Y_flex_eps_A); %Saving IRFs (j~different calibration, i~different MP rule) IRF_ALL{j,i}=irf; %% Utility and Welfare U_DR= oo_.dr.inv_order_var(1); % Declaration order -> Decision Rule (DR) order // Utility is declared 1st -> oo_.dr.inv_order_var(1) gives the DR order of the utility U{i,1}=oo_.dr.ys(1) + 0.5*oo_.dr.ghs2(U_DR); % oo_.dr.ys(Declaration Order of Utility) + 0.5*oo_.dr.ghs2(DR Order of Utility) // The stochastic steady state (Dynare Manual 4.13.4) U{i,2}=oo_.mean(1); % Unconditional mean Welfare_DR= oo_.dr.inv_order_var(2); % Declaration order -> Decision Rule (DR) order // Utility is declared 1st -> oo_.dr.inv_order_var(1) gives the DR order of the utility Welfare{i,1}=oo_.dr.ys(2) + 0.5*oo_.dr.ghs2(Welfare_DR); % oo_.dr.ys(Declaration Order of Utility) + 0.5*oo_.dr.ghs2(DR Order of Utility) // The stochastic steady state (Dynare Manual 4.13.4) Welfare{i,2}=oo_.mean(2); % Unconditional mean end%% %% Plot IRFs CITR=IRF_ALL{1,1}; CITR_EPS1=IRF_ALL{1,7}; CITR_EPS2=IRF_ALL{1,14}; figure for ii=1:15 subplot(5,3,ii) plot(CITR{:,ii}, 'black', 'LineWidth', 1, 'LineStyle', '-') hold on plot(CITR_EPS1{:,ii}, 'red', 'LineWidth', 1, 'LineStyle', '--') plot(CITR_EPS2{:,ii}, 'blue', 'LineWidth', 1, 'LineStyle', '-') hold off grid on if ii==1 title('Domestic inflation') elseif ii==2 title('Output gap') elseif ii==3 title('CPI inflation') elseif ii==4 title('TOT') elseif ii==5 title('NER') elseif ii==6 title('R') elseif ii==7 title('PH') elseif ii==8 title('P') elseif ii==9 title('REER') elseif ii==10 title('MC real') elseif ii==11 title('N') elseif ii==12 title('C') elseif ii==13 title('w') elseif ii==14 title('nx') elseif ii==15 title('Output') end end legend({'CNB', 'ExRate 0.6', 'ExRate 1.27'}, 'orientation', 'horizontal') %% Welfare table figure plot(phi_epss, Welfare.Conditional(1:14),'DisplayName','U.Conditional(1:14)') hold on plot(phi_epss, Welfare.Unconditional(1:14),'DisplayName','U.Unconditional(1:14)', 'LineStyle', '--') grid on grid minor hold off; ylabel('Expected Welfare') xlabel('Interest rate coefficient - Exchange rate') legend('Conditional', 'Unconditional')