Stationarizing a non-linear model by hand is a tedious process that is better done by the computer.

Computing the equilibrium growth rates of a balanced growth model is complicated and will not be attempted here. We limit ourselves to replace non-stationary variables by their stationary counterpart as specified by the user.

Current restriction: for the time being we limit ourselves to stochastic trends integrated of order 1.

Simple example

Original model

Consider a model with two trends: a labor productivity trend $A_t$ and a nominal price trend $P_t$.

The model is the following (some equations are omitted):

\begin{eqnarray*}
Y_t &=& (A_t L_t)^\alpha K_{t-1}^\beta \\
A_t &=& (1+g_t)A_{t-1}\\
g_t &=& \rho\, g_{t-1}+e_t\\
P_t\,C_t &=& W_t\, L_t\\
P_t &=& (1+\pi_t) P_{t-1}\\
r_t &=& \rho (\pi_t - \bar{\pi}) \\
Y_t &=& C_t + I_t\\
K_t &=& (1-\delta)K_{t-1} + I_t^\frac{1}{\alpha+\beta}
\end{eqnarray*}

Stationarized model

We define stationarized variables by $\hat{Y}_t = Y_t/A_t^{\alpha+\beta}$, $\hat{C}_t = C_t/A_t^{\alpha+\beta}$, $\hat{I}_t = I_t/A_t^{\alpha+\beta}$, $\hat{K}_t = K_t/A_t$, $\hat{W}_t = W_t/(P_t A_t^{\alpha+\beta})$.

The equations of the stationarized model are:

\begin{eqnarray*}
\hat{Y}_t &=& L_t^\alpha \left(\frac{\hat{K}_{t-1}}{1+g_t}\right)^\beta\\
g_t &=& \rho\, g_{t-1}+e_t \\
\hat{C}_t &=& \hat{W}_t\, L_t\\
r_t &=& \rho (\pi_t - \bar \pi) \\
\hat{Y}_t &=& \hat{C}_t + \hat{I}_t \\
\hat{K}_t &=& \frac{(1-\delta)}{1+g_t}\hat{K}_{t-1}+{\hat{I}_t}^\frac{1}{\alpha+\beta}
\end{eqnarray*}

Note that the two trends $A_t$ and $P_t$ have disappeared from the model, along with their laws of motion.

Dynare syntax

Here is the syntax for writing the original (non-stationary) model in Dynare:

var g, pie;
trend_var(growth_factor=1+g) A;
trend_var(growth_factor=1+pie) P;
parameters alpha, beta, delta, rho, piebar;
var L, r;
var(deflator=A) K;
var(deflator=A^(alpha+beta)) Y C I;
var(deflator=P*A^(alpha+beta)) W;
varexo e;

model;
Y = (A*L)^alpha*K(-1)^beta;
g =rho*g(-1)+e;
P*C=W*L;
r =rho*(pie - piebar);
Y=C+I;
K=(1-delta)*K(-1)+I^(1/(alpha+beta));
//... and the last 3 equations
end;

Remarks:

Complete example

See fs2000_nonstationary.mod for a complete example using the cash-in-advance model of Schorfheide (2000).

Algorithm of transformation and test

Pobs/Pobs(-1)=1+pie;

And the trend of the observed variable must be declared with the trend keyword used for estimation:

observation_trends
P_obs (log(1+pie));
end;

For models written in logs

Sometimes you want to write your model in logs rather than in levels, and still use the automatic detrending engine. You can do this using the log_trend_var command and the log_deflator option of var.

Going back to the example at the top of this page, and supposing that all variables have been redefined as being equal to the log of the original variables (except for g, pie, r and e), the model can now be written as:

var g, pie;
log_trend_var(log_growth_factor=g) A
log_trend_var(log_growth_factor=pie) P;
parameters alpha, beta, delta, rho, piebar;
var L, r;
var(log_deflator=A) K;
var(log_deflator=(alpha+beta)*A) Y C I;
var(log_deflator=P+(alpha+beta)*A) W;
varexo e;

model;
Y = alpha*(A+L)+beta*K(-1);
g =rho*g(-1)+e;
P+C=W+L;
r =rho*(pie - piebar);
exp(Y)=exp(C)+exp(I);
exp(K)=(1-delta)*exp(K(-1))+exp(I)^(1/(alpha+beta));
//... and the last 3 equations
end;

(note that we have used the approximation $\log(1+g)\simeq g$ and $\log(1+\pi)\simeq \pi$)