parent
7d3ab36743
commit
3b4ef0df49
|
@ -124,7 +124,9 @@ not recommended as it already denotes the inverse operator. Commands
|
||||||
for declaring variables and parameters are described below.
|
for declaring variables and parameters are described below.
|
||||||
|
|
||||||
.. command:: var VAR_NAME [$TEX_NAME$] [(long_name=QUOTED_STRING|NAME=QUOTED_STRING)]...;
|
.. command:: var VAR_NAME [$TEX_NAME$] [(long_name=QUOTED_STRING|NAME=QUOTED_STRING)]...;
|
||||||
|
var(log) VAR_NAME [$TEX_NAME$] [(long_name=QUOTED_STRING|NAME=QUOTED_STRING)]...;
|
||||||
var(deflator=MODEL_EXPR) VAR_NAME (... same options apply)
|
var(deflator=MODEL_EXPR) VAR_NAME (... same options apply)
|
||||||
|
var(log, deflator=MODEL_EXPR) VAR_NAME (... same options apply)
|
||||||
var(log_deflator=MODEL_EXPR) VAR_NAME (... same options apply)
|
var(log_deflator=MODEL_EXPR) VAR_NAME (... same options apply)
|
||||||
|
|
||||||
|br| This required command declares the endogenous variables in
|
|br| This required command declares the endogenous variables in
|
||||||
|
@ -138,14 +140,28 @@ for declaring variables and parameters are described below.
|
||||||
in the order of declaration, in a column cell array
|
in the order of declaration, in a column cell array
|
||||||
``M_.endo_names``.
|
``M_.endo_names``.
|
||||||
|
|
||||||
*Options*
|
|
||||||
|
|
||||||
If the model is nonstationary and is to be written as such in the
|
If the model is nonstationary and is to be written as such in the
|
||||||
``model`` block, Dynare will need the trend deflator for the
|
``model`` block, Dynare will need the trend deflator for the
|
||||||
appropriate endogenous variables in order to stationarize the
|
appropriate endogenous variables in order to stationarize the
|
||||||
model. The trend deflator must be provided alongside the variables
|
model. The trend deflator must be provided alongside the variables
|
||||||
that follow this trend.
|
that follow this trend.
|
||||||
|
|
||||||
|
*Options*
|
||||||
|
|
||||||
|
.. option:: log
|
||||||
|
|
||||||
|
In addition to the endogenous variable(s) thus declared, this option
|
||||||
|
also triggers the creation of auxiliary variable(s) equal to the log of
|
||||||
|
the corresponding endogenous variable(s). For example, given a
|
||||||
|
``var(log) y`` statement, two endogenous will be created (``y`` and
|
||||||
|
``LOG_y``), and an auxiliary equation linking the two will also be
|
||||||
|
added (equal to ``LOG_y = log(y)``). Moreover, every occurence of ``y``
|
||||||
|
in the model will be replaced by ``exp(LOG_y)``. This option is for
|
||||||
|
example useful when one wants to perform a loglinear approximation of
|
||||||
|
some variable(s) in the context of a first-order stochastic
|
||||||
|
approximation; or when one wants to ensure the variable(s) stay(s) in
|
||||||
|
the definition domain of the function defining the steady state or the
|
||||||
|
dynamic residuals when the nonlinear solver is used.
|
||||||
|
|
||||||
.. option:: deflator = MODEL_EXPR
|
.. option:: deflator = MODEL_EXPR
|
||||||
|
|
||||||
|
@ -155,6 +171,8 @@ for declaring variables and parameters are described below.
|
||||||
the ``trend_var, log_trend_var, var`` and ``parameters``
|
the ``trend_var, log_trend_var, var`` and ``parameters``
|
||||||
commands. The deflator is assumed to be multiplicative; for an
|
commands. The deflator is assumed to be multiplicative; for an
|
||||||
additive deflator, use ``log_deflator``.
|
additive deflator, use ``log_deflator``.
|
||||||
|
This option can be used together with the ``log`` option (the latter
|
||||||
|
must come first).
|
||||||
|
|
||||||
.. option:: log_deflator = MODEL_EXPR
|
.. option:: log_deflator = MODEL_EXPR
|
||||||
|
|
||||||
|
@ -162,6 +180,10 @@ for declaring variables and parameters are described below.
|
||||||
be additive instead of multiplicative (or, to put it
|
be additive instead of multiplicative (or, to put it
|
||||||
otherwise, the declared variable is equal to the log of a
|
otherwise, the declared variable is equal to the log of a
|
||||||
variable with a multiplicative trend).
|
variable with a multiplicative trend).
|
||||||
|
This option cannot be used together with the ``log`` option, because it
|
||||||
|
would not make much sense from an economic point of view (the
|
||||||
|
corresponding auxiliary variable would correspond to the log taken
|
||||||
|
two times on a variable with a multiplicative trend).
|
||||||
|
|
||||||
.. _long-name:
|
.. _long-name:
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ function str = subst_auxvar(var_index, aux_lead_lag, M_)
|
||||||
% OUTPUTS
|
% OUTPUTS
|
||||||
% - str [string] name of auxiliary
|
% - str [string] name of auxiliary
|
||||||
|
|
||||||
% Copyright (C) 2001-2021 Dynare Team
|
% Copyright (C) 2001-2022 Dynare Team
|
||||||
%
|
%
|
||||||
% This file is part of Dynare.
|
% This file is part of Dynare.
|
||||||
%
|
%
|
||||||
|
@ -61,8 +61,9 @@ if ~isempty(aux_index)
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
case 7
|
case 7
|
||||||
% currently unused
|
% Log-transformation of a variable
|
||||||
error('This type of auxiliary variable should not occur, please contact the developers.')
|
str = sprintf('log(%s(%d))', M_.endo_names{M_.aux_vars(aux_index).orig_index}, aux_lead_lag);
|
||||||
|
return;
|
||||||
case 8
|
case 8
|
||||||
% Diff operator
|
% Diff operator
|
||||||
str = sprintf('diff(%s)', M_.endo_names{M_.aux_vars(aux_index).orig_index});
|
str = sprintf('diff(%s)', M_.endo_names{M_.aux_vars(aux_index).orig_index});
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 46cc47266bac728eeb0758d3b7cff18f841437bb
|
Subproject commit 71edfd05e4cc28cb3e36e217aaa0e0cbdc030fd2
|
|
@ -461,7 +461,11 @@ MODFILES = \
|
||||||
bgp/solow-1/solow.mod \
|
bgp/solow-1/solow.mod \
|
||||||
bgp/nk-1/nk.mod \
|
bgp/nk-1/nk.mod \
|
||||||
bgp/ramsey-1/ramsey.mod \
|
bgp/ramsey-1/ramsey.mod \
|
||||||
dynare-command-options/ramst.mod
|
dynare-command-options/ramst.mod \
|
||||||
|
log_transform/example1.mod \
|
||||||
|
log_transform/ramst.mod \
|
||||||
|
log_transform/fs2000_nonstationary.mod \
|
||||||
|
log_transform/nk_ramsey.mod
|
||||||
|
|
||||||
ECB_MODFILES = \
|
ECB_MODFILES = \
|
||||||
var-expectations/1/example1.mod \
|
var-expectations/1/example1.mod \
|
||||||
|
@ -938,6 +942,10 @@ pruning/AS_pruned_state_space_red_shock.o.trs: pruning/AnSchorfheide_pruned_stat
|
||||||
ramst_model_edit.m.trs: ramst.m.trs
|
ramst_model_edit.m.trs: ramst.m.trs
|
||||||
ramst_model_edit.o.trs: ramst.o.trs
|
ramst_model_edit.o.trs: ramst.o.trs
|
||||||
|
|
||||||
|
log_transform/ramst.m.trs: ramst.m.trs
|
||||||
|
log_transform/ramst.o.trs: ramst.o.trs
|
||||||
|
|
||||||
|
|
||||||
observation_trends_and_prefiltering/MCMC: m/observation_trends_and_prefiltering/MCMC o/observation_trends_and_prefiltering/MCMC
|
observation_trends_and_prefiltering/MCMC: m/observation_trends_and_prefiltering/MCMC o/observation_trends_and_prefiltering/MCMC
|
||||||
m/observation_trends_and_prefiltering/MCMC: $(patsubst %.mod, %.m.trs, $(filter observation_trends_and_prefiltering/MCMC/%.mod, $(MODFILES)))
|
m/observation_trends_and_prefiltering/MCMC: $(patsubst %.mod, %.m.trs, $(filter observation_trends_and_prefiltering/MCMC/%.mod, $(MODFILES)))
|
||||||
o/observation_trends_and_prefiltering/MCMC: $(patsubst %.mod, %.o.trs, $(filter observation_trends_and_prefiltering/MCMC/%.mod, $(MODFILES)))
|
o/observation_trends_and_prefiltering/MCMC: $(patsubst %.mod, %.o.trs, $(filter observation_trends_and_prefiltering/MCMC/%.mod, $(MODFILES)))
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
// Test for var(log) in a stochastic context
|
||||||
|
|
||||||
|
var(log) c, y, k;
|
||||||
|
var a, h, b;
|
||||||
|
varexo e, u;
|
||||||
|
|
||||||
|
parameters beta, rho, alpha, delta, theta, psi, tau;
|
||||||
|
|
||||||
|
alpha = 0.36;
|
||||||
|
rho = 0.95;
|
||||||
|
tau = 0.025;
|
||||||
|
beta = 0.99;
|
||||||
|
delta = 0.025;
|
||||||
|
psi = 0;
|
||||||
|
theta = 2.95;
|
||||||
|
|
||||||
|
phi = 0.1;
|
||||||
|
|
||||||
|
model;
|
||||||
|
c*theta*h^(1+psi)=(1-alpha)*y;
|
||||||
|
k = beta*(((exp(b)*c)/(exp(b(+1))*c(+1)))
|
||||||
|
*(exp(b(+1))*alpha*y(+1)+(1-delta)*k));
|
||||||
|
y = exp(a)*(k(-1)^alpha)*(h^(1-alpha));
|
||||||
|
k = exp(b)*(y-c)+(1-delta)*k(-1);
|
||||||
|
a = rho*a(-1)+tau*b(-1) + e;
|
||||||
|
b = tau*a(-1)+rho*b(-1) + u;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initval;
|
||||||
|
y = 1.08068253095672;
|
||||||
|
c = 0.80359242014163;
|
||||||
|
h = 0.29175631001732;
|
||||||
|
k = 11.08360443260358;
|
||||||
|
a = 0;
|
||||||
|
b = 0;
|
||||||
|
e = 0;
|
||||||
|
u = 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
shocks;
|
||||||
|
var e; stderr 0.009;
|
||||||
|
var u; stderr 0.009;
|
||||||
|
var e, u = phi*0.009*0.009;
|
||||||
|
end;
|
||||||
|
|
||||||
|
stoch_simul;
|
||||||
|
|
||||||
|
if isempty(strmatch('LOG_y', M_.endo_names))
|
||||||
|
error('Log-transformed variable not created')
|
||||||
|
end
|
|
@ -0,0 +1,78 @@
|
||||||
|
// Test for var(log, deflator=…)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2004-2022 Dynare Team
|
||||||
|
*
|
||||||
|
* This file is part of Dynare.
|
||||||
|
*
|
||||||
|
* Dynare is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Dynare is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Dynare. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var gM gA;
|
||||||
|
trend_var(growth_factor=gA) A;
|
||||||
|
trend_var(growth_factor=gM) M;
|
||||||
|
var(log, deflator=A) k c y;
|
||||||
|
var(deflator=M(-1)/A) P;
|
||||||
|
var(deflator=M(-1)) W l d;
|
||||||
|
var R n;
|
||||||
|
varexo e_a e_m;
|
||||||
|
|
||||||
|
parameters alp bet gam mst rho psi del;
|
||||||
|
|
||||||
|
alp = 0.33;
|
||||||
|
bet = 0.99;
|
||||||
|
gam = 0.003;
|
||||||
|
mst = 1.011;
|
||||||
|
rho = 0.7;
|
||||||
|
psi = 0.787;
|
||||||
|
del = 0.02;
|
||||||
|
|
||||||
|
model;
|
||||||
|
gA = exp(gam+e_a);
|
||||||
|
log(gM) = (1-rho)*log(mst) + rho*log(gM(-1))+e_m;
|
||||||
|
c+k = k(-1)^alp*(A*n)^(1-alp)+(1-del)*k(-1);
|
||||||
|
P*c = M;
|
||||||
|
P/(c(+1)*P(+1))=bet*P(+1)*(alp*k^(alp-1)*(A(+1)*n(+1))^(1-alp)+(1-del))/(c(+2)*P(+2));
|
||||||
|
(psi/(1-psi))*(c*P/(1-n))=W;
|
||||||
|
R = P*(1-alp)*k(-1)^alp*A^(1-alp)*n^(-alp)/W;
|
||||||
|
W = l/n;
|
||||||
|
M-M(-1)+d = l;
|
||||||
|
1/(c*P)=bet*R/(c(+1)*P(+1));
|
||||||
|
y = k(-1)^alp*(A*n)^(1-alp);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initval;
|
||||||
|
k = 6;
|
||||||
|
gM = mst;
|
||||||
|
P = 2.25;
|
||||||
|
c = 0.45;
|
||||||
|
W = 4;
|
||||||
|
R = 1.02;
|
||||||
|
d = 0.85;
|
||||||
|
n = 0.19;
|
||||||
|
l = 0.86;
|
||||||
|
y = 0.6;
|
||||||
|
gA = exp(gam);
|
||||||
|
end;
|
||||||
|
|
||||||
|
shocks;
|
||||||
|
var e_a; stderr 0.014;
|
||||||
|
var e_m; stderr 0.005;
|
||||||
|
end;
|
||||||
|
|
||||||
|
steady;
|
||||||
|
|
||||||
|
check;
|
||||||
|
|
||||||
|
stoch_simul;
|
|
@ -0,0 +1,85 @@
|
||||||
|
// Tests var(log) in combination with ramsey_model
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------------
|
||||||
|
//1. Variable declaration
|
||||||
|
//------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
var pai, n, r, a;
|
||||||
|
var(log) c;
|
||||||
|
//4 variables + 1 shock
|
||||||
|
|
||||||
|
varexo u;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------------
|
||||||
|
// 2. Parameter declaration and calibration
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
parameters beta, rho, epsilon, omega, phi, gamma;
|
||||||
|
|
||||||
|
beta=0.99;
|
||||||
|
gamma=3; //Frish elasticity
|
||||||
|
omega=17; //price stickyness
|
||||||
|
epsilon=8; //elasticity for each variety of consumption
|
||||||
|
phi=1; //coefficient associated to labor effort disutility
|
||||||
|
|
||||||
|
rho=0.95; //coefficient associated to productivity shock
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------------------------------------------
|
||||||
|
// 3. The model
|
||||||
|
//-----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
model;
|
||||||
|
|
||||||
|
|
||||||
|
a=rho*(a(-1))+u;
|
||||||
|
|
||||||
|
1/c=beta*(1/(c(+1)))*(r/(pai(+1))); //euler
|
||||||
|
|
||||||
|
|
||||||
|
omega*pai*(pai-1)=beta*omega*(c/(c(+1)))*(pai(+1))*(pai(+1)-1)+epsilon*exp(a)*n*(c/exp(a)*phi*n^gamma-(epsilon-1)/epsilon); //NK pc
|
||||||
|
//pai*(pai-1)/c = beta*pai(+1)*(pai(+1)-1)/c(+1)+epsilon*phi*n^(gamma+1)/omega-exp(a)*n*(epsilon-1)/(omega*c); //NK pc
|
||||||
|
|
||||||
|
(exp(a))*n=c+(omega/2)*((pai-1)^2);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
// 4. Steady state
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
initval;
|
||||||
|
|
||||||
|
pai=1;
|
||||||
|
r=1/beta;
|
||||||
|
c=0.9671684882;
|
||||||
|
n=0.9671684882;
|
||||||
|
a=0;
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
// 5. shocks
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
shocks;
|
||||||
|
var u; stderr 0.008;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
// 6. Ramsey problem
|
||||||
|
//--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
planner_objective(ln(c)-phi*((n^(1+gamma))/(1+gamma)));
|
||||||
|
|
||||||
|
ramsey_model(planner_discount=0.99, planner_discount_latex_name = $\delta$);
|
||||||
|
stoch_simul(order=1,irf=20);
|
||||||
|
evaluate_planner_objective;
|
|
@ -0,0 +1,51 @@
|
||||||
|
// Test for var(log) in a deterministic context
|
||||||
|
|
||||||
|
var(log) c k;
|
||||||
|
varexo x;
|
||||||
|
|
||||||
|
parameters alph gam delt bet aa;
|
||||||
|
alph=0.5;
|
||||||
|
gam=0.5;
|
||||||
|
delt=0.02;
|
||||||
|
bet=0.05;
|
||||||
|
aa=0.5;
|
||||||
|
|
||||||
|
|
||||||
|
model;
|
||||||
|
c + k - aa*x*k(-1)^alph - (1-delt)*k(-1);
|
||||||
|
c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initval;
|
||||||
|
x = 1;
|
||||||
|
k = ((delt+bet)/(1.0*aa*alph))^(1/(alph-1));
|
||||||
|
c = aa*k^alph-delt*k;
|
||||||
|
end;
|
||||||
|
|
||||||
|
steady;
|
||||||
|
|
||||||
|
check;
|
||||||
|
|
||||||
|
shocks;
|
||||||
|
var x;
|
||||||
|
periods 1;
|
||||||
|
values 1.2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
perfect_foresight_setup(periods=200);
|
||||||
|
perfect_foresight_solver;
|
||||||
|
|
||||||
|
idx_c = strmatch('c', M_.endo_names);
|
||||||
|
idx_log_c = strmatch('LOG_c', M_.endo_names);
|
||||||
|
if isempty(idx_log_c)
|
||||||
|
error('Log-transformed variable not created')
|
||||||
|
end
|
||||||
|
|
||||||
|
if max(abs(oo_.endo_simul(idx_log_c, :) - log(oo_.endo_simul(idx_c, :)))) > 1e-7
|
||||||
|
error('Transformation not correctly performed')
|
||||||
|
end
|
||||||
|
|
||||||
|
S = load('../ramst/Output/ramst_results.mat');
|
||||||
|
if max(abs(oo_.endo_simul(idx_c, :) - S.oo_.endo_simul(idx_c, :))) > 1e-7
|
||||||
|
error('Result differs from non-transformed model')
|
||||||
|
end
|
Loading…
Reference in New Issue