GRO3 Stochastic growth model with recursive preferences and stochastic volatility (SV)

This model is similar to Caldara et al. (2012).

Model's structure

Response variable Consumption ($C$), Labor ($L$), Marginal utility with respect to consumption ($U_C$), Instantaneous utility ($U$), Production ($Y$), Utility ($V$).

State variable Capital stock ($K$), Log of productivity ($Z$), Log of productivity volatility ($\sigma$).

Shock Innovation to productivity ($\epsilon$), Innovation to productivity volatility ($\omega$).

Parameters Capital depreciation rate ($\delta$), Discount factor ($\beta$), Index of deviation from CRRA utility ($\nu$), Risk-aversion parameter ($\tau$), Capital share ($\alpha$), Share of consumption in utility ($\theta$), Persistence of log-productivity ($\rho_Z$), Persistence of SV ($\rho_{\sigma}$), Unconditional mean of SV ($\bar{\sigma}$), Standard deviation of SV ($\eta$).

Equilibrium equation

$$C_{t}: U_{C,t}=\beta\left(\mathrm{E}_{t}\tilde{V}_{t+1}\right)^{\left(\frac{1}{\theta}-1\right)}\mathrm{E}_{t}\left[\tilde{V}_{t+1}^{\frac{\theta-1}{\theta}}U_{C,t+1}\left(1-\delta+ \alpha e^{Z_{t+1}}K_{t+1}^{\alpha-1}L_{t+1}^{\alpha-1}\right)\right].$$

$$L_t: (1-\theta) C_t = \theta (1-\alpha) Y_t \left(\frac{1}{L_t}-1\right)$$

$$U_{C,t}: U_{C,t} = \theta \frac{1-\tau}{\nu} \frac{U_t^{1/\nu}}{C_t}$$

$$U_t: U_t = \left[C_t^{\theta}(1-L_t)^{1-\theta}\right]^{1-\tau}$$

$$Y_t: Y_t = e^{Z_{t}}K_{t}^{\alpha}L_t^{1-\alpha}$$

$$V_t: \tilde{V}_t^{\frac{1}{\nu}} = (1-\beta) U_t^{\frac{1}{\nu}} + \beta \mathrm{E}_t \tilde{V}_t^{\frac{1}{\nu}}$$

$$\tilde{V}_t: \tilde{V}_t=V_t^{1-\tau}$$

Transition equations

$$K_{t}: K_{t}=+\left(1-\delta\right)K_{t-1}-C_{t-1},$$

$$Z_{t}: Z_{t}=\rho_Z Z_{t-1}+e^{\sigma_t}\epsilon_{t}.$$

$$\sigma_t: \sigma_t = (1-\rho_{\sigma})\bar{\sigma}+\rho_{\sigma}\sigma_{t-1}+\eta\omega_t$$

Writing the model

The model is defined in a Yaml file: gro3.yaml.

Create the model object

model = recsmodel('gro3.yaml',struct('Mu',[0 0],'Sigma',eye(2),'order',5));
Deterministic steady state (different from first guess, max(|delta|)=0.74174)
 State variables:
		9.393	-2.383e-18	-4.962	

 Response variables:
		0.7139	0.3283	0.2072	0.8285	0.898	0.6864	0.8285	

 Expectations variables:
		0.209	0.8285	

Define approximation space using Chebyshev polynomials

smin       = [0.85*model.sss(1) -0.11 log(0.007)*1.15];
smax       = [1.20*model.sss(1)  0.11 log(0.007)*0.85];
[interp,s] = recsinterpinit(4,smin,smax,'cheb');

Find a first guess through first-order approximation around the steady state

[interp,x] = recsFirstGuess(interp,model,s);

Define options

options = struct('reemethod','1-step',...
                 'accuracy' ,1,...
                 'stat'     ,1);

Solve for rational expectations

[interp,x,z] = recsSolveREE(interp,model,s,x,options);

Use simple continuation method to solve for higher values of risk aversion

The procedure to solve for different parameters values has to be packed in a function. This is done in gro3problem.m.

type('gro3problem.m')
function [X,f,exitflag] = gro3problem(X,z)
% GRO3PROBLEM Solves the model GRO3 for different values of risk aversion and IES

[model,interp,s,x,options] = X{:};

tau = z(1);
Psi = z(2);
nu  = (1-tau)/(1-1/Psi);
model.params(1)         = tau;
model.params(end-1:end) = [nu Psi];

[interp,x,~,f,exitflag] = recsSolveREE(interp,model,s,x,options);

X = {model interp s x options};

This function requires as input the cell array X:

X = {model interp s x options};

The function SCP starts from the known solution with a low risk aversion to find in 2 steps the solution with an higher risk aversion:

X = SCP(X,[5 0.5],[0.5 1/0.5],@gro3problem,2);
[model,interp,s,x,options] = X{:};

Simulate the model

recsSimul(model,interp,model.sss(ones(100,1),:),200,[],options);
subplot(3,4,1)
xlabel('Capital stock')
ylabel('Frequency')
subplot(3,4,2)
xlabel('Log of productivity')
ylabel('Frequency')
subplot(3,4,3)
xlabel('Log of productivity volatility')
ylabel('Frequency')
subplot(3,4,4)
xlabel('Consumption')
ylabel('Frequency')
subplot(3,4,5)
xlabel('Labor')
ylabel('Frequency')
subplot(3,4,6)
xlabel('Marginal utility wrt consumption')
ylabel('Frequency')
subplot(3,4,7)
xlabel('Instantaneous utility')
ylabel('Frequency')
subplot(3,4,8)
xlabel('Production')
ylabel('Frequency')
subplot(3,4,9)
xlabel('Intertemporal utility')
ylabel('Frequency')
subplot(3,4,10)
xlabel('')
ylabel('Frequency')
Statistics from simulated variables (excluding the first 20 observations):
 Moments
    Mean      Std. Dev. Skewness  Kurtosis  Min       Max       %LB       %UB
    9.4387    0.3503   -0.0486    3.3439    8.1623   10.6634
    0.0014    0.0221   -0.1389    3.0904   -0.0864    0.0812
   -4.9681    0.1355   -0.0647    2.9197   -5.4628   -4.4161

  Columns 1 through 7

    0.7159    0.0179   -0.1065    3.2107    0.6450    0.7766         0
    0.3284    0.0035   -0.0603    3.0875    0.3141    0.3415         0
   -0.7265    0.0235   -0.3056    3.4076   -0.8282   -0.6532         0
    4.4913    0.1378    0.3047    3.5371    4.0606    5.0584         0
    0.9010    0.0326   -0.0451    3.0821    0.7754    1.0217         0
    0.6866    0.0019   -0.1667    3.2122    0.6786    0.6931         0
    4.4990    0.0508    0.2131    3.2439    4.3328    4.7155         0

  Column 8

         0
         0
         0
         0
         0
         0
         0

 Correlation
  Columns 1 through 7

    1.0000    0.6340    0.0151    0.9345    0.2135    0.9606   -0.9984
    0.6340    1.0000    0.0229    0.8676    0.8907    0.8208   -0.6248
    0.0151    0.0229    1.0000    0.0204    0.0208    0.0183   -0.0139
    0.9345    0.8676    0.0204    1.0000    0.5469    0.9952   -0.9294
    0.2135    0.8907    0.0208    0.5469    1.0000    0.4717   -0.2017
    0.9606    0.8208    0.0183    0.9952    0.4717    1.0000   -0.9588
   -0.9984   -0.6248   -0.0139   -0.9294   -0.2017   -0.9588    1.0000
    0.7388    0.9892    0.0244    0.9302    0.8158    0.8936   -0.7300
    0.9075    0.9000    0.0211    0.9975    0.6036    0.9873   -0.9023
   -0.9073   -0.9000   -0.0208   -0.9973   -0.6034   -0.9876    0.9026

  Columns 8 through 10

    0.7388    0.9075   -0.9073
    0.9892    0.9000   -0.9000
    0.0244    0.0211   -0.0208
    0.9302    0.9975   -0.9973
    0.8158    0.6036   -0.6034
    0.8936    0.9873   -0.9876
   -0.7300   -0.9023    0.9026
    1.0000    0.9531   -0.9528
    0.9531    1.0000   -0.9999
   -0.9528   -0.9999    1.0000

 Autocorrelation
    1         2         3         4         5
    0.9954    0.9869    0.9747    0.9593    0.9412
    0.9240    0.8548    0.7904    0.7318    0.6782
    0.8832    0.7766    0.6817    0.5952    0.5164

    0.9737    0.9466    0.9188    0.8906    0.8618
    0.9011    0.8126    0.7313    0.6583    0.5933
    0.9821    0.9622    0.9405    0.9174    0.8928
    0.9951    0.9863    0.9739    0.9583    0.9400
    0.9357    0.8766    0.8209    0.7696    0.7219
    0.9664    0.9332    0.9001    0.8675    0.8351
    0.9664    0.9332    0.9000    0.8674    0.8350

Accuracy of the solution
 Equilibrium equation error (in log10 units)
    Max       Mean
   -5.3443   -5.6520
   -5.4925   -5.9427
   -4.7844   -5.0056
   -3.5814   -3.7755
   -5.0963   -5.4723
   -6.8964   -7.0964
   -5.3337   -5.5384

References

Caldara D.; Fernandez-Villaverdes, J.; Rubio-Ramirez, J. F. & Yao, W. (2012). Computing DSGE models with recursive preferences and stochastic volatility. Review of Economic Dynamics 15(2), 188-206.