# Coleman (1991): A production economy with an income tax

Coleman (1991) studies a variation of the RBC model with distortionary taxes. The author proves the existence and uniqueness of recursive equilibrium and charaterizes its properties in this economy. In addition, the author provides an algorithm to compute recursive equilibrium using policy function iteration and proves its convergence. This is one of the rare examples in which the convergence of the policy function iteration can be proved analytically.

Students in the advanced macroeconomics class (Econ 608) at Georgetown University in Spring 2020 (Tae-Hun Chang, Chen Jin, Menghan Li, Yingqi Xu) implented this algorithm in the GDSGE gmod file below.

## The gmod File

`Coleman1991.gmod`

```  1% Parameters
2parameters beta sigma alpha delta K_min K_max rho Imin tau;
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
10tau = 0.2; %linear tax income
11
12TolEq = 1e-6;
13SaveFreq = 50;
14SimuSaveFreq = 1000;
15SimuPrintFreq = 1000;
16
18
19var_shock e;
20
21% Shocks
22shock_num = 2;
23shock_trans = [1/2.0,1/2.0;1/2.0,1/2.0];
24
25e = [-0.01,0.01]*sqrt(1-rho^2);
26
28Kss = (alpha/(1/beta - 1 + delta))^(1/(1-alpha));
29Iss = delta*Kss;
30Imin = phi*Iss;
31
32K_min = 0.5*Kss;
33K_max = 1.5*Kss;
34
35% States
36var_state z K;
37
38z_pts = 21;
39z = linspace(0.9,1.1,z_pts);
40
41K_pts = 101;
42K = exp(linspace(log(K_min),log(K_max),K_pts));
43
44var_interp Euler_interp muc_interp;
45
46% Last period
47var_policy_init c;
48
49inbound_init c 1e-6 100;
50
51var_aux_init Euler mu muc;
52
53model_init;
54
55  Y = z*(K^alpha);
56
57  resid = 1 - c/(Y-Imin);
58
59  mu = 1;
60
61  muc = mu*(c^-sigma);
62
63  Euler = (c^-sigma)*(1-delta+(1-tau)*z*alpha*K^(alpha-1));
64
65  equations;
66     resid;
67  end;
68end;
69
70initial Euler_interp Euler;
71
72Euler_interp = Euler;
73
74initial muc_interp muc;
75
76muc_interp = muc;
77
78% Endogenous variables, bounds, and initial values
79
80var_policy c invst mu;
81
85
86% Other equilbirium variables
87
88var_aux Y Euler K_next muc z_next[2] Inv;
89
90model;
91
92  Inv = invst + Imin;
93
94  K_next = Inv + (1-delta)*K;
95
96  Y = z*(K^alpha);
97
98  resid  = 1 - (Inv+c)/Y;
99
100  % transition to z_next
101
102  z_next' = exp(rho*log(z)+e');
103
104  Euler_future' = Euler_interp'(z_next',K_next);
105
106  EEuler_future = GDSGE_EXPECT{Euler_future'};
107
108  muc_future' = muc_interp'(z_next',K_next);
109
110  Emuc_future = GDSGE_EXPECT{muc_future'};
111
112  Euler = (c^-sigma)*(1-delta+(1-tau)*z*alpha*K^(alpha-1));
113
114  % First order conditions for firms
115
116  foc = 1-mu - (beta*EEuler_future-beta*(1-delta)*Emuc_future)/(c^-sigma);
117
118  comp_slack = mu*invst;
119
120  muc = mu*(c^-sigma);
121
122  equations;
123      foc;
124      resid;
125      comp_slack;
126  end;
127
128end;
129
130simulate;
131
132  num_periods = 15000;
133  num_samples = 100;
134
135  initial K Kss;
136  initial z 1;
137
138  initial shock 2;
139
140  var_simu z K Y c Inv;
141
142  K' = K_next;
143  z' = z_next';
144
145end;
```