An RBC Model with Irreversible Investment

The standard RBC model can also be solved easily using local methods. Now we consider an extension which can only be solved properly using global methods. The model features an investment irreversibility constraint, which requires investment to be larger than a certain threshold.

The Model

We augment the simple RBC model with two additional features.

First, productivity follows a continuous AR(1) process

\[\log z_t = \rho \log z_{t-1} + \epsilon_t\]

where parameter \(\rho \in (0,1)\) is the persistence, \(\epsilon_t\) is an I.I.D. shock.

Second, when accumulating capital,

\[K_{t+1} = K_t(1-\delta) + I_t,\]

the representative firm is subject to an irreversibility constraint

\[I_t \geq \phi I_{ss},\]

where \(I_{ss}\) is the steady-state level of investment and parameter \(\phi\) corresponds to the tightness of the irreversibility constraint.

These features require us to keep track of two continuous state variables: exogenous \(z_t\) and endogenous \(K_t\). The toolbox is well designed to handle models with more than one continuous state variables like the current one.

Let \(\mu_t\) denote the Lagrange multiplier on the irreversibility constraint, the complete-markets equilibrium can be characterized by the Euler equation, the complementary-slackness condition, and the goods market clearing condition:

\[\begin{split}&c_t^{-\sigma}-\mu_t\\ &=\beta \mathbb{E}_t \left[\left ( \alpha z_{t+1} K_{t+1}^{\alpha-1}+(1-\delta)\right)c_{t+1}^{-\sigma}-(1-\delta)\mu_{t+1}\right],\\ &\\ &\mu_t (K_{t+1}-(1-\delta)K_t-\phi I_{ss}) = 0,\\ &\\ &c_t+K_{t+1} = z_t K_t^{\alpha}+(1-\delta)K_t.\end{split}\]

A recursive competitive equilibrium consists of functions: \(c(z,K), K'(z,K), \mu(z,K)\) s.t.

\[\begin{split}&c(z,K)^{-\sigma}-\mu(z,K)\\ &=\beta \mathbb{E}\left[ \left (\alpha z' [K'(z,K)]^{\alpha-1}+(1-\delta)\right)[c(z',K'(z,K))]^{-\sigma}-(1-\delta)\mu(z',K'(z,K)) \Big| z \right]\\ &\\ &\mu(z,K)(K'(z,K)-(1-\delta)K-\phi I_{ss})=0\\ &\\ &c(z,K)+K'(z,K)=zK^{\alpha} + (1-\delta)K.\end{split}\]

This recursive system can be solved using a time iteration procedure similar to the one for the standard RBC model. In the period-\(t\) time step, we take functions \(c_{t+1}(z,K),\mu_{t+1}(z,K)\) as known, and solve for \(c_t,\mu_t,K'_t\) from the system of three equations:

\[\begin{split}&c_t(z,K)^{-\sigma}-\mu_t(z,K)\\ &=\beta \mathbb{E}\left[ \left (\alpha z' [K_t'(z,K)]^{\alpha-1}+(1-\delta)\right)[c_{t+1}(z',K_t'(z,K))]^{-\sigma}-(1-\delta)\mu_{t+1}(z',K_t'(z,K))\Big| z \right]\\ &\\ &\mu_t(z,K)(K'_t(z,K)-(1-\delta)K-\phi I_{ss})=0\\ &\\ &c_t(z,K)+K'_t(z,K)=zK^{\alpha} + (1-\delta)K.\end{split}\]

We keep iterating until convergence.

The gmod File

The recursive system can now be input to the GDSGE toolbox via a mod file rbcIrr.gmod below.

  1% Parameters
  2parameters beta sigma alpha delta K_min K_max rho Imin;
  3
  4beta = 0.99; % dicount factor
  5sigma = 2; % risk aversion
  6alpha = 0.36; % capital share
  7delta = 0.025; % depreciation rate
  8rho = 0.90; %persistent of productivity shocks
  9phi = 0.975; %investment irreversibility constraint
 10
 11TolEq = 1e-6;
 12SaveFreq = 50;
 13SimuSaveFreq = 1000;
 14SimuPrintFreq = 1000;
 15NumThreads = feature('NumCores');
 16
 17% Shocks
 18var_shock e;
 19shock_num = 2;
 20shock_trans = [1/2.0,1/2.0;1/2.0,1/2.0];
 21e = [-0.01,0.01]*sqrt(1-rho^2);
 22
 23% Steady state
 24Kss = (alpha/(1/beta - 1 + delta))^(1/(1-alpha));
 25Iss = delta*Kss;
 26Imin = phi*Iss;
 27K_min = 0.5*Kss;
 28K_max = 1.5*Kss;
 29
 30% States
 31var_state z K;
 32z_pts = 21;
 33z = linspace(0.9,1.1,z_pts);
 34K_pts = 201;
 35K = exp(linspace(log(K_min),log(K_max),K_pts));
 36
 37var_interp Euler_interp muc_interp;
 38
 39% Last period
 40var_policy_init c;
 41inbound_init c 1e-6 100;
 42
 43var_aux_init Euler mu muc;
 44
 45model_init;
 46  Y = z*(K^alpha);
 47  resid = 1 - c/(Y-Imin);
 48  
 49  mu = 1;
 50  muc = mu*(c^-sigma);
 51  Euler = (c^-sigma)*(1-delta+z*alpha*K^(alpha-1));
 52
 53  equations;
 54     resid;		
 55  end;
 56end;
 57
 58initial Euler_interp Euler;
 59Euler_interp = Euler;
 60initial muc_interp muc;
 61muc_interp = muc;
 62
 63% Endogenous variables, bounds, and initial values
 64var_policy c invst mu;
 65
 66inbound c 1e-6 100 adaptive(2);
 67inbound invst 0 50 adaptive(1.5);
 68inbound mu 0 2 adaptive(1.5);
 69
 70% Other equilbirium variables
 71var_aux Y Euler K_next muc z_next[2] Inv;
 72
 73model;
 74  %investment irreversiility constraint    
 75  Inv = invst + Imin;     
 76  K_next = Inv + (1-delta)*K;
 77  Y = z*(K^alpha);
 78  resid  = 1 - (Inv+c)/Y;
 79  
 80  %transition to z_next
 81  z_next' = exp(rho*log(z)+e');
 82  
 83  %interpolation of future policies 
 84  Euler_future' = Euler_interp'(z_next',K_next);  
 85  EEuler_future = GDSGE_EXPECT{Euler_future'};   
 86  muc_future' = muc_interp'(z_next',K_next);
 87  Emuc_future = GDSGE_EXPECT{muc_future'};
 88  
 89  Euler = (c^-sigma)*(1-delta+z*alpha*K^(alpha-1));
 90  muc = mu*(c^-sigma);
 91 
 92  % First order conditions for firms  
 93  foc = 1-mu - (beta*EEuler_future-beta*(1-delta)*Emuc_future)/(c^-sigma);  
 94  comp_slack = mu*invst;
 95
 96  equations;
 97      foc;
 98      resid;
 99      comp_slack; 
100  end;
101end;
102
103simulate;
104  num_periods = 15000;
105  num_samples = 100;
106  
107  initial K Kss;
108  initial z 1;
109  initial shock 2;
110  
111  var_simu z K Y c Inv;
112  K' = K_next;
113  z' = z_next';
114end;

The toolbox solves the model and produces the policy functions. The following figure displays the investment policy function \(I(z,K)\). The investment irreversibility constraint tends to bind when \(K\) is low or \(z\) is low.

../../_images/policy_Inv.png

We then use the policy functions to simulate the model. The following figures show the long run distributions of investment and capital. The investment irreversibility constraint binds around 20% of the times. The distribution of capital is asymmetric and skewed towards lower levels of capital. It is significantly different from the distribution in the RBC model without the irreversibility constraint.

../../_images/histogram_Inv.png ../../_images/histogram_K1.png