From eab165d3ee1ec159e84d7d3add669b653b6822f2 Mon Sep 17 00:00:00 2001 From: Michel Juillard Date: Tue, 29 May 2012 21:31:24 +0200 Subject: [PATCH] added in manual a section on how to use steady_state_model block with initval and endval for deterministic models. Added test cases for deterministic models. --- doc/dynare.texi | 9 ++ tests/Makefile.am | 8 +- .../deterministic_model_purely_forward.mod | 54 ++++++++++++ tests/deterministic_simulations/rbc_det1.mod | 75 +++++++++++++++++ tests/deterministic_simulations/rbc_det2.mod | 75 +++++++++++++++++ tests/deterministic_simulations/rbc_det3.mod | 75 +++++++++++++++++ tests/deterministic_simulations/rbc_det4.mod | 78 +++++++++++++++++ tests/deterministic_simulations/rbc_det5.mod | 84 +++++++++++++++++++ 8 files changed, 457 insertions(+), 1 deletion(-) create mode 100644 tests/deterministic_simulations/deterministic_model_purely_forward.mod create mode 100644 tests/deterministic_simulations/rbc_det1.mod create mode 100644 tests/deterministic_simulations/rbc_det2.mod create mode 100644 tests/deterministic_simulations/rbc_det3.mod create mode 100644 tests/deterministic_simulations/rbc_det4.mod create mode 100644 tests/deterministic_simulations/rbc_det5.mod diff --git a/doc/dynare.texi b/doc/dynare.texi index 81adc9e76..950289e52 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2569,6 +2569,15 @@ function returning several arguments: Dynare will automatically generate a steady state file using the information provided in this block. +@customhead{Steady state file for deterministic models} + +@code{steady_state_model} block works also with deterministic +models. An @code{initval} block and, when necessary, an @code{endval} +block, is used to set the value of the exogenous variables. Each +@code{initval} or @code{endval} block must be followed by @code{steady} +to execute the function created by @code{steady_state_model} and set the +initial, respectively terminal, steady state. + @examplehead @example diff --git a/tests/Makefile.am b/tests/Makefile.am index 34d2e653a..9daa9b2b1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -125,7 +125,13 @@ MODFILES = \ second_order/ds1.mod \ second_order/ds2.mod \ ep/rbc.mod \ - ep/linear.mod + ep/linear.mod \ + deterministic_simulations/deterministic_model_purely_forward.mod \ + deterministic_simulations/rbc_det1.mod \ + deterministic_simulations/rbc_det2.mod \ + deterministic_simulations/rbc_det3.mod \ + deterministic_simulations/rbc_det4.mod \ + deterministic_simulations/rbc_det5.mod EXTRA_DIST = \ $(MODFILES) \ diff --git a/tests/deterministic_simulations/deterministic_model_purely_forward.mod b/tests/deterministic_simulations/deterministic_model_purely_forward.mod new file mode 100644 index 000000000..c13e5e055 --- /dev/null +++ b/tests/deterministic_simulations/deterministic_model_purely_forward.mod @@ -0,0 +1,54 @@ +var y i pi rbar ; + +varexo r tauw taus taua gn; + +parameters khia khiw khis phipi phiy taubs taubw tauba w sigma psi kappa alpha mu beta teta; + +teta = 12.7721; +sigma = 1.1599; +beta = 0.9970; +alpha = 0.7747; +mu = 0.9030; +taubs = 0.05; +taubw = 0.02; +tauba = 0; +w = 1.5692; +phipi = 1.5; +phiy = 0.5/4; + +khia = (1-beta)/(1-tauba); +khiw = 1/(1-taubw); +khis = 1/(1+taubs); +psi = 1/(sigma + w); +kappa = (1-alpha)*(1-alpha*beta)*(sigma+w)/(alpha*(1+w*teta)); + +model(linear); +y = y(+1)-sigma*(i-pi(+1)-r)+(gn-gn(+1))+(sigma)^-1*khis*(taus(+1)-taus)+sigma*khia*taua; + +pi=kappa*y+kappa*psi*(khiw*tauw+khis*taus-sigma*gn)+beta*pi(+1); + +i=max(0,r+phipi*pi+phiy*y); + +rbar = -((kappa*phipi+(1-beta*mu)*phiy)*sigma^-1*khia*taus)/((1-mu+sigma^-1*phiy)*(1-beta*mu)+kappa*sigma^-1*(phipi-mu)) +- (((1-mu)*kappa*psi*phipi+sigma^-1*mu*kappa*psi*phiy)*khiw*tauw)/((1-mu+sigma^-1*phiy)*(1-beta*mu)+kappa*sigma*(phipi-mu)) +-(kappa*sigma*(1-mu)*(sigma^-1-psi)*phipi+((1-mu)*(1-beta*mu)-kappa*psi*mu)*phiy)*(gn-sigma^-1*khis*taus)/((1-mu-sigma^-1*phiy)*(1-beta*mu)+kappa*sigma^-1*(phipi-mu)); + +end; + +initval; +y=0; +i=-log(beta); +pi=0; +rbar = 0; +end; + +steady; +check; + +shocks; +var r; +periods 1:9; +values -0.0104; +end; + +simul(periods=2100); diff --git a/tests/deterministic_simulations/rbc_det1.mod b/tests/deterministic_simulations/rbc_det1.mod new file mode 100644 index 000000000..e0a6877b6 --- /dev/null +++ b/tests/deterministic_simulations/rbc_det1.mod @@ -0,0 +1,75 @@ +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +efficiency = EfficiencyInnovation/(1-rho); +Efficiency = effstar*exp(efficiency); +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/Efficiency)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +end; + +steady; + +ik = varlist_indices('Capital',M_.endo_names); +CapitalSS = oo_.steady_state(ik); + +histval; +Capital(0) = CapitalSS/2; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; \ No newline at end of file diff --git a/tests/deterministic_simulations/rbc_det2.mod b/tests/deterministic_simulations/rbc_det2.mod new file mode 100644 index 000000000..7c34d592f --- /dev/null +++ b/tests/deterministic_simulations/rbc_det2.mod @@ -0,0 +1,75 @@ +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/effstar)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +Efficiency=effstar; +efficiency=0; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +LagrangeMultiplier=0; +end; + +//steady; + +shocks; +var EfficiencyInnovation; +periods 1; +values -0.1; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; \ No newline at end of file diff --git a/tests/deterministic_simulations/rbc_det3.mod b/tests/deterministic_simulations/rbc_det3.mod new file mode 100644 index 000000000..be9f5ff3e --- /dev/null +++ b/tests/deterministic_simulations/rbc_det3.mod @@ -0,0 +1,75 @@ +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/effstar)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +Efficiency=effstar; +efficiency=0; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +LagrangeMultiplier=0; +end; + +steady; + +shocks; +var EfficiencyInnovation; +periods 4, 5, 6, 7, 8; +values 0.04, 0.05, 0.06, 0.07, 0.08; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; \ No newline at end of file diff --git a/tests/deterministic_simulations/rbc_det4.mod b/tests/deterministic_simulations/rbc_det4.mod new file mode 100644 index 000000000..cdee86dd5 --- /dev/null +++ b/tests/deterministic_simulations/rbc_det4.mod @@ -0,0 +1,78 @@ +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +efficiency = EfficiencyInnovation/(1-rho); +Efficiency = effstar*exp(efficiency); +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/Efficiency)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +end; + +initval; +EfficiencyInnovation = 0; +end; + +steady; + +endval; +EfficiencyInnovation = (1-rho)*log(1.05); +end; + +steady; + +simul(periods=300); + +rplot Consumption; +rplot Capital; \ No newline at end of file diff --git a/tests/deterministic_simulations/rbc_det5.mod b/tests/deterministic_simulations/rbc_det5.mod new file mode 100644 index 000000000..7fcd4d0b6 --- /dev/null +++ b/tests/deterministic_simulations/rbc_det5.mod @@ -0,0 +1,84 @@ +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +model(block,bytecode,cutoff=0); + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; +efficiency = EfficiencyInnovation/(1-rho); +Efficiency = effstar*exp(efficiency); +Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); +Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; +Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/Efficiency)^psi-alpha)/(1-alpha))^(1/psi); +Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; +Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + +% Compute steady state share of capital. +ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + +% Compute steady state of the endogenous variables. +Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); +Consumption=Consumption_per_unit_of_Labour*Labour; +Capital=Labour/Labour_per_unit_of_Capital; +Output=Output_per_unit_of_Capital*Capital; +ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption) + *(alpha*((Output/Capital)^(1-psi))+1-delta); +end; + +initval; +EfficiencyInnovation = 0; +end; + +steady; + +endval; +EfficiencyInnovation = (1-rho)*log(1.05); +end; + +steady; + +shocks; +var EfficiencyInnovation; +periods 1:5; +values 0; +end; + +simul(periods=300); + +rplot Consumption; +rplot Capital; \ No newline at end of file