threemge.gms : Three Approaches to Differential Tax Policy Analysis

Description

Three Approaches to Differential Tax Policy Analysis


Reference

  • 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.

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

$Offtext

SETS        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 /;

PARAMETER ELAS(S)  ELASTICITY OF SUBSTITUTION IN PRODUCTION;

ELAS(S) = 1;

PARAMETER ESUB(H)  ELASTICITY OF SUBSTITUTION IN DEMAND;

ESUB(H) = 0.5;

SCALAR  GREV  BENCHMARK GOVERNMENT REVENUE;

GREV     = SUM(H, TRN(H));

PARAMETER TF(F,S)  FACTOR TAX RATE;

TF(F,S) = T(F,S) / FD(F,S);

PARAMETER PF(F,S)  BENCHMARK FACTOR PRICES GROSS OF TAX;

PF(F,S) = 1 + TF(F,S);

PARAMETER  THETA(G)  WEIGHTS IN NUMERAIRE PRICE INDEX;
THETA(G) = SUM(H, C(G,H));
THETA(G) = THETA(G) / SUM(S, THETA(S));

PARAMETER WBAR(H)  BENCHMARK WELFARE INDEX;
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

*       READ THE HEADER FILE:

$SYSINCLUDE mpsgeset HARBERGER

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

HARBERGER.ITERLIM = 0;
$INCLUDE HARBERGER.GEN
SOLVE HARBERGER USING MCP;
ABORT$(ABS(HARBERGER.OBJVAL) GT 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,
        VA      UNIFORM VALUE-ADDED TAX/

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) GT 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;

V(H)  = TRN(H);

VSHR(H) = V(H) / SUM(G, C(G,H));

PARAMETER GD(G) INPUTS TO GOVERNMENT DEMAND;

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) GT 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;