threemge.gms : Three Approaches to Differential Tax Policy Analysis

Description

```Three Approaches to Differential Tax Policy Analysis
```

Small Model of Types : MPSGE mcp

Category : GAMS Model library

Main file : threemge.gms

``````\$title Three Approaches to Differential Tax Policy Analysis (THREEMGE,SEQ=154)

\$onText
Three Approaches to Differential Tax Policy Analysis

Rutherford, T F, Applied General Equilibrium Modeling with MPSGE as
a GAMS Subsystem: An Overview of the Modeling Framework and Syntax.
Computational Economics 14 (1999), 1-46.

------------------------------------------------------------------
SECTION (i)     DATA SPECIFICATION AND BENCHMARKING

Keywords: mixed complementarity problem, general equilibrium model, tax policy
\$offText

Set
G 'goods and sectors' / X, Y /
F 'primary factors'   / K, L /
H 'households'        / OWNER, WORKER/;

Alias (S,G);

Table A(G,S) 'make matrix (goods outputs by sector)'
X   Y
X   100
Y        80;

Table B(G,S) 'use matrix (goods inputs by sector)'
X   Y
X       20
Y   10    ;

Table C(G,H) 'household demand'
OWNER  WORKER
X      30      50
Y      40      30;

Table FD(F,S) 'factor demand by sector'
X   Y
K   20  40
L   50  10;

Table E(F,H) 'factor endowments'
OWNER  WORKER
K      60
L             100;

Table D(F,H) 'factor demand by households'
WORKER
L       40;

Table T(F,S) 'tax payment by factor by sector'
X   Y
K   20  10;

Parameter
TRN(H)  'transfer revenue' / OWNER 10, WORKER 20 /
ELAS(S) 'elasticity of substitution in production'
ESUB(H) 'elasticity of substitution in demand'
TF(F,S) 'factor tax rate'
PF(F,S) 'benchmark factor prices gross of tax';

ELAS(S) = 1;
ESUB(H) = 0.5;
TF(F,S) = T(F,S)/FD(F,S);
PF(F,S) = 1 + TF(F,S);

Scalar GREV 'benchmark government revenue';
GREV = sum(H, TRN(H));

Parameter
THETA(G) 'weights in numeraire price index'
WBAR(H)  'benchmark welfare index';

THETA(G) = sum(H, C(G,H));
THETA(G) = THETA(G)/sum(S, THETA(S));
WBAR(H)  = sum(G, C(G,H)) + sum(F, D(F,H));

* MODEL #1        TAX POLICY WITH EXOGENOUSLY SPECIFIED TAX RATES
* SECTION (ii)    MPS/GE MODEL DECLARATION
\$onText
\$MODEL:HARBERGER

\$SECTORS:
AL(S)

\$COMMODITIES:
P(G)  W(F)  PT

\$CONSUMERS:
RA(H) GOVT

\$REPORT:
V:CD(G,H)     D:P(G)     DEMAND:RA(H)
V:DF(F,H)     D:W(F)     DEMAND:RA(H)
V:EMPLOY(S)   I:W("L")   PROD:AL(S)
V:WLF(H)      W:RA(H)

\$PROD:AL(S) s:0 a:ELAS(S)
O:P(G)   Q:A(G,S)
I:P(G)   Q:B(G,S)
I:W(F)   Q:FD(F,S)   P:PF(F,S)   A:GOVT   T:TF(F,S)  a:

\$DEMAND:RA(H) s:1 a:ESUB(H)
D:P(G)   Q:C(G,H)   a:
D:W(F)   Q:D(F,H)
E:W(F)   Q:E(F,H)
E:PT     Q:TRN(H)

\$DEMAND:GOVT
D:PT     Q:GREV
\$offText

\$sysInclude mpsgeset HARBERGER

* SECTION (iii)   BENCHMARK REPLICATION
HARBERGER.iterLim = 0;
\$include HARBERGER.GEN
solve HARBERGER using mcp;
abort\$(abs(HARBERGER.objVal) > 1.E-4) "*** HARBERGER benchmark does not calibrate.";
HARBERGER.iterLim = 1000;

* ------------------------------------------------------------------
* SECTION (iv)  COUNTER-FACTUAL SPECIFICATION AND SOLUTION:
Set SC 'counterfactual scenarios to be computed' / L  'UNIFORM TAX ON LABOR'
K  'UNIFORM TAX ON CAPITAL'

Parameter
TAXRATE(F,S,SC)  'counterfactual tax rates'
REPORT(*,*,*,SC) 'solution report - % changes'
PINDEX           'price deflator';

* SPECIFY COUNTER-FACTUAL TAX RATES TO ACHIEVE CETERIS
* PARIBUS BALANCED BUDGET:
TAXRATE("L",S,"L")  = GREV/sum(G, FD("L",G));
TAXRATE("K",S,"K")  = GREV/sum(G, FD("K",G));
TAXRATE("L",S,"VA") = GREV/sum((F,G), FD(F,G));
TAXRATE("K",S,"VA") = GREV/sum((F,G), FD(F,G));

loop(SC,
*  INSTALL TAX RATES FOR THIS COUNTERFACTUAL:
TF(F,S) = TAXRATE(F,S,SC);

\$  include HARBERGER.GEN
solve HARBERGER using mcp;

*  ------------------------------------------------------------------
*  SECTION (v) REPORT WRITING:
*  REPORT SOME RESULTS:
PINDEX = sum(G, P.l(G)*THETA(G));
REPORT("HARBERGER","REVENUE","_",SC)     = 100*(PT.l/PINDEX - 1);
REPORT("HARBERGER","TAXRATE","_",SC)     = 100*smax((F,S), TAXRATE(F,S,SC));
REPORT("HARBERGER","WELFARE","TOTAL",SC) = 100*(sum(H, WBAR(H)*(WLF.l(H) - 1))/sum(H, WBAR(H)));
REPORT("HARBERGER","WELFARE",H,SC)       = 100*(WLF.l(H) - 1);
REPORT("HARBERGER","EMPLOY",S,SC)        = 100*(EMPLOY.l(S)/FD("L",S) - 1);
REPORT("HARBERGER","PRICE",G,SC)         = 100*(P.l(G)/PINDEX - 1);
REPORT("HARBERGER","PRICE",F,SC)         = 100*(W.l(F)/PINDEX - 1);
REPORT("HARBERGER","OUTPUT",S,SC)        = 100*(AL.l(S) - 1);
);

* ------------------------------------------------------------------
* MODEL #2        DIFFERENTIAL TAX POLICY WITH ENDOGENOUS
*                 ADJUSTMENT OF RATES TO ACHIEVE EQUAL YIELD

* SECTION (ii)    MPS/GE MODEL DECLARATION
\$onText
\$MODEL:SHOVEN

\$SECTORS:
AL(S)

\$COMMODITIES:
P(G)   W(F)  PT

\$CONSUMERS:
RA(H)  GOVT

\$AUXILIARY:
TAU

\$REPORT:
V:CD(G,H)     D:P(G)     DEMAND:RA(H)
V:DF(F,H)     D:W(F)     DEMAND:RA(H)
V:EMPLOY(S)   I:W("L")   PROD:AL(S)
V:WLF(H)      W:RA(H)

\$PROD:AL(S) s:0 a:ELAS(S)
O:P(G)   Q:A(G,S)
I:P(G)   Q:B(G,S)
I:W(F)   Q:FD(F,S)  P:PF(F,S)   A:GOVT   N:TAU   M:TF(F,S)  a:

\$DEMAND:RA(H) s:1 a:ESUB(H)
D:P(G)   Q:C(G,H)   a:
D:W(F)   Q:D(F,H)
E:W(F)   Q:E(F,H)
E:PT     Q:TRN(H)

\$DEMAND:GOVT
D:PT     Q:GREV

\$CONSTRAINT:TAU
PT =g= sum(G, THETA(G)*P(G));
\$offText
\$sysInclude mpsgeset SHOVEN

* ------------------------------------------------------------------
* SECTION (iii)   BENCHMARK REPLICATION

* THE DEFAULT INITIAL VALUE FOR AUXILIARY VARIABLES IS ZERO,
* SO TO REPLICATE THE BENCHMARK WE NEED TO ASSIGN THE LEVEL
* VALUE TO UNITY:
TAU.l = 1;

* REINSTALL THE BENCHMARK TAX RATE:
TF(F,S) = PF(F,S) - 1;

* VERIFY THAT THE BENCHMARK EQUILIBRIUM IS REPLICATED:
SHOVEN.iterLim = 0;
\$include SHOVEN.GEN
solve SHOVEN using mcp;
abort\$(abs(SHOVEN.objVal) > 1.E-4) "*** SHOVEN benchmark does not calibrate.";
SHOVEN.iterLim = 1000;

* ------------------------------------------------------------------
* SECTION (iv)  COUNTER-FACTUAL SPECIFICATION AND SOLUTION:
loop(SC,
*  INSTALL TAX RATES FOR THIS COUNTERFACTUAL:
TF(F,S) = TAXRATE(F,S,SC);

\$  include SHOVEN.GEN
solve SHOVEN using mcp;

*  ------------------------------------------------------------------
*  SECTION (v)  REPORT WRITING:
PINDEX = sum(G, P.l(G)*THETA(G));

REPORT("SHOVEN","REVENUE","_",SC)     = 100*(PT.l/PINDEX - 1);
REPORT("SHOVEN","TAXRATE","_",SC)     = 100*TAU.l*smax((F,S), TAXRATE(F,S,SC));
REPORT("SHOVEN","WELFARE","TOTAL",SC) = 100*(sum(H, WBAR(H)*(WLF.l(H) - 1))/sum(H, WBAR(H)));
REPORT("SHOVEN","WELFARE",H,SC)       = 100*(WLF.l(H) - 1);
REPORT("SHOVEN","EMPLOY",S,SC)        = 100*(EMPLOY.l(S)/FD("L",S) - 1);
REPORT("SHOVEN","PRICE",G,SC)         = 100*(P.l(G)/PINDEX - 1);
REPORT("SHOVEN","PRICE",F,SC)         = 100*(W.l(F)/PINDEX - 1);
REPORT("SHOVEN","OUTPUT",S,SC)        = 100*(AL.l(S) - 1);
);

Parameter
V(H)    'benchmark valuation of public good'
VSHR(H) 'public goods demand as a fraction of private demand'
GD(G)   'inputs to government demand';

V(H)    = TRN(H);
VSHR(H) = V(H)/sum(G, C(G,H));
GD(G)   = sum(H, VSHR(H)*C(G,H));

* READJUST PRIVATE DEMAND, MOVING PART OF PRIVATE DEMAND
* INTO THE PUBLIC GOODS SECTOR INPUTS:
C(G,H) = (1 - VSHR(H))*C(G,H);

* ------------------------------------------------------------------
* MODEL #3        DIFFERENTIAL TAX POLICY WITH ENDOGENOUS
*                 ADJUSTMENT OF RATES TO MAINTAIN OPTIMAL
*                 PROVISION OF A PURE PUBLIC GOOD.

* SECTION (ii)    MPS/GE MODEL DECLARATION
\$onText
\$MODEL:SAMUELSON

\$SECTORS:
AL(S)  GP

\$COMMODITIES:
P(G)   W(F)  PG  VG(H)

\$CONSUMERS:
RA(H)  GOVT

\$AUXILIARY:
TAU    LGP

\$REPORT:
V:CD(G,H)     D:P(G)     DEMAND:RA(H)
V:DF(F,H)     D:W(F)     DEMAND:RA(H)
V:EMPLOY(S)   I:W("L")   PROD:AL(S)
V:WLF(H)      W:RA(H)

\$PROD:AL(S) s:0 a:ELAS(S)
O:P(G)   Q:A(G,S)
I:P(G)   Q:B(G,S)
I:W(F)   Q:FD(F,S)   P:PF(F,S)  A:GOVT   N:TAU\$TF(F,S)   M:TF(F,S)\$TF(F,S) a:

\$PROD:GP s:0
O:PG     Q:GREV
I:P(G)   Q:GD(G)

\$DEMAND:RA(H) s:1 a:ESUB(H)
D:P(G)   Q:C(G,H)   a:
D:W(F)   Q:D(F,H)
D:VG(H)  Q:V(H)
E:VG(H)  Q:V(H)     R:LGP
E:W(F)   Q:E(F,H)

\$DEMAND:GOVT
D:PG     Q:GREV

\$CONSTRAINT:TAU
GREV*PG =g= sum(H, V(H)*VG(H));

\$CONSTRAINT:LGP
LGP =g= GP;
\$offText
\$sysInclude mpsgeset SAMUELSON

* THE DEFAULT INITIAL VALUE FOR AUXILIARY VARIABLES IS ZERO,
* SO TO REPLICATE THE BENCHMARK WE NEED TO ASSIGN THE LEVEL
* VALUE TO UNITY:
TAU.l = 1;
LGP.l = 1;

* REINSTALL THE BENCHMARK TAX RATE:
TF(F,S) = PF(F,S) - 1;

* VERIFY THAT THE BENCHMARK EQUILIBRIUM IS REPLICATED:
SAMUELSON.iterLim = 0;
\$include SAMUELSON.GEN
solve SAMUELSON using mcp;
abort\$(abs(SAMUELSON.objVal) > 1.E-4) "*** SAMUELSON benchmark does not calibrate.";
SAMUELSON.iterLim = 1000;

loop(SC,
*  INSTALL TAX RATES FOR THIS COUNTERFACTUAL:
TF(F,S) = TAXRATE(F,S,SC);

\$  include SAMUELSON.GEN
solve SAMUELSON using mcp;

PINDEX = sum(G, P.l(G)*THETA(G));

*  REPORT PERCENTAGE CHANGES:
REPORT("SAMUELSON","REVENUE","_",SC)     = 100*(GP.l*PG.L/PINDEX - 1);
REPORT("SAMUELSON","TAXRATE","_",SC)     = 100*TAU.l*smax((F,S), TF(F,S));
REPORT("SAMUELSON","WELFARE","TOTAL",SC) = 100*(sum(H, WBAR(H)*(WLF.l(H) - 1))/sum(H, WBAR(H)));
REPORT("SAMUELSON","WELFARE",H,SC)       = 100*(WLF.l(H) - 1);
REPORT("SAMUELSON","PROVISION","_",SC)   = 100*(GP.l - 1);
REPORT("SAMUELSON","EMPLOY",S,SC)        = 100*(EMPLOY.l(S)/FD("L",S) - 1);
REPORT("SAMUELSON","PRICE",G,SC)         = 100*(P.l(G)/PINDEX - 1);
REPORT("SAMUELSON","PRICE",F,SC)         = 100*(W.l(F)/PINDEX - 1);
REPORT("SAMUELSON","OUTPUT",S,SC)        = 100*(AL.l(S) - 1);
);

* GENERATE A FINAL REPORT:
option  REPORT:1:2:1;
display REPORT;
``````
GAMS Development Corp.
GAMS Software GmbH

General Information and Sales
U.S. (+1) 202 342-0180
Europe: (+49) 221 949-9170