Kiyotaki and Moore (1997): Credit Cycles

In their seminal 1997 paper, Kiyotaki and Moore put forth a model of credit cycles in which movements in asset prices interacts with the real side of the economy and produce amplified and persistent effects of shocks to the economy.

Their original model is relatively simple with risk-neutral agents and one-time unanticipated MIT shocks. Peter Frank Paz, a Ph.D. candidate from New York University proposes a more modern extension of the model with risk-averse agents and recurrent aggregate shocks. The model fits squarely in GDSGE framework and Peter kindly contributed his gmod file below.

As in Kiyotaki and Moore (1997) the economy consists of two production sectors, farming and gathering, with population of each sector normalized to one. The farmers are more productive, but are less patient than the gatherers and thus they tend to borrow from the gatherers in equilibrium.

A farmer solves

\[\max_{\{x_t,k_t,b_t\}}\mathbb{E}_{0}\left[\sum_{t}\beta^{t}\frac{\left(x_{t}\right)^{1-\sigma}}{1-\sigma}\right],\]

subject to the budget constraint:

(15)\[x_{t}+q_{t}k_{t}+\frac{b_{t}}{R_{t}}=y_{t}+q_{t}k_{t-1}+b_{t-1},\]

in which her resource is from production

\[y_{t}=A_{t}\left(a+c\right)k_{t-1},\]

the value of land holding \(q_{t}k_{t-1}\), and bond holding \(b_{t-1}\). The aggregate TFP shock \(A_{t}\) follows a Markov process. She allocates her resource among consumption \(x_{t}\), as well as land and bond holding into the next period. As in Kiyotaki and Moore (1997), here portion \(c\) of the output is non-tradable and has to be consumed, i.e.,

(16)\[x_{t}\geq A_{t}ck_{t-1},\]

and only the remaining portion \(a\) is tradable. She is also subject to the following collateral constraint:

(17)\[b_{t}+\theta\underline{q}_{t+1}k_{t}\geq0.\]

in which \(\underline{q}_{t+1}\) is the lowest possible land price in the next period. In Kiyotaki and Moore (1997) \(\theta\) is set at \(1\) but we allow \(\theta\) to be smaller than \(1\) in this extension so that the collateral constraint binds with positive probability in the ergodic distribution of the model dynamics.

Similarly, a gatherer solves

\[\max_{\{x_{t}^{\prime},k_{t}^{\prime},b_{t}^{\prime}\}}\mathbb{E}_{0}\left[\sum_{t}\left(\beta^{\prime}\right)^{t}\frac{\left(x_{t}^{\prime}\right)^{1-\sigma}}{1-\sigma}\right],\]

subject to the budget constraint,

(18)\[x_{t}^{\prime}+q_{t}k_{t}^{\prime}+\frac{b_{t}^{\prime}}{R_{t}}=y_{t}^{\prime}+q_{t}k_{t-1}^{\prime}+b_{t-1}^{\prime},\]

in which her production function is concave,

\[y_{t}^{\prime}=\underline{A}_{t}\left(k_{t-1}^{\prime}\right)^{\alpha}.\]

We assume the gatherers’ productivity \(\underline{A}_{t}\) is inferior, and equals to a fixed proportion of \(A_{t}\), i.e., \(\underline{A}_{t}=\delta A_{t}\) with \(\delta<1\).

Let us denote the multipliers on the farmers’ budget constraint (15) as \(\beta^{t}\lambda_{t}\), and on the tradability constraint (16) as \(\beta^{t}\eta_{t}\), and on the collateral constraint (17) as \(\beta^{t}\mu_{t}\). Because the farmers and gatherers’ optimization problems are globall concave maximization problems, the following first order conditions and complementary-slackness conditions are neccessary and sufficient for optimality:

\[\begin{split}\left(x_{t}\right)^{-\sigma}-\lambda_{t}+\eta_{t} & =0,\\ \eta_{t}\left(x_{t}-ck_{t-1}\right) & =0,\\ -q_{t}\lambda_{t}+\theta\underline{q}_{t+1}\mu_{t}+\beta\mathbb{E}_{t}\left[ \left(q_{t+1}+a+c\right)\lambda_{t+1}-c\eta_{t+1}\right]&=0,\\ -\frac{1}{R_{t}}\lambda_{t}+\mu_{t}+\beta\mathbb{E}_{t}\left[ \lambda_{t+1}\right]&=0,\\ \mu_{t}\left(\theta\underline{q}_{t+1}k_{t}+b_{t}\right)&=0,\\ \beta^{\prime}\mathbb{E}_{t}\left[ \left(\frac{q_{t+1}+\alpha\left(k_{t}^{\prime}\right)^{\alpha-1}}{q_{t}}\right)\left(\frac{x_{t+1}^{\prime}}{x_{t}^{\prime}}\right)^{-\sigma}\right]&=1,\\ \beta^{\prime}R_{t}\mathbb{E}_{t}\left[ \left(\frac{x_{t+1}^{\prime}}{x_{t}^{\prime}}\right)^{-\sigma}\right]&=1.\end{split}\]

The total land supply is fixed at \(\overline{K}\), and the market clearing conditions are

\[\begin{split}b_{t}+b_{t}^{\prime} & =0,\\ k_{t}+k_{t}^{\prime} & = \overline{K},\\ x_{t}+x_{t}^{\prime} & = Y_t = A_{t}\left(a+c\right)k_{t-1}+\underline{A}_{t}\left(k_{t-1}^{\prime}\right)^{\alpha}.\end{split}\]

We define recursive equilibrium over two endogenous state variables. The first-one is the farmers’ land-holding \(k_{t-1}\). The second one is the farmers’ financial wealth share defined as

\[\omega_{t}=\frac{q_{t}k_{t-1}+b_{t-1}}{q_{t}\overline{K}}.\]

We use \(\left(k_{t-1},\omega_{t}\right)\) as the endogenous state variables, instead of \(\left(k_{t-1},b_{t-1}\right)\) in order to avoid multiple equilibria problems. (The multiple equilibria problem in a similar setting is studied previously in Cao, Luo and Nie (2019).)

In the numerical exercise, we choose the shock process of TFP \(A_{t}\) to be I.I.D., and \(A_{t}\in\left\{ 0.99,1,1.01\right\}\) with probability \(1/3\) for each possible value. In the ergodic distribution, the probabilities for binding collateral constraint conditional on the three values of \(A_{t}\) are 92%, 80% and 77% respectively. Thus the collateral constraint is more likely to be binding when \(A_{t}\) is low.

The IRFs after positive and negative 1 percent TFP shocks (flipped for negative shocks) are plotted below by averaging the conditional responses over the ergodic distribution (using the method from the Guerrieri et al. (2020) example in the following MATLAB file).

../../_images/KM1997_IRF.png

Although the TFP shocks are symmetric and temporary, the IRFs show that their effects are asymmetric and persistent thanks to market incompleteness and the collateral constraint (17). In a more realistically calibrated model, Cao and Nie (2017) study the importance of market incompleteness and collateral constraints in producing these effects. They found that market incompleteness is relatively more important than collateral constraints.

The gmod File

KM1997.gmod

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
%========================================================================================
%   PARAMETERS
%========================================================================================
parameters a c alower sigma betaF betaG alpha Kbar theta;
a = 0.7;        % tradable productivity of farmer
c = 0.3;      % nontradable productivity of farmer
alower=0.9;    % tradable productivity of gatherer

% preferences
sigma=1;      % risk aversion coefficient
betaF=0.95;   % discount factor of farmer
betaG=0.98;   % discount factor of gatherer

% technology
alpha=0.7;    % coefficient of gatherer's production
Kbar=1;       % fixed capital stock

% credit
theta=0.9;

SaveFreq = 200;
PrintFreq = 50;
INTERP_ORDER = 2;
EXTRAP_ORDER = 2;
SIMU_RESOLVE=0; 
SIMU_INTERP=1;  % Use interpolation for fast simulate
IterSaveAll = 0;

%========================================================================================
%  ENDOGENOUS STATES
%========================================================================================
var_state kF omega;
kFPts=41;
kFMin=0.02;
kFMax=0.95;
drift_K = 0.01;
kF=linspace(kFMin,kFMax,kFPts);

omegaPts=40;
omegaMin=0;
omegaMax=0.2;
omega=linspace(omegaMin,omegaMax,omegaPts);

%========================================================================================
%   SHOCKS
%========================================================================================

var_shock A;

shock_num=3;
A = [0.99 1 1.01];
shock_trans = ones(shock_num,shock_num)/shock_num;

[KMesh,omegaMesh] = ndgrid(kF,omega);


%========================================================================================
% STATE TRANSITION FUNCTION: INTERPOLATION Variables subset of Endogenous variables
%========================================================================================
var_policy_init nxF xG eta kFpol R q nbFpol muF;
inbound_init nxF         0  10;
inbound_init xG          0  10;
inbound_init eta         0  1;
inbound_init kFpol       0  Kbar;
inbound_init R           0 10;
inbound_init q           0 10;
inbound_init nbFpol      0 10;      % Transformaion nbFpol = bFpol + theta*q*kFpol
inbound_init muF          0 1;

var_aux_init loglambdaF loglambdaG logaux;

% This corresponds to the T-1 problem
model_init;
    kG     =  Kbar-kF;                        % market clearing for capital state

    % Backout bFpol
    kGpol  =  Kbar-kFpol;                     % market clearing for capital policy
    bFpol = nbFpol;
    bGpol = -bFpol;         % market clearing

    % Backout xG and marginal utility
    Y  =  A*(a+c)*kF + alower*A*kG^alpha;  % aggregate output
    xF = nxF + c*A*kF;  % consumption of farmer

    lambdaF = xF^(-sigma)/(1-eta);   %multiplier for nontradable is eta*lambda
    lambdaG = xG^(-sigma);
    loglambdaF = log(lambdaF);
    loglambdaG = log(lambdaG);    
    aux = (q+A*(a+c)-c*A*eta)*lambdaF;
    logaux = log(aux);

    % In the last period, people consume everything, and qT=0
    xF_next =  (a+c)*kFpol + bFpol;
    xG_next  = alower*kGpol^alpha + bGpol;
    lambdaF_next = xF_next^(-sigma);
    lambdaG_next = xG_next^(-sigma);

    foc_bondG   = 1 - R*betaG*lambdaG_next / lambdaG;
    foc_kG      = q   - betaG*lambdaG_next*alower*alpha*kGpol^(alpha-1)/lambdaG;

    foc_bondF   = 1  -  R*betaF*lambdaF_next / lambdaF   - muF;
    foc_kF      = q  -  betaF*(a+c)*lambdaF_next/lambdaF;
    slack_bF    = muF*nbFpol;
    slack_xF    = eta*nxF;
    budgetF     = q*kFpol +bFpol/R + xF - A*(a+c)*kF - omega*q*Kbar;
    MC_Y = Y - xF - xG;

    equations;
      foc_bondG;
      foc_kG; 
      foc_bondF;
      foc_kF;
      slack_bF;
      slack_xF;
      budgetF;
      MC_Y;
    end;
end;

var_interp loglambdaF_interp loglambdaG_interp logaux_interp q_interp;
%Time iteration update: update of the transition function after  a time iterarion step need to be specified.
loglambdaF_interp = loglambdaF;
loglambdaG_interp = loglambdaG;
logaux_interp     = logaux;
q_interp       = q;

initial loglambdaF_interp loglambdaF;
initial loglambdaG_interp loglambdaG;
initial logaux_interp logaux;
initial q_interp q;

%========================================================================================
%   Endogenous variables or policy  variables: name, and bounds
%========================================================================================
var_policy nxF xG eta kFpol R q nbFpol muF omega_next[3];
inbound nxF         0  2;
inbound xG          0  2;
inbound eta         0  1;
inbound kFpol       0  Kbar;
inbound R           0  1.5 adaptive(1.5);
inbound q           0 10 adaptive(1.5);
inbound nbFpol      0 10 adaptive(1.5);      % Transformaion nbFpol = bFpol + theta*q*kFpol
inbound muF         0 1;
inbound omega_next  0 1;

%====================================================
% Other equilibrium variables
%====================================================
var_aux xF loglambdaF loglambdaG logaux bFpol Y bF; %qlow_next
var_output xF xG Y q R eta muF kFpol omega_next bF;

%====================================================
% MODEL
%====================================================
model;
kG     =  Kbar-kF;                        % market clearing for capital state
Y      =  A*(a+c)*kF + alower*A*kG^alpha;  % aggregate output

bF = q*omega*Kbar - q*kF;

[loglambdaF_next', loglambdaG_next', logaux_next', q_next']=GDSGE_INTERP_VEC'(kFpol,omega_next');
lambdaF_next' = exp(loglambdaF_next');
lambdaG_next' = exp(loglambdaG_next');
aux_next' = exp(logaux_next');

% Backout bFpol
kGpol  =  Kbar-kFpol;                     % market clearing for capital policy
quse = GDSGE_MIN{q_next'};

bFpol = nbFpol - theta*quse*kFpol;
bGpol = -bFpol;         % market clearing
  
% Backout xG and marginal utility
xF = nxF + c*A*kF;  % consumption of farmer
lambdaF = xF^(-sigma)/(1-eta);
lambdaG = xG^(-sigma);
loglambdaF = log(lambdaF);
loglambdaG = log(lambdaG);
aux = (q+A*(a+c)-c*A*eta)*lambdaF;
logaux = log(aux);

mpk_nextplusq'= (alower*A')*alpha*kGpol^(alpha-1)+q_next';
%Aplusqnext'  = A'*(a+c)+q_next';

%====================================================
% calculate the residual equations: 8 equation (= 7+ 1 consistency) and 8 unknown
%====================================================
foc_bondG   = 1 - R*(betaG*GDSGE_EXPECT{lambdaG_next'}) / lambdaG;
foc_kG      = q   - betaG*GDSGE_EXPECT{lambdaG_next'*mpk_nextplusq'}/lambdaG;

foc_bondF   = 1  -  R*(betaF*GDSGE_EXPECT{lambdaF_next'}) / lambdaF   - muF;
foc_kF      = q  -  betaF*GDSGE_EXPECT{aux_next'} /lambdaF   - theta*quse*muF/R;
slack_bF    = muF*nbFpol;
slack_xF    = eta*nxF;
budgetF     = q*kFpol +bFpol/R + xF - A*(a+c)*kF - omega*q*Kbar;
MC_Y = Y - xG - xF;

consis_omega_next' = (q_next'*kFpol + bFpol) - q_next'*omega_next'*Kbar;

   equations;
     foc_bondG;
     foc_kG; 
     foc_bondF;
     foc_kF;
     slack_bF;
     slack_xF;
     budgetF;
     MC_Y;
     consis_omega_next';
    end;
end;

simulate;
   num_periods = 1000;
   num_samples = 100;
   initial kF 0.05;%Kbar - (a/(alower*betaG*alpha))^(1/(alpha-1));
   initial omega 0.01;
   initial shock 2;

   var_simu xF xG Y q R eta muF bF; % some variables
   kF'=kFpol;
   omega' = omega_next';
end;