gemmcp.gms : GEMTAP: A general equilibrium model for tax policy

Description

Set definitions and input data for 1983 version of gemtap.


Large Model of Type : MCP


Category : GAMS Model library


Main file : gemmcp.gms

$title The 1983 GEMTAB Model as MCP (GEMMCP,SEQ=137)

$onText
Set definitions and input data for 1983 version of gemtap.


Rutherford, T F, GEMTAP: A General Equilibrium Model for Tax Policy.

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

Set
   s 'sectors (producer goods)'
     / agri,  mines, crude, const, food,  textl, paper
       refin, chem,  lumbr, metls, equip, vehcl, trnsp
       trade, fnanc, realt, srvcs, govt                /
   g 'consumer goods'
     / food,  alchl, tobac, util,  housg, frnsh, appl
       clth,  trnsp, vehcl, servc, bnkng, readg, n_dur
       petrl, hlth,  educ,  savng                      /;

Alias (s,ss);

Set
   hh     'all households'           / h1*h14, hh2*hh14 /
   h(hh)  'aggregated households'    / hh2*hh14         /
   dh(hh) 'disaggregated households' / h1*h14           /;

* the following assignment omits h1 which appears to be
* a residual account in this data set:

Set hmap(dh,h) 'mapping from disaggregated households'
               / h2.hh2, h3.hh3,   h4.hh4,   h5.hh5,   h6.hh6,   h7.hh7,  h8.hh8
                 h9.hh9, h10.hh10, h11.hh11, h12.hh12, h13.hh13, h14.hh14        /;

Scalar
   gdk 'government capital purchases.    (p. 118)' / 1.65084e+05 /
   gsk 'government capital ownership. (table 6.3)' / 1.13409e+05 /
   gdl 'government labor demand.         (p. 107)' / 2.72392e+05 /
   gtl 'labor tax payments by government.(p. 107)' / 4.41080e+04 /;

Parameter
   count(hh) 'population count' / h1    0.347, h2    1.183
                                  h3    3.753, h4    8.457
                                  h5   13.328, h6   13.988
                                  h7   12.876, h8   11.523
                                  h9   18.538, h10  13.362
                                  h11  16.565, h12   4.501
                                  h13   2.725, h14   0.573 /
   dk(s)   'capital payments by sector.     (table 4.7)'
           / agri  1.50670e+04, mines 9.14909e+02, crude 2.99886e+03, const 4.99169e+03
             food  6.71724e+03, textl 2.97874e+03, paper 4.31363e+03, refin 1.39132e+04
             chem  4.78283e+03, lumbr 2.57358e+03, metls 2.78550e+03, equip 1.43345e+03
             vehcl 2.49335e+02, trnsp 3.31062e+04, trade 2.77352e+04, fnanc 2.91767e+03
             realt 1.57818e+05, srvcs 2.90328e+04, govt  1.23209e+04                    /
   sk(hh)  'capital ownership by household. (table 6.2)'
           / h1   -1.15989e+04, h2    1.32289e+02, h3    1.40763e+03, h4    5.82356e+03
             h5    1.51394e+04, h6    2.17343e+04, h7    2.44363e+04, h8    2.57096e+04
             h9    4.68859e+04, h10   4.02364e+04, h11   6.74481e+04, h12   3.33326e+04
             h13   4.47871e+04, h14   6.28510e+04                                       /
   dl(s)   'labor demand by sector.        (table 4.1)'
           / agri  1.92060e+04, mines 1.18360e+04, crude 1.92690e+04, const 1.12095e+05
             food  3.57680e+04, textl 2.79840e+04, paper 4.39730e+04, refin 6.36500e+03
             chem  4.58740e+04, lumbr 2.59050e+04, metls 1.82051e+05, equip 3.12680e+04
             vehcl 2.51430e+04, trnsp 1.46020e+05, trade 3.13381e+05, fnanc 1.02262e+05
             realt 1.68840e+04, srvcs 3.73269e+05, govt  3.07730e+04                    /
   sl(hh)  'labor supply by household.     (table 6.1)'
           / h1   -4.07035e+02, h2    9.72331e+02, h3    4.94308e+03, h4    2.55985e+04
             h5    8.32951e+04, h6    1.27887e+05, h7    1.53337e+05, h8    1.72699e+05
             h9    3.26104e+05, h10   2.86196e+05, h11   3.83643e+05, h12   1.19378e+05
             h13   1.02400e+05, h14   5.56721e+04                                       /
   zta(hh) 'labor endowment: supply ratios by household.'
           / h1    1.26791e+00, h2    1.27168e+00, h3    1.33304e+00, h4    1.40639e+00
             h5    1.48221e+00, h6    1.53994e+00, h7    1.58088e+00, h8    1.61328e+00
             h9    1.64773e+00, h10   1.68873e+00, h11   1.71083e+00, h12   1.69191e+00
             h13   1.63084e+00, h14   1.34709e+00                                       /;

* for increased comparability with 1973 dataset, we use a value
* of 1.75 for all households:
zta(hh) = 1.75;

Scalar els 'elasticity of labor supply' / 0.15 /;

Parameter
   pit(hh) 'income tax payments by household.               (table 6.5)'
           / h1    4.70693e+03, h2   -4.78527e+01, h3   -4.83605e+02, h4   -1.38173e+03
             h5   -8.30128e+02, h6    2.07466e+03, h7    5.51451e+03, h8    9.36992e+03
             h9    2.08846e+04, h10   2.25915e+04, h11   3.28106e+04, h12   1.08714e+04
             h13   1.28299e+04, h14   1.30979e+04                                       /
   tau(hh) 'marginal tax rates by household.                (table 5.8)'
           / h1    7.30000e-02, h2    1.00000e-03, h3    2.00000e-02, h4    6.10000e-02
             h5    1.11000e-01, h6    1.39000e-01, h7    1.65000e-01, h8    1.95000e-01
             h9    2.19000e-01, h10   2.56000e-01, h11   2.93000e-01, h12   3.43000e-01
             h13   3.96000e-01, h14   4.01000e-01                                       /
   trn(hh) 'transfer levels by household (from government). (table 6.5)'
           / h1    4.62898e+02, h2    7.16898e+02, h3    9.99424e+03, h4    2.82718e+04
             h5    4.06371e+04, h6    4.04673e+04, h7    3.55249e+04, h8    2.80239e+04
             h9    4.10061e+04, h10   2.63098e+04, h11   3.01152e+04, h12   7.94427e+03
             h13   4.27825e+03, h14   8.37153e+02                                       /
   tc(g)   'consumption tax payments by good.               (table 5.4)'
           / food  1.02623e+02, alchl 3.43401e+01, tobac 4.92577e+01, util  5.27143e+01
             frnsh 6.82659e+01, appl  5.61957e+01, clth  7.82538e+02, trnsp 1.29003e+00
             vehcl 1.30150e+02, servc 8.53633e+00, readg 1.38249e+02, n_dur 9.66488e+01
             petrl 7.99788e+01, hlth  4.19992e+01                                       /;

$onText
the following three vectors which appear in the 83 dataset are converted
to percentage rate form in table taxrate:

Parameter
   txo(s)
   / agri  5.42000e+02, mines 2.00500e+03, crude 1.61310e+04, const 2.34900e+03
     food  1.12890e+04, textl 1.69000e+02, paper 7.52000e+02, refin 9.20100e+03
     chem  1.45500e+03, lumbr 4.76000e+02, metls 2.48100e+03, equip 5.41000e+02
     vehcl 7.61000e+02, trnsp 2.03530e+04, trade 8.50440e+04, fnanc 8.57600e+03
     realt 1.76200e+04, srvcs 8.45000e+03                                       /
   tk(s)
   / agri  1.01810e+04, mines 1.34009e+03, crude 5.18414e+03, const 4.60731e+03
     food  7.47776e+03, textl 3.00226e+03, paper 5.31437e+03, refin 9.16883e+03
     chem  7.16117e+03, lumbr 3.09542e+03, metls 1.15835e+04, equip 1.10355e+03
     vehcl 1.35867e+03, trnsp 3.50988e+04, trade 2.69098e+04, fnanc 2.22403e+04
     realt 1.09969e+05, srvcs 1.90732e+04, govt  3.35605e+03                    /
   tl(s)
   / agri  2.67400e+03, mines 1.26600e+03, crude 2.18700e+03, const 1.45680e+04
     food  5.23400e+03, textl 4.68000e+03, paper 5.97300e+03, refin 7.68000e+02
     chem  6.86600e+03, lumbr 1.18640e+04, metls 2.51540e+04, equip 3.27600e+03
     vehcl 3.93400e+03, trnsp 1.86950e+04, trade 4.33670e+04, fnanc 1.29190e+04
     realt 2.52100e+03, srvcs 4.43190e+04, govt  1.34930e+04                    /;

Parameter taxrate(s,*) 'taxes (%) (tables 4.13 4.7 and 4.1 respectively)';

code:

taxrate(s,"txo") = 100*txo(s)/y(s);
taxrate(s,"tl")  = 100*tl(s)/dl(s);
taxrate(s,"tk")  = 100*tk(s)/dk(s);

display taxrate;

Table tkval(s,*) 'sectoral capital tax rates in 73 and 83'
                tk73     tk83
   agri      54.0162   67.572
   mines     95.0472  146.472
   crude    101.5675  172.870
   const    210.4031   92.300
   food     346.9550  111.322
   textl    253.4060  100.790
   paper    162.5490  123.199
   refin     46.3458   65.900
   chem     186.6596  149.727
   lumbr     91.2334  120.277
   metls    171.6036  415.850
   equip   2356.8627   76.986
   vehcl    128.7486  544.917
   trnsp    170.1676  106.019
   trade    185.0761   97.024
   fnanc    199.2051  762.262
   realt     62.9748   69.681
   srvcs     86.0299   65.695
   govt      26.3711   27.239;
$offText

Table taxrate(s,*) 'taxes (%) (tables 4.13 4.7 and 4.1 respectively)'
              txo      tl       tk
   agri     0.311  13.923   67.572
   mines    4.529  10.696  146.472
   crude   19.296  11.350  172.870
   const    0.775  12.996   92.300
   food     4.016  14.633  111.322
   textl    0.133  16.724  100.790
   paper    0.454  13.583  123.199
   refin    4.698  12.066   65.900
   chem     0.618  14.967  149.727
   lumbr    0.427  45.798  120.277
   metls    0.337  13.817  415.850
   equip    0.700  10.477   76.986
   vehcl    0.682  15.647  544.917
   trnsp    3.760  12.803  106.019
   trade   12.991  13.838   97.024
   fnanc    3.585  12.633  762.262
   realt    3.650  14.931   69.681
   srvcs    1.080  11.873   65.695
   govt            43.847   27.239;

Parameter gse(s) 'government commodity endowments. (table 6.3)';
gse(s) = 0;

Parameter
   gd(s)    'government commodity demands.               (table 6.4)'
            / agri  5.74182e+02, mines 1.55043e+02, crude 3.63664e+02, const 4.50692e+04
              food  2.67746e+03, textl 8.95648e+02, paper 4.45026e+03, refin 5.48673e+03
              chem  4.57070e+03, lumbr 1.12229e+03, metls 1.78503e+05, equip 1.93211e+04
              vehcl 2.35552e+03, trnsp 1.46367e+04, trade 4.89975e+03, fnanc 3.05061e+03
              realt 3.17531e+03, srvcs 3.04402e+04, govt  6.39613e+02                    /
   vm(s)    'import levels by sectoral commodity.        (table 5.1)'
            / agri  3.84500e+03, mines 3.49000e+03, crude 6.61250e+04, food  1.39690e+04
              textl 1.60500e+04, paper 6.58100e+03, refin 2.23780e+04, chem  1.53900e+04
              lumbr 8.32600e+03, metls 1.01264e+05, equip 5.50100e+03, vehcl 2.90780e+04
              trnsp 5.29900e+03, trade 7.80800e+03, fnanc 7.43000e+02, srvcs 1.74900e+03 /
   vx(s)    'export levels by sectoral commodity.        (table 5.1)'
            / agri  2.14831e+04, mines 5.09111e+03, crude 1.45680e+03, const 3.71680e+01
              food  1.27640e+04, textl 4.89076e+03, paper 4.99139e+03, refin 5.75651e+03
              chem  2.02557e+04, lumbr 5.10924e+03, metls 1.46532e+05, equip 1.51174e+04
              vehcl 1.07298e+04, trnsp 1.52072e+04, trade 2.29182e+04, fnanc 8.49425e+02
              realt 5.32137e+03, srvcs 9.01913e+03, govt  6.61772e+01                    /
   el(hh)   'elasticity between leisure and consumption. (table 6.8)'
            / h1    5.69000e-01, h2   6.74000e-01, h3    7.77000e-01, h4    8.38000e-01
              h5    8.86000e-01, h6   9.48000e-01, h7    9.83000e-01, h8    9.90000e-01
              h9    1.02700e+00, h10  1.00500e+00, h11   9.69000e-01, h12   7.38000e-01
              h13   7.38000e-01, h14  7.38000e-01/
   ec(hh)   'elasticity in current consumption.          (table 6.9)'
            / h1    1.26791e+00, h2   1.27168e+00, h3    1.33304e+00, h4    1.40639e+00
              h5    1.48221e+00, h6   1.53994e+00, h7    1.58088e+00, h8    1.61328e+00
              h9    1.64773e+00, h10  1.68873e+00, h11   1.71083e+00, h12   1.69191e+00
              h13   1.63084e+00, h14  1.34709e+00                                       /
   ekl(s)   'labor-capital elasticity.                   (table 6.11)'
            / agri  1.92123e+00, mines 1.00000e+00, crude 1.00000e+00, const 1.00000e+00
              food  1.68095e+00, textl 1.12108e+00, paper 1.11995e+00, refin 1.38332e+00
              chem  1.04308e+00, lumbr 1.10632e+00, metls 1.55352e+00, equip 1.29132e+00
              vehcl 1.09135e+00, trnsp 1.00000e+00, trade 1.00000e+00, fnanc 1.00000e+00
              realt 1.00000e+00, srvcs 1.00000e+00, govt  1.00000e+00                    /
   ekl73(s) 'labor-capital elasticity.                 (table 6.11)'
            / agri  6.75900e-01, mines 1.00000e+00, crude 1.00000e+00, const 1.00000e+00
              food  7.11700e-01, textl 9.02500e-01, paper 9.03300e-01, refin 7.83000e-01
              chem  9.60300e-01, lumbr 9.12300e-01, metls 7.37300e-01, equip 8.15900e-01
              vehcl 9.22800e-01, trnsp 1.00000e+00, trade 1.00000e+00, fnanc 1.00000e+00
              realt 1.00000e+00, srvcs 1.00000e+00, govt  1.00000e+00                    /
   ekl83(s) 'labor-capital elasticity.                 (table 6.11)'
            / agri  1.92123e+00, mines 1.00000e+00, crude 1.00000e+00, const 1.00000e+00
              food  1.68095e+00, textl 1.12108e+00, paper 1.11995e+00, refin 1.38332e+00
              chem  1.04308e+00, lumbr 1.10632e+00, metls 1.55352e+00, equip 1.29132e+00
              vehcl 1.09135e+00, trnsp 1.00000e+00, trade 1.00000e+00, fnanc 1.00000e+00
              realt 1.00000e+00, srvcs 1.00000e+00, govt  1.00000e+00                    /;

Parameter
   em(s) 'elasticity of import supply'
   ex(s) 'elasticity of export demand';

em(s) = 0.465;
ex(s) = 10;

Parameter y(s) 'gross output level by sector. (table 4.13)'
               / agri  1.74055e+05, mines 4.42744e+04, crude 8.35975e+04, const 3.03029e+05
                 food  2.81073e+05, textl 1.26674e+05, paper 1.65760e+05, refin 1.95844e+05
                 chem  2.35265e+05, lumbr 1.11494e+05, metls 7.35374e+05, equip 7.72401e+04
                 vehcl 1.11519e+05, trnsp 5.41315e+05, trade 6.54613e+05, fnanc 2.39210e+05
                 realt 4.82737e+05, srvcs 7.82546e+05, govt  9.61957e+04                    /;

Table z(s,g) 'consumption composition matrix. (table 4.10)'
                  food        alchl        tobac         util        housg        frnsh
   agri    3.49303e-02  3.49250e-02
   mines   8.89490e-06
   food    4.44127e-01  4.44162e-01  4.96879e-01
   textl                                                                    1.51941e-01
   paper                                                                    1.13370e-03
   refin                                                                    2.57659e-05
   chem    2.13478e-04  1.95293e-04
   lumbr                                                                    2.60854e-01
   metls                                                                    9.58233e-02
   equip                                                                    7.98743e-04
   trnsp   1.80389e-02  1.80321e-02  4.29918e-03  9.67120e-01               1.03579e-02
   trade   2.34928e-01  2.34938e-01  4.98822e-01                            4.79065e-01
   fnanc   8.89490e-06
   realt                                                       9.63414e-01
   srvcs   2.67745e-01  2.67747e-01               4.22719e-03  3.65864e-02
   govt                                           2.86527e-02

   +              appl         clth        trnsp        vehcl        servc        bnkng
   textl   1.96668e-04  4.22525e-01               2.43355e-04
   paper                9.72015e-03
   chem    2.17739e-02  9.63838e-03               4.00725e-02
   lumbr   3.21973e-02                            4.23618e-04  2.15520e-03
   metls   5.17911e-01  5.98949e-02               1.54125e-02  2.28764e-04
   equip                                          2.40200e-02
   vehcl                                          4.15732e-01
   trnsp   8.28815e-03  3.03563e-03  9.43310e-01  1.55927e-02  4.17193e-02
   trade   4.18734e-01  4.71361e-01               2.05121e-01  1.32442e-03
   fnanc                                                       1.65312e-02  1.00000e+00
   realt                                                       6.51376e-03
   srvcs   8.99053e-04  2.38251e-02               2.83382e-01  8.99115e-01
   govt                              5.66898e-02               3.24123e-02

   +             readg        n_dur        petrl         hlth         educ        savng
   agri    4.41326e-02  6.14907e-04                                        -3.63988e-02
   mines                6.47270e-04  3.66763e-03                            2.50821e-03
   crude                                                                    9.10418e-04
   const                                                                    4.91561e-01
   food                                                                    -7.32829e-04
   textl   8.28619e-03  2.39490e-03                                         2.14316e-03
   paper   1.66921e-01  1.60038e-01               5.69271e-03              -4.07667e-04
   refin                             6.58331e-01  1.93630e-05              -1.18903e-03
   chem    4.02524e-03  3.92213e-01  1.70587e-03  5.59009e-02               1.37297e-03
   lumbr                3.46290e-03  1.80823e-03                            1.71430e-02
   metls   1.33159e-01  7.86757e-02  8.52937e-05  1.55000e-02               2.84313e-01
   equip   9.83283e-02                                                      3.99168e-02
   vehcl                                                                    7.10858e-02
   trnsp   1.06977e-01  2.17483e-02  2.67993e-02  1.04560e-03               1.71905e-02
   trade   2.68150e-01  3.40205e-01  3.07603e-01  7.96495e-02               1.19901e-01
   fnanc   5.43951e-05
   realt                                                                    2.95876e-02
   srvcs   1.55407e-01                            8.42192e-01  1.00000e+00  -3.8905e-02
   govt    1.45598e-02                                                                 ;

Table ras(s,s) 'adjusted input-output table.  (tables 4.8 and 4.9)'
                  agri       mines       crude       const        food       textl
   agri    4.77039e+04 1.29167e+01 4.94328e+00 4.14308e+02 8.07202e+04 2.16489e+03
   mines   3.19103e+02 6.05761e+03 1.28523e+01 1.74414e+03 1.58516e+02 6.93484e+01
   crude   2.75040e+02 1.05530e+02 5.46406e+03 1.82005e+02 1.00093e+02 5.49454e+01
   const   2.68590e+03 4.87043e+02 1.08872e+04 2.86600e+02 1.46124e+03 5.88429e+02
   food    1.70603e+04 1.21148e+01 1.67424e+01 3.48826e+01 5.83569e+04 6.66520e+02
   textl   3.42696e+02 1.02025e+02 2.83085e+01 1.67936e+03 1.22183e+02 4.95362e+04
   paper   7.80488e+02 3.25057e+02 2.55315e+02 3.81202e+03 1.11966e+04 1.81391e+03
   refin   9.88521e+03 2.35625e+03 1.24116e+03 6.24300e+03 1.93248e+03 1.25882e+03
   chem    9.77087e+03 1.45763e+03 9.50792e+02 6.56288e+03 5.42140e+03 1.26869e+04
   lumbr   4.56307e+02 4.98159e+02 5.60705e+01 3.76413e+04 4.69320e+03 3.62200e+02
   metls   2.03185e+03 4.63286e+03 3.27433e+03 3.80960e+04 7.48649e+03 1.61303e+03
   equip   5.35927e+02 1.06592e+02 5.83976e+01 5.32920e+02 2.83783e+01 4.00452e+01
   vehcl   1.70121e+02 2.10930e+02 3.52576e+01 3.80755e+02 3.22277e+01 1.79056e+01
   trnsp   6.02777e+03 3.34213e+03 2.53607e+03 9.87724e+03 1.02177e+04 3.74510e+03
   trade   1.34513e+04 3.00750e+03 1.51076e+03 3.21204e+04 2.11882e+04 7.67672e+03
   fnanc   2.55270e+03 6.17634e+02 7.68909e+02 2.51563e+03 1.28108e+03 6.32573e+02
   realt   7.40672e+03 8.34401e+02 7.56553e+03 4.67231e+02 5.58298e+02 4.84227e+02
   srvcs   3.93065e+03 2.15643e+03 2.06860e+03 2.08522e+04 7.80496e+03 3.21905e+03
   govt    7.84913e+02 5.72576e+02 1.07121e+03 8.76811e+02 1.79685e+03 1.22383e+03

   +             paper       refin        chem       lumbr       metls       equip
   agri    4.95558e+01 2.57982e+00 6.13878e+02 4.10659e+03 6.67960e+01 3.48058e+00
   mines   4.80497e+02 2.99266e+02 3.97423e+03 2.06994e+03 1.49215e+04 1.39879e+01
   crude   1.58425e+02 1.05766e+05 3.90772e+03 1.16685e+02 6.21400e+02 2.88911e+01
   const   1.26204e+03 1.38001e+03 2.06264e+03 1.15375e+03 8.36066e+03 3.29064e+02
   food    5.14232e+02 8.75865e+01 2.47313e+03 9.32015e+01 3.70207e+02 1.01664e+01
   textl   1.63620e+03 3.74388e+01 3.27421e+03 1.87451e+03 2.84958e+03 4.06322e+02
   paper   4.63469e+04 1.05641e+03 7.79450e+03 2.06093e+03 1.33010e+04 4.51683e+02
   refin   4.06976e+03 2.00380e+04 1.46170e+04 2.50776e+03 1.02380e+04 5.87484e+02
   chem    7.17832e+03 4.89943e+03 6.65589e+04 3.88466e+03 3.24850e+04 8.95859e+02
   lumbr   4.95827e+03 3.82156e+02 2.35622e+03 2.37056e+04 1.14772e+04 1.31904e+03
   metls   3.45937e+03 9.70241e+02 8.31886e+03 4.95921e+03 2.42505e+05 1.21644e+04
   equip   1.68734e+02 9.82306e+00 7.99628e+01 9.83550e+01 3.14783e+03 1.27697e+04
   vehcl   6.40378e+01 1.51190e+02 8.71123e+01 1.75502e+02 2.81914e+03 4.12245e+02
   trnsp   1.03269e+04 1.16825e+04 1.82501e+04 8.00805e+03 4.25135e+04 2.19451e+03
   trade   1.16057e+04 5.01511e+03 1.57178e+04 7.18179e+03 7.46440e+04 3.26569e+03
   fnanc   1.02228e+03 8.44861e+02 1.48315e+03 8.28850e+02 6.18708e+03 6.20171e+02
   realt   1.11894e+03 2.62709e+02 1.58982e+03 4.76650e+02 5.53245e+03 3.65087e+02
   srvcs   6.83419e+03 2.35907e+03 1.23156e+04 3.00436e+03 2.84889e+04 2.54310e+03
   govt    4.15367e+03 1.17168e+03 3.63197e+03 1.21178e+03 1.07284e+04 1.23522e+03

   +             vehcl       trnsp       trade       fnanc       realt       srvcs
   agri    1.52082e+00 4.91644e+01 8.73337e+02 4.84854e+00 4.31162e+03 2.60626e+03
   mines   4.38196e+01 9.75567e+03 4.67007e+00 5.24419e-01 2.40127e+01 1.13320e+02
   crude   2.61194e+01 2.93924e+04 4.70898e+02 7.15163e+01 1.70123e+02 6.09765e+02
   const   3.25754e+02 2.40091e+04 3.86461e+03 7.62033e+02 7.12670e+04 1.33394e+04
   food    2.69740e+01 1.64303e+02 4.83188e+02 1.47578e+01 9.62752e+00 6.62090e+03
   textl   2.61111e+03 4.85133e+02 3.71442e+02 1.64973e+02 2.33814e+01 4.00854e+03
   paper   6.22244e+02 3.04369e+03 1.11278e+04 6.03662e+03 3.09007e+03 2.12056e+04
   refin   4.10666e+02 4.84692e+04 1.10733e+04 1.18735e+03 1.89838e+03 1.40215e+04
   chem    5.36451e+03 3.25176e+03 1.62399e+03 1.35312e+02 1.27542e+03 1.83553e+04
   lumbr   2.10358e+03 4.08367e+02 9.40659e+02 2.70518e+01 7.10703e+01 2.67436e+03
   metls   2.38947e+04 8.37612e+03 2.37642e+03 7.60264e+02 8.25374e+02 2.00537e+04
   equip   4.30563e+02 6.16430e+03 3.06914e+01 6.41174e+01 1.09553e+01 1.25107e+03
   vehcl   3.01012e+04 9.05646e+02 4.43927e+02 3.53968e+01 4.16257e+01 8.12870e+03
   trnsp   2.25330e+03 9.36376e+04 2.96017e+04 9.49454e+03 9.99490e+03 4.07070e+04
   trade   8.26929e+03 1.55832e+04 1.22973e+04 1.42583e+03 3.51304e+03 2.94769e+04
   fnanc   3.80231e+02 5.55400e+03 7.08814e+03 4.20652e+04 2.05804e+04 8.10357e+03
   realt   1.13128e+02 4.24392e+03 1.37242e+04 3.72805e+03 3.96620e+04 2.46183e+04
   srvcs   2.60763e+03 2.19662e+04 4.69394e+04 1.75710e+04 1.53004e+04 7.48002e+04
   govt    4.79289e+02 1.17297e+04 1.42000e+04 6.69891e+03 5.80996e+03 1.74284e+04;

Table rcs(g,hh) 'adjusted consumption matrix.  (tables 5.2 and 5.3)'
                    h1          h2          h3          h4          h5          h6
   food    2.43154e+03 8.31012e+02 5.20838e+03 1.59696e+04 3.11945e+04 3.68235e+04
   alchl   5.99531e+02 7.09930e+01 4.47408e+02 1.47625e+03 3.10355e+03 3.85386e+03
   tobac   3.00241e+02 3.55527e+01 2.24052e+02 7.39320e+02 1.55420e+03 1.92995e+03
   util    8.09773e+02 2.90719e+02 1.91339e+03 6.31809e+03 1.27338e+04 1.49690e+04
   housg   6.12199e+03 1.58282e+03 9.48922e+03 2.39017e+04 4.04763e+04 4.36047e+04
   frnsh   6.29848e+02 7.45854e+01 4.70031e+02 1.55093e+03 3.26043e+03 4.04867e+03
   appl    5.18472e+02 1.02586e+02 5.15702e+02 1.73699e+03 3.94353e+03 4.88070e+03
   clth    7.22029e+03 1.94843e+02 1.20325e+03 3.92543e+03 8.34312e+03 1.02651e+04
   trnsp   1.10486e+02 4.72766e+01 3.05804e+02 9.45871e+02 1.87616e+03 2.21232e+03
   vehcl   1.20089e+03 2.59688e+02 1.40132e+03 5.15694e+03 1.18923e+04 1.47618e+04
   servc   7.30451e+02 8.64961e+01 5.45119e+02 1.79866e+03 3.78124e+03 4.69536e+03
   bnkng   1.60339e+03 1.89865e+02 1.19656e+03 3.94812e+03 8.30000e+03 1.03067e+04
   readg   1.27226e+03 1.50655e+02 9.49461e+02 3.13278e+03 6.58597e+03 8.17810e+03
   n_dur   8.91740e+02 6.01011e+01 3.35115e+02 1.09765e+03 2.25039e+03 2.69641e+03
   petrl   5.46878e+02 1.12026e+02 7.24765e+02 2.64345e+03 5.97935e+03 7.57259e+03
   hlth    3.59269e+03 3.64276e+02 2.89157e+03 9.48352e+03 1.84661e+04 2.22962e+04
   educ    4.10709e+02 4.86350e+01 3.06502e+02 1.01128e+03 2.12606e+03 2.64005e+03
   savng  -4.6884e+04  -2.8102e+03 -1.2384e+04 -2.7382e+04 -3.3634e+04 -1.7098e+04

   +                h7          h8          h9         h10         h11         h12
   food    3.72263e+04 3.64173e+04 6.22303e+04 4.77327e+04 5.55705e+04 1.43476e+04
   alchl   4.09038e+03 4.27672e+03 7.88731e+03 6.63555e+03 8.87697e+03 3.07807e+03
   tobac   2.04850e+03 2.14176e+03 3.94985e+03 3.32301e+03 4.44547e+03 1.54143e+03
   util    1.49085e+04 1.44047e+04 2.47844e+04 1.92801e+04 2.31262e+04 6.46643e+03
   housg   4.07999e+04 3.67105e+04 5.06882e+04 3.22039e+04 3.40273e+04 9.89624e+03
   frnsh   4.29734e+03 4.49303e+03 8.28624e+03 6.97116e+03 9.32584e+03 3.23370e+03
   appl    5.31140e+03 5.50475e+03 9.62492e+03 7.56886e+03 9.51822e+03 2.77065e+03
   clth    1.07248e+04 1.10415e+04 1.98779e+04 1.64221e+04 2.13323e+04 7.18989e+03
   trnsp   2.24502e+03 2.23530e+03 3.80079e+03 2.91343e+03 3.50719e+03 9.92770e+02
   vehcl   1.65255e+04 1.69002e+04 2.91693e+04 2.27302e+04 2.85742e+04 8.05782e+03
   servc   4.98369e+03 5.21064e+03 9.60965e+03 8.08456e+03 1.08154e+04 3.75019e+03
   bnkng   1.09396e+04 1.14377e+04 2.10939e+04 1.77463e+04 2.37406e+04 8.23194e+03
   readg   8.68036e+03 9.07556e+03 1.67376e+04 1.40813e+04 1.88378e+04 6.53186e+03
   n_dur   2.77299e+03 2.88574e+03 5.33512e+03 4.58741e+03 6.38517e+03 2.59914e+03
   petrl   8.00777e+03 8.11209e+03 1.44354e+04 1.14639e+04 1.36132e+04 3.64777e+03
   hlth    2.30433e+04 2.30927e+04 4.00924e+04 3.17075e+04 3.96004e+04 1.21082e+04
   educ    2.80215e+03 2.92981e+03 5.40313e+03 4.54572e+03 6.08121e+03 2.10860e+03
   savng  -1.49995e+03 1.01676e+04 4.23748e+04 5.79356e+04 1.13118e+05 4.77507e+04

   +               h13         h14
   food    8.11929e+03 5.24818e+02
   alchl   3.30288e+03 1.53387e+03
   tobac   1.65404e+03 7.68143e+02
   util    4.23549e+03 3.88370e+02
   housg   1.15294e+04 2.68036e+04
   frnsh   3.46990e+03 1.61143e+03
   appl    2.03276e+03 2.66599e+02
   clth    7.94568e+03 1.13218e+04
   trnsp   6.56467e+02 7.65529e+01
   vehcl   6.14244e+03 1.59609e+03
   servc   4.02413e+03 1.86881e+03
   bnkng   8.83324e+03 4.10219e+03
   readg   7.00898e+03 3.25500e+03
   n_dur   3.92681e+03 1.30495e+04
   petrl   2.33556e+03 3.01442e+02
   hlth    9.46404e+03 1.86004e+03
   educ    2.26261e+03 1.05077e+03
   savng   4.67953e+04 3.21618e+04;

* convert into units consistent with the 1973 data:
gdk       = 1.e-5*gdk;
gsk       = 1.e-5*gsk;
gdl       = 1.e-5*gdl;
gtl       = 1.e-5*gtl;
dk(s)     = 1.e-5*dk(s);
sk(hh)    = 1.e-5*sk(hh);
dl(s)     = 1.e-5*dl(s);
sl(hh)    = 1.e-5*sl(hh);
pit(hh)   = 1.e-5*pit(hh);
trn(hh)   = 1.e-5*trn(hh);
tc(g)     = 1.e-5*tc(g);
gd(s)     = 1.e-5*gd(s);
vm(s)     = 1.e-5*vm(s);
vx(s)     = 1.e-5*vx(s);
y(s)      = 1.e-5*y(s);
rcs(g,hh) = 1.e-5*rcs(g,hh);
ras(s,ss) = 1.e-5*ras(s,ss);

Parameter
   taubmk(*)  'benchmark marginal tax'
   tauave(*)  'average tax'
   cc(h)      'current consumption value (market + leisure)'
   leisure(h) 'leisure demand in benchmark'
   gc         'government consumption'
   cp(h)      'value of private consumption'
   eg(h)      'elasticity of substitution - private vs public'
   govsav     'exogenous (government) savings'
   cg(h)      'consumption plus public goods valuation'
   vpg(h)     'benchmark valuation of public goods';

Set hfix(dh)  'households omitted from the aggregation';

Alias (hp,h);

* identify households from the disaggregated data set which are not assigned:
hfix(dh) = yes$(sum(h$hmap(dh,h), 1) = 0);

Parameter
   txo(s)     'production output taxes (total value)'
   tk(s)      'capital taxes           (total value)'
   tl(s)      'labor taxes             (total value)'
   plref(s)   'labor reference price'
   pkref(s)   'capital reference price'
   incadj(hh) 'income adjustment transfer';

incadj(hh) = 0;
txo(s)     = 0.01*taxrate(s,"txo")*y(s);
tk(s)      = 0.01*taxrate(s,"tk")*dk(s);
tl(s)      = 0.01*taxrate(s,"tl")*dl(s);
plref(s)   = 1 + 0.01*taxrate(s,"tl");
pkref(s)   = 1 + 0.01*taxrate(s,"tk");

Parameter gce(g) 'gross consumption expenditure by good. (table 6.6)';

Set
   excs / y, inter, netexp, findem, check /
   hcol / expend, inc_tax, labor, capital, transf, check /
   prft / y, va, tax, inter, check /
   gcol / endowment, l_tax,  k_tax,  prod_tax, con_tax, inc_tax
          revenue,   transf, expend, outlay,   deficit          /
   vcol / labor,  capital, inter,   total /
   tcol / output, labor,   capital, total /
   govt(s) 'government sectors' / govt /
   ccg(g)  'current consumption goods';

ccg(g)       = yes;
ccg("savng") =  no;

* check consistency of the disaggregated data.
Parameter
   cd(s)           'consumer demand'
   fd(s)           'final demand'
   va(s)           'value-added'
   labmkt          'labor market clearance'
   capmkt          'capital market clearance'
   pmchk(s,*)      'profit and market clearance check'
   budget(hh,*)    'budget balance'
   gbdgt(*)        'government budget balance'
   zchk            'check of consumer goods transformation matrix'
   zsum(g)         'transformation check sum'
   expend(hh)      'benchmark consumption expenditure'
   saving(hh)      'benchmark savings'
   profit(s,*)     'benchmark profit check'
   excess(*,*)     'excess demand check'
   bdgtbal(hh,*)   'budget balance calculation'
   pctprofit(s,*)  'benchmark profit check                            (percent)'
   pctva(*,*)      'value-added allocation'
   pctexcess(s,*)  'excess demand check                               (percent)'
   pctbudget(hh,*) 'budget balance calculation                        (percent)'
   pctrcs(g,hh)    'consumption as percentage of expenditure'
   pctras(ss,s)    'intermediate input as percentage of output value'
   government(*,*) 'government budget summary                         (percent)'
   valueadded(s,*) 'value-added summary'
   taxpayment(s,*) 'tax payment summary';

* perform some quick data checks:
zsum(g) = sum(s, z(s,g));
zchk    = sum(g, abs(zsum(g)) - 1);
abort$(abs(zchk) > 1.e-5) " z matrix error: ", zsum;

gce(g) = sum(dh, rcs(g,dh));
cd(s)  = sum(g, z(s,g)*(gce(g) - tc(g)));
fd(s)  = gd(s) + cd(s) + vx(s) - gse(s) - vm(s);
va(s)  = dl(s) + dk(s) + tl(s) + tk(s);
labmkt = sum(s, dl(s)) + gdl - sum(dh, sl(dh));
capmkt = sum(s, dk(s)) + gdk - sum(dh, sk(dh)) - gsk;

pmchk(s,"profit")  = y(s) - sum(ss,ras(ss,s)) - (dl(s) + dk(s) + tl(s) + tk(s) + txo(s));
pmchk(s,"profit%") = 100*pmchk(s,"profit")/y(s);
pmchk(s,"excess")  = fd(s) + sum(ss,ras(s,ss)) - y(s);
pmchk(s,"excess%") = 100*(fd(s) + sum(ss,ras(s,ss)) - y(s))/y(s);

* include some other statistics for a complete report:
Set
   gexpend / trnsfr, adj, gc, sav /
   grevenu / gse, gsk, pit, tl, tk, txo, tc, hfix /;

gbdgt("trnsfr")  = sum(dh, trn(dh));
gbdgt("adj")     = sum(dh, incadj(dh));
gbdgt("gc")      = sum(s, gd(s)) + gdk + gdl + gtl;
gbdgt("gse")     = sum(s,gse(s));
gbdgt("gsk")     = gsk;
gbdgt("pit")     = sum(dh, pit(dh));
gbdgt("tl")      = sum(s, tl(s)) + gtl;
gbdgt("tk")      = sum(s, tk(s));
gbdgt("txo")     = sum(s, txo(s));
gbdgt("tc")      = sum(g, tc(g));
gbdgt("revenue") = sum(grevenu, gbdgt(grevenu));
gbdgt("outlay")  = sum(gexpend, gbdgt(gexpend));
gbdgt("deficit") = gbdgt("outlay") - gbdgt("revenue");

expend(dh) = sum(ccg, rcs(ccg,dh));
saving(dh) = rcs("savng",dh);

bdgtbal(dh,"expend")  = expend(dh);
bdgtbal(dh,"saving")  = saving(dh);
bdgtbal(dh,"inc_tax") = pit(dh);
bdgtbal(dh,"labor")   = sl(dh);
bdgtbal(dh,"capital") = sk(dh);
bdgtbal(dh,"transf")  = trn(dh);
bdgtbal(dh,"check")   = expend(dh) + saving(dh) - (sl(dh) + sk(dh) + trn(dh) - pit(dh));

pctbudget(dh,"expend")  = 100;
pctbudget(dh,"saving")  = 100*bdgtbal(dh,"saving")/expend(dh);
pctbudget(dh,"inc_tax") = 100*bdgtbal(dh,"inc_tax")/expend(dh);
pctbudget(dh,"labor")   = 100*bdgtbal(dh,"labor")/expend(dh);
pctbudget(dh,"capital") = 100*bdgtbal(dh,"capital")/expend(dh);
pctbudget(dh,"transf")  = 100*bdgtbal(dh,"transf")/expend(dh);
pctbudget(dh,"check")   = 100*bdgtbal(dh,"check")/expend(dh);

display zchk, labmkt, capmkt, pmchk, gbdgt, pctbudget, bdgtbal;

* make adjustments to balance budgets:
* first, remove any negative income taxes:
pit(dh)    = max(0, pit(dh));
incadj(dh) = sum(g, rcs(g,dh)) - (sl(dh) + sk(dh) + trn(dh) - pit(dh));

* make adjustments to balance profits:
y(s) = y(s) - pmchk(s,"profit");

* adjustments to balance sectoral markets:
gse(s) = gse(s) + fd(s) + sum(ss,ras(s,ss)) - y(s);

* recheck the central variables:
fd(s) = gd(s) + cd(s) + vx(s) - gse(s) - vm(s);

pmchk(s,"profit")  = y(s) - sum(ss,ras(ss,s)) - (dl(s) + dk(s) + tl(s) + tk(s) + txo(s));
pmchk(s,"profit%") = 100*pmchk(s,"profit")/y(s);

budget(dh,"value")   = sum(g, rcs(g,dh)) - (sl(dh) + sk(dh) + trn(dh) - pit(dh));
budget(dh,"percent") = 100*budget(dh,"value")/sum(g, rcs(g,dh));
pmchk(s,"excess")    = fd(s) + sum(ss,ras(s,ss)) - y(s);
pmchk(s,"excess%")   = 100*(fd(s) + sum(ss,ras(s,ss)) - y(s))/y(s);

* recalculate the government budget statistics:
gbdgt("trnsfr")   = sum(dh, trn(dh));
gbdgt("adj")      = sum(dh, incadj(dh));
gbdgt("gc")       = sum(s, gd(s)) + gdk + gdl + gtl;
gbdgt("gse")      = sum(s,gse(s));
gbdgt("gsk")      = gsk;
gbdgt("pit")      = sum(dh, pit(dh));
gbdgt("tl")       = sum(s, tl(s)) + gtl;
gbdgt("tk")       = sum(s, tk(s));
gbdgt("txo")      = sum(s, txo(s));
gbdgt("tc")       = sum(g, tc(g));
gbdgt("revenue")  = sum(grevenu, gbdgt(grevenu));
gbdgt("outlay")   = sum(gexpend, gbdgt(gexpend));
gbdgt("deficit")  = gbdgt("outlay") - gbdgt("revenue");

display pmchk, gbdgt;

expend(dh) = sum(ccg, rcs(ccg,dh));
saving(dh) = rcs("savng",dh);

profit(s,"y")     = y(s);
profit(s,"va")    = dl(s) + dk(s);
profit(s,"tax")   = tl(s) + tk(s) + txo(s);
profit(s,"inter") = sum(ss,ras(ss,s));
profit(s,"check") = y(s) - sum(ss,ras(ss,s)) - (dl(s) + dk(s) + tl(s) + tk(s) + txo(s));

pctprofit(s,"y")     = 100;
pctprofit(s,"va")    = 100*profit(s,"va")/profit(s,"y");
pctprofit(s,"tax")   = 100*profit(s,"tax")/profit(s,"y");
pctprofit(s,"inter") = 100*profit(s,"inter")/profit(s,"y");
pctprofit(s,"check") = 100*profit(s,"check")/profit(s,"y");

pctva(s,"k")        = 100*dk(s)/va(s);
pctva(s,"l")        = 100*dl(s)/va(s);
pctva(s,"tl")       = 100*tl(s)/va(s);
pctva(s,"tk")       = 100*tk(s)/va(s);
pctva("total","k")  = 100*sum(s, dk(s))/sum(s, va(s));
pctva("total","l")  = 100*sum(s, dl(s))/sum(s,va(s));
pctva("total","tl") = 100*sum(s, tl(s))/sum(s,va(s));
pctva("total","tk") = 100*sum(s, tk(s))/sum(s,va(s));

excess(s,"y")            = y(s);
excess(s,"inter")        = sum(ss,ras(s,ss));
excess(s,"netexp")       = vx(s) - vm(s);
excess("total","netexp") = sum(s, vx(s) - vm(s));
excess(s,"findem")       = gd(s) + cd(s) - gse(s);
excess(s,"check")        = fd(s) + sum(ss,ras(s,ss)) - y(s);

pctexcess(s,"y")      = 100;
pctexcess(s,"inter")  = 100*excess(s,"inter")/excess(s,"y");
pctexcess(s,"netexp") = 100*excess(s,"netexp")/excess(s,"y");
pctexcess(s,"findem") = 100*excess(s,"findem")/excess(s,"y");
pctexcess(s,"check")  = 100*excess(s,"check")/excess(s,"y");

bdgtbal(dh,"expend")  = expend(dh);
bdgtbal(dh,"saving")  = saving(dh);
bdgtbal(dh,"inc_tax") = pit(dh);
bdgtbal(dh,"labor")   = sl(dh);
bdgtbal(dh,"capital") = sk(dh);
bdgtbal(dh,"transf")  = trn(dh);
bdgtbal(dh,"check")   = expend(dh) + saving(dh) - (sl(dh) + sk(dh) + trn(dh) - pit(dh));

pctbudget(dh,"expend")  = 100;
pctbudget(dh,"saving")  = 100*bdgtbal(dh,"saving")/bdgtbal(dh,"expend");
pctbudget(dh,"inc_tax") = 100*bdgtbal(dh,"inc_tax")/bdgtbal(dh,"expend");
pctbudget(dh,"labor")   = 100*bdgtbal(dh,"labor")/bdgtbal(dh,"expend");
pctbudget(dh,"capital") = 100*bdgtbal(dh,"capital")/bdgtbal(dh,"expend");
pctbudget(dh,"transf")  = 100*bdgtbal(dh,"transf")/bdgtbal(dh,"expend");
pctbudget(dh,"check")   = 100*bdgtbal(dh,"check")/bdgtbal(dh,"expend");

government("endowment","level") = gsk + sum(s, gse(s));
government("l_tax","level")     = sum(s, tl(s));
government("k_tax","level")     = sum(s, tk(s));
government("prod_tax","level")  = sum(s, txo(s));
government("con_tax","level")   = sum(g, tc(g));
government("inc_tax","level")   = sum(dh, pit(dh));
government("revenue","level")   = gsk + sum(s, gse(s))
                                      + sum(s, tl(s)  + tk(s) + txo(s))
                                      + sum(g, tc(g)) + sum(dh, pit(dh));
government("transf","level")    = sum(dh, trn(dh));
government("incadj","level")    = sum(dh, incadj(dh));
government("expend","level")    = sum(s, gd(s)) + gdl + gdk + gtl;
government("outlay","level")    = sum(dh, trn(dh)) +  sum(s, gd(s)) + gdl + gdk + gtl;
government("deficit","level")   = government("outlay","level") - government("revenue","level");

government("endowment","percent") = 100*government("endowment","level")/government("revenue","level");
government("l_tax","percent")     = 100*government("l_tax","level")/government("revenue","level");
government("k_tax","percent")     = 100*government("k_tax","level")/government("revenue","level");
government("prod_tax","percent")  = 100*government("prod_tax","level")/government("revenue","level");
government("con_tax","percent")   = 100*government("con_tax","level")/government("revenue","level");
government("inc_tax","percent")   = 100*government("inc_tax","level")/government("revenue","level");
government("revenue","percent")   = 100;
government("transf","percent")    = 100*government("transf","level")/government("revenue","level");
government("incadj","percent")    = 100*government("incadj","level")/government("revenue","level");
government("expend","percent")    = 100*government("expend","level")/government("revenue","level");
government("outlay","percent")    = 100*government("outlay","level")/government("revenue","level");
government("deficit","percent")   = 100*government("deficit","level")/government("revenue","level");

pctrcs(g,dh) = 100*rcs(g,dh)/expend(dh);
pctras(ss,s) = 100*ras(ss,s)/y(s);

valueadded(s,"labor")   = dl(s);
valueadded(s,"capital") = dk(s);
valueadded(s,"inter")   = sum(ss, ras(ss,s));
valueadded(s,"total")   = dl(s) + dk(s) + sum(ss, ras(ss,s));

taxpayment(s,"output")  = txo(s);
taxpayment(s,"labor")   = tl(s);
taxpayment(s,"capital") = tk(s);
taxpayment(s,"total")   = txo(s) + tl(s) + tk(s);

display profit, excess, bdgtbal, pctprofit, pctva, pctexcess, pctbudget, government, taxpayment;
option pctrcs:1, pctras:1;
* display valueadded, pctrcs, pctras;
* display tax rates before aggregation:

tauave(dh) = pit(dh)/(sl(dh) + sk(dh));
display tau, tauave;
tauave(dh) = 0;

* check the aggregation.
abort$(smax(dh, sum(h$hmap(dh,h), 1) - 1) > 0) "invalid mapping.";

* perform the aggregation
Parameter popshr(h) 'share of population';

count(h)  = sum(dh$hmap(dh,h), count(dh));
popshr(h) = count(h)/sum(hp, count(hp));
sk(h)     = sum(dh$hmap(dh,h), sk(dh));
sl(h)     = sum(dh$hmap(dh,h), sl(dh));
pit(h)    = sum(dh$hmap(dh,h), pit(dh));
incadj(h) = sum(dh$hmap(dh,h), incadj(dh));
trn(h)    = sum(dh$hmap(dh,h), trn(dh));
tau(h)$pit(h) = sum(dh$hmap(dh,h), pit(dh)*tau(dh))/pit(h);
rcs(g,h)  = sum(dh$hmap(dh,h), rcs(g,dh));
zta(h)    = sum(dh$hmap(dh,h), sl(dh)*zta(dh))/sum(dh$hmap(dh,h), sl(dh));

* fix elasticities:
el(h) = sum(dh$hmap(dh,h), el(dh)*sl(dh))/sum(dh$hmap(dh,h), sl(dh));
ec(h) = 1.5;

taubmk(h)  = tau(h);
tauave(h)  = pit(h)/(sl(h) + sk(h));
leisure(h) = sl(h)*(zta(h) - 1);
cc(h)      = sum(g$ccg(g), rcs(g,h)) + leisure(h);
gc         = sum(s, gd(s)) + gdk + gdl + gtl;

* set savings levels to zero for households with negative savings
* and make according income adjustment:
saving(h) = sum(g$(not ccg(g)), rcs(g,h));
expend(h) = sum(ccg, rcs(ccg,h));
govsav    = sum(h$(saving(h) < 0), saving(h));
incadj(h)$(saving(h) < 0) = incadj(h) - saving(h);
loop(g$(not ccg(g)), rcs(g,h)$(saving(h) < 0) = 0;);

saving(h) = sum(g$(not ccg(g)), rcs(g,h));
display govsav, saving;

bdgtbal(dh,"expend")    = 0;
bdgtbal(dh,"saving")    = 0;
bdgtbal(dh,"inc_tax")   = 0;
bdgtbal(dh,"labor")     = 0;
bdgtbal(dh,"capital")   = 0;
bdgtbal(dh,"transf")    = 0;
bdgtbal(dh,"check")     = 0;
pctbudget(dh,"expend")  = 0;
pctbudget(dh,"saving")  = 0;
pctbudget(dh,"inc_tax") = 0;
pctbudget(dh,"labor")   = 0;
pctbudget(dh,"capital") = 0;
pctbudget(dh,"transf")  = 0;
pctbudget(dh,"check")   = 0;

bdgtbal(h,"expend")  = expend(h);
bdgtbal(h,"saving")  = saving(h);
bdgtbal(h,"inc_tax") = pit(h);
bdgtbal(h,"labor")   = sl(h);
bdgtbal(h,"capital") = sk(h);
bdgtbal(h,"incadj")  = incadj(h);
bdgtbal(h,"transf")  = trn(h);
bdgtbal(h,"check")   = expend(h) + saving(h) - (sl(h) + sk(h) + trn(h) + incadj(h) - pit(h));

pctbudget(h,"expend")  = 100;
pctbudget(h,"saving")  = 100*bdgtbal(h,"saving")/bdgtbal(h,"expend");
pctbudget(h,"inc_tax") = 100*bdgtbal(h,"inc_tax")/bdgtbal(h,"expend");
pctbudget(h,"labor")   = 100*bdgtbal(h,"labor")/bdgtbal(h,"expend");
pctbudget(h,"capital") = 100*bdgtbal(h,"capital")/bdgtbal(h,"expend");
pctbudget(h,"transf")  = 100*bdgtbal(h,"transf")/bdgtbal(h,"expend");
pctbudget(h,"incadj")  = 100*bdgtbal(h,"incadj")/bdgtbal(h,"expend");
pctbudget(h,"check")   = 100*bdgtbal(h,"check")/bdgtbal(h,"expend");

display popshr, bdgtbal, pctbudget;

Parameter share(h,*);

share(h,"l/k")    = sl(h)/sk(h);
share(h,"saving") = 100*saving(h)/sum(hp, saving(hp));
share(h,"sl")     = 100*sl(h)/sum(hp, sl(hp));
share(h,"sk")     = 100*sk(h)/sum(hp, sk(hp));
share(h,"tr")     = 100*trn(h)/sum(hp, trn(hp));
share(h,"pit")    = 100*pit(h)/sum(hp, pit(hp));
share(h,"expend") = 100*expend(h)/sum(hp, expend(hp));
display share;

government("endowment","level") = gsk + sum(s, gse(s));
government("l_tax","level")     = sum(s, tl(s)) + gtl;
government("k_tax","level")     = sum(s, tk(s));
government("prod_tax","level")  = sum(s, txo(s));
government("con_tax","level")   = sum(g, tc(g));
government("inc_tax","level")   = sum(h, pit(h));
government("trd_bal","level")   = sum(s, vm(s) - vx(s));
government("revenue","level")   = gsk + sum(s, gse(s))
                                      + sum(s, tl(s) + tk(s) + txo(s)) + gtl
                                      + sum(s, vm(s) - vx(s))
                                      + sum(g, tc(g)) + sum(h, pit(h));

government("transf","level") = sum(h, trn(h));
government("incadj","level") = sum(h, incadj(h));
government("hfix","level")   = sum(hfix, sum(g, rcs(g,hfix)) - sl(hfix) - sk(hfix));
government("expend","level") = sum(s, gd(s)) + gdl + gdk + gtl;
government("outlay","level") = sum(h, trn(h) + incadj(h)) + government("hfix","level")
                             + sum(s, gd(s)) + gdl + gdk + gtl;

government("deficit","level")     = government("outlay", "level") - government("revenue","level");
government("endowment","percent") = 100*government("endowment","level")/government("revenue","level");
government("l_tax","percent")     = 100*government("l_tax","level")/government("revenue","level");
government("k_tax","percent")     = 100*government("k_tax","level")/government("revenue","level");
government("prod_tax","percent")  = 100*government("prod_tax","level")/government("revenue","level");
government("con_tax","percent")   = 100*government("con_tax","level")/government("revenue","level");
government("inc_tax","percent")   = 100*government("inc_tax","level")/government("revenue","level");
government("revenue","percent")   = 100;
government("transf","percent")    = 100*government("transf","level")/government("revenue","level");
government("incadj","percent")    = 100*government("incadj","level")/government("revenue","level");
government("hfix","percent")      = 100*government("hfix","level")/government("revenue","level");
government("expend","percent")    = 100*government("expend","level")/government("revenue","level");
government("outlay","percent")    = 100*government("outlay","level")/government("revenue","level");
government("deficit","percent")   = 100*government("deficit","level")/government("revenue","level");

display government;

* recalculate the government budget statistics:
gbdgt("trnsfr")  = sum(h, trn(h));
gbdgt("adj")     = sum(h, incadj(h));
gbdgt("gc")      = sum(s, gd(s)) + gdk + gdl + gtl;
gbdgt("sav")     = govsav;
gbdgt("hfix")    = sum(hfix, sl(hfix)+sk(hfix) - sum(g, rcs(g,hfix)));
gbdgt("gse")     = sum(s,gse(s));
gbdgt("gsk")     = gsk;
gbdgt("pit")     = sum(h, pit(h));
gbdgt("tl")      = sum(s, tl(s)) + gtl;
gbdgt("tk")      = sum(s, tk(s));
gbdgt("txo")     = sum(s, txo(s));
gbdgt("tc")      = sum(g, tc(g));
gbdgt("revenue") = sum(grevenu, gbdgt(grevenu));
gbdgt("outlay")  = sum(gexpend, gbdgt(gexpend));
gbdgt("deficit") = gbdgt("outlay") - gbdgt("revenue");

display gbdgt;

Parameter
   tikave 'average capital-income tax rate'
   tiave  'average income tax rate'
   tlave  'average labor tax rate'
   tkave  'average capital tax rate'
   gbench 'benchmark provision';

tlave  =  sum(s, tl(s))/sum(s, dl(s) + tl(s));
tiave  =  sum(h, pit(h))/sum(h, sl(h) + sk(h));
tkave  =  sum(s, tk(s))/sum(s, dk(s) + tk(s));
tikave = (sum(h, pit(h))  + sum(s, tk(s)))/(sum(h, pit(h) + sl(h) + sk(h)) + sum(s, dk(s) + tk(s)));
gbench = (gdl + gtl + gdk + sum(s, gd(s)))/ sum((g,h), rcs(g,h));

display tiave, tlave, tikave, tkave, gbench, tauave, taubmk;

Scalar
   static 'switch for fixed capital stock'              / 1    /
   redist 'switch for endogenous income redistribution' / 1    /
   efks   'elasticity of foreign capital supply'        / 0.25 /
   vscale 'scale factor on valuation of public good'    / 1    /;

Alias (hp,h);

option limRow = 0, limCol = 0;

$offSymList offSymXRef offUElList offUElXRef

Parameter
   qref_ls(h)  'reference level of labor supply - net of tax'
   qref_z(s,g) 'reference level of consumer goods formation net tax'
   qref_va(s)  'refreence level of value-added'
   qref_i(h)   'reference level of household income-expenditure'
   qref_gc     'reference level of government consumption'
   qref_trn    'reference level of transfers'
   qref_adj    'reference level of income adjustments'
   qref_ginc   'reference level of government income'
   pref_ls(h)  'reference price of leisure'
   pref_l(s)   'reference price of labor'
   pref_k(s)   'reference price of capital services'
   t_l(s)      'labor tax'
   t_k(s)      'capital tax'
   t_y(s)      'output tax'
   t_i(h)      'income tax (marginal rate)'
   t_iave(h)   'income tax (average rate)'
   t_c(g)      'tax rates on consumption'
   t_gdl       'tax rate on government labor demand'
   theta(h)    'weights applied in synthetic objective';

qref_ls(h)  = sl(h)*(1 - taubmk(h));
pref_ls(h)  = 1 + taubmk(h)/(1 - taubmk(h));
t_i(h)      = taubmk(h)/(1 - taubmk(h));
t_iave(h)   = pit(h)/(sl(h) + sk(h));
qref_z(s,g) = z(s,g)*(gce(g) - tc(g));
t_c(g)      = tc(g)/gce(g);
qref_va(s)  = dl(s) + tl(s) + dk(s) + tk(s);
pref_l(s)   = 1 + tl(s)/dl(s);
t_l(s)      = tl(s)/dl(s);
pref_k(s)   = 1 + tk(s)/dk(s);
t_k(s)      = tk(s)/dk(s);
t_y(s)      = txo(s)/y(s);
qref_gc     = gdl + gtl + gdk + sum(s, gd(s));
vpg(h)      = vscale*qref_gc*sum(ccg, rcs(ccg,h))/sum((ccg,hp), rcs(ccg,hp));
cp(h)       = sum(g$ccg(g), rcs(g,h));
cg(h)       = cp(h) + vpg(h);
qref_i(h)   = cg(h) + leisure(h);
t_gdl       = gtl/gdl;
qref_trn    = sum(h, trn(h));
qref_adj    = sum(h, incadj(h));
qref_ginc   = qref_trn + qref_adj + qref_gc;

* calibrate the top level elasticity of leisure vs. consumption:
el(h)     = (leisure(h)/(qref_i(h) - leisure(h)) + 0.15/(zta(h) - 1))/(1 - qref_ls(h)/(qref_i(h) - leisure(h)));
el(dh)    = 0;
eg(h)     = 0.5;
vpg(h)    = qref_gc*popshr(h);
cg(h)     = sum(ccg, rcs(ccg,h)) + vpg(h);
qref_i(h) = cg(h) + leisure(h);
el(h)     = (els/(zta(h) - 1) + qref_ls(h)/qref_i(h))/(1 - leisure(h)/qref_i(h));
display el;

Alias (hp,h);

option solPrint = off, limRow=0, limCol=0;
$offSymList offSymXRef offUElList offUElXRef

* gemtap model in mcp format.
Variable
   p_l      'wage index'
   p_k      'capital return index'
   p_ls(h)  'leisure price'
   p_c(g)   'consumption goods price'
   p_cc(h)  'current consumption price'
   p_w(h)   'welfare price index'
   p_gc     'government consumption price'
   p_cp(h)  'private consumption price'
   p_g(h)   'household valuation of public good'
   p_y(s)   'sectoral goods price'
   p_va(s)  'value-added price index'
   p_trn    'transfer price index'
   p_fx     'the real exchange rate'
   a_gc     'government consumption'
   a_invest 'investment-capital stock'
   a_y(s)   'production index'
   a_va(s)  'value added index'
   a_w(h)   'welfare index'
   a_cc(h)  'current consumption'
   a_cp(h)  'private consumption aggregate'
   a_c(g)   'aggregate consumption index'
   a_ls(h)  'labor supply'
   i_gov    'governemtn income'
   i_h(h)   'household income (total)'
   i_e(h)   'endowment income'
   tau_l    'labor tax instrument'
   tau_k    'capital and income tax instrument'
   tau_pl   'instrument for compute labour supply elasticity'
   a_km     'net capital inflow';

Equation
   mkt_l      'labor market - endogenous taxes'
   mkt_k      'capital market - endogenous taxes'
   mkt_ls(h)  'leisure - labor market'
   mkt_c(g)   'consumption good market'
   mkt_cc(h)  'current consumption market'
   mkt_w(h)   'supply-demand for welfare'
   mkt_gc     'government consumption'
   mkt_cp(h)  'private consumption aggregate'
   mkt_g(h)   'household valuation of public good'
   mkt_va(s)  'value-added supply-demand'
   mkt_y(s)   'sectoral output markets'
   mkt_trn    'transfer balance'
   mkt_fx     'foreign exchange market'
   prf_gc     'government consumption (leontief)'
   prf_invest 'zero profit for investment'
   prf_y(s)   'sectoral cost function (leontief)'
   prf_va(s)  'value-added cost function (ces) - endogenous taxes'
   prf_w(h)   'welfare index (ces)'
   prf_cc(h)  'current consumption (ces)'
   prf_cp(h)  'zero profit condition for private consumption'
   prf_c(g)   'consumption good formation (leontief)'
   prf_ls(h)  'labor supply (leontief)'
   kmdef      'capital import definition'
   totinc(h)  'household income definition - total'
   income(h)  'household endowment income'
   govinc     'government income';

* labor supply condition:
prf_ls(h)..   p_ls(h)*(1 + t_i(h))/pref_ls(h)   =e= p_l + tau_pl*p_trn;

prf_c(g)..    sum(s$z(s,g), p_y(s)*qref_z(s,g)) =e= p_c(g)*gce(g)*(1 - t_c(g));

prf_cp(h)..  (sum(g$ccg(g), rcs(g,h)*p_c(g)**(1 - ec(h))) - cp(h)*p_cp(h)**(1 - ec(h)))$(ec(h) <> 1)
           + (sum(g$ccg(g), rcs(g,h)*log(p_c(g))) - cp(h)*log(p_cp(h)))$(ec(h) = 1)
          =e= 0;

prf_cc(h)..  ((vpg(h)*p_g(h)**(1 - eg(h)))$vpg(h) + cp(h)*p_cp(h)**(1 - eg(h)) - cg(h)*p_cc(h)**(1 - eg(h)))$(eg(h) <> 1)
           + ((vpg(h)*log(p_g(h)))$vpg(h) + cp(h)*log(p_cp(h)) - cg(h)*log(p_cc(h)))$(eg(h) = 1)
          =e= 0;

prf_w(h)..   (cg(h)*p_cc(h)**(1 - el(h)) + leisure(h)*p_ls(h)**(1 - el(h)) - qref_i(h)*p_w(h)**(1 - el(h)))$(el(h) <> 1)
           + (cg(h)*log(p_cc(h)) + leisure(h)*log(p_ls(h)) - qref_i(h)*log(p_w(h)))$(el(h) = 1)
          =e= 0;

prf_gc..      p_l*(1 + t_gdl)*gdl + p_k*gdk + sum(s$gd(s), p_y(s)*gd(s)) =e= p_gc*qref_gc;

prf_va(s)..  (  (p_l*(1 + tau_l*t_l(s))/pref_l(s))**(1 - ekl(s))*dl(s)*pref_l(s)
              + (p_k*(1 + tau_k*t_k(s))/pref_k(s))**(1 - ekl(s))*dk(s)*pref_k(s)
              -  p_va(s)**(1-ekl(s))*qref_va(s))$(ekl(s) <> 1)
           + (   dl(s)*pref_l(s)*log(p_l*(1 + tau_l*t_l(s))/pref_l(s))
              +  dk(s)*pref_k(s)*log(p_k*(1 + tau_k*t_k(s))/pref_k(s))
              -  qref_va(s)*log(p_va(s)))$(ekl(s) = 1)
          =e=    0;

prf_y(s)..   p_va(s)*qref_va(s) + sum(ss$ras(ss,s), ras(ss,s)*p_y(ss)) =e= p_y(s)*y(s)*(1 - t_y(s));

prf_invest.. sum(g$(not ccg(g)), p_c(g)) =e= p_k;

kmdef..      a_km =e= 1 - (p_fx/p_k)**efks;

* foreign capital flows:
mkt_k..      a_invest*(sum(h, sk(h)) + gsk) + sum(hfix, sk(hfix)) + (sum(h, sk(h))*a_km)$efks
         =e= sum(s, a_va(s)*dk(s)*(pref_k(s)/(1 + tau_k *t_k(s)))**ekl(s)*(p_va(s)/p_k)**ekl(s)) + a_gc*gdk;

mkt_l..      sum(h, a_ls(h)*sl(h)) + sum(hfix, sl(hfix))
         =e= sum(s, a_va(s)*dl(s)*(pref_l(s)/(1 + tau_l*t_l(s)))**ekl(s)*(p_va(s)/p_l)**ekl(s)) + a_gc*gdl;

mkt_ls(h)..  leisure(h) + qref_ls(h) =e= leisure(h)*a_w(h)*(p_w(h)/p_ls(h))**el(h) + qref_ls(h)*a_ls(h);

mkt_c(g)..   gce(g)*a_c(g)
*                exogenous household demand and saving:
             =e= sum(hfix, rcs(g,hfix)) + govsav$(not ccg(g))
*                current consumption goods:
              +  sum(h, (a_cp(h)*rcs(g,h)*(p_cp(h)/p_c(g))**eg(h))$ccg(g)
*                investment demand:
              +  (a_invest*rcs(g,h))$(not ccg(g)));

mkt_cc(h)..  a_cc(h) =e= a_w(h)*(p_w(h)/p_cc(h))**el(h);

mkt_cp(h)..  a_cp(h) =e= a_cc(h)*(p_cc(h)/p_cp(h))**eg(h);

mkt_g(h)..   a_gc    =e= a_cc(h)*(p_cc(h)/p_g(h))**eg(h);

mkt_w(h)..   a_w(h)  =e= i_h(h)/p_w(h);

mkt_gc..     p_trn*(qref_trn + qref_adj) + p_gc*a_gc*qref_gc =e= i_gov*qref_ginc;

mkt_va(s)..  a_va(s) =e= a_y(s);

* trade elasticity parameters (0.465 and 10) taken from p139 of bfsw:
mkt_y(s)..     a_y(s)*y(s) + vm(s)*(p_y(s)/p_fx)**0.465 + gse(s)
           =e= sum(ss, a_y(ss)*ras(s,ss))
            +  sum(g, a_c(g)*qref_z(s,g)) + gd(s)*a_gc + vx(s)*(p_fx/p_y(s))**10;

mkt_fx..       sum(s, vm(s)*(p_y(s)/p_fx)**0.465 - vx(s)*(p_fx/p_y(s))**10)
*              capital flows:
            + (sum(h, sk(h))*a_km)$efks =e= 0;

* hold real value of transfers constant:
mkt_trn.. p_trn =e= sum((h,ccg), rcs(ccg,h)*p_c(ccg))/sum((h,ccg), rcs(ccg,h));

* total income includes private valuation of public good:
totinc(h)..  i_h(h)*qref_i(h) =e= i_e(h)*(qref_i(h) - vpg(h)) + (p_g(h)*vpg(h)*a_gc)$vpg(h);

income(h)..  i_e(h)*(qref_i(h) - vpg(h))
*            capital income:
        =e=  a_invest*(p_k*sk(h) - sum(g$(not ccg(g)), p_c(g)*saving(h)))
*            labor income:
          +  p_ls(h)*(qref_ls(h) + leisure(h))
*            income taxes (average with marginal adjustment):
          -  t_iave(h)*(sl(h) + sk(h))*p_trn*tau_k
          -  t_i(h)*sk(h)*(p_k - p_trn)
          +  t_i(h)*qref_ls(h)*p_trn
*            transfers:
          +  p_trn*(trn(h) + incadj(h));

govinc..     i_gov*qref_ginc
*            income of exogenous households:
        =e=  sum(hfix, sl(hfix)*p_l + sk(hfix)*p_k - sum(g, rcs(g,hfix)*p_c(g)))
*            savings (exogenous)
          -  sum(g$(not ccg(g)), p_c(g)*govsav)
*            capital revenue:
          +  a_invest*p_k*gsk
*            government expenditures:
          +  sum(s, p_y(s)*gse(s))
*            tax receipts:
          +  sum(h,  t_iave(h)*(sl(h) + sk(h))*p_trn*tau_k + t_i(h)
                  * (qref_ls(h)*(a_ls(h)*p_ls(h) - p_trn)  + sk(h)*(p_k-p_trn)))
          +  sum(s, a_va(s)*p_l*dl(s)*tau_l*t_l(s)*(pref_l(s)/(1 + tau_l*t_l(s)))**ekl(s)
                  * (p_va(s)/p_l)**ekl(s))
          +  sum(s, a_va(s)*p_k*dk(s)*tau_k*t_k(s)*(pref_k(s)/(1 + tau_k*t_k(s)))**ekl(s)
                  * (p_va(s)/p_k)**ekl(s))
          +  sum(s, a_y(s)*p_y(s)*y(s)*t_y(s)) + a_gc*p_l*gdl*t_gdl
          +  sum(g, a_c(g)*p_c(g)*gce(g)*t_c(g));

Model gemtap / mkt_l.p_l, mkt_k.p_k,     mkt_ls.p_ls, mkt_c.p_c,   mkt_cc.p_cc
               mkt_w.p_w, mkt_gc.p_gc,   mkt_cp.p_cp, mkt_g.p_g,   mkt_va.p_va
               mkt_y.p_y, mkt_trn.p_trn, mkt_fx.p_fx, prf_gc.a_gc, prf_invest.a_invest
               prf_y.a_y, prf_va.a_va,   prf_w.a_w,   prf_cc.a_cc, prf_cp.a_cp
               prf_c.a_c, prf_ls.a_ls,   kmdef.a_km,  totinc.i_h,  income.i_e, govinc.i_gov /;

* default calibration: uniform attribubtion with -0.5 elasticity:
eg(h)     = 0.5;
vpg(h)    = qref_gc*popshr(h);
cg(h)     = sum(ccg, rcs(ccg,h)) + vpg(h);
qref_i(h) = cg(h) + leisure(h);

$onText
Scalar peps / 1.e-5 /;
p_k.lo     = peps;
p_l.lo     = peps;
p_va.lo(s) = peps;
p_ls.lo(h) = peps;
p_c.lo(g)  = peps;
p_cc.lo(h) = peps;
p_cp.lo(h) = peps;
p_g.lo(h)  = peps;
p_w.lo(h)  = peps;
p_fx.lo    = peps;
p_y.lo(s)  = peps;
$offText

* install benchmark:
a_cp.l(h)  = 1;
p_cp.l(h)  = 1;
a_gc.l     = 1;
a_invest.l = 1;
a_y.l(s)   = 1;
a_va.l(s)  = 1;
a_w.l(h)   = 1;
a_cc.l(h)  = 1;
a_c.l(g)   = 1;
a_ls.l(h)  = 1;
p_l.l      = 1;
p_k.l      = 1;
p_gc.l     = 1;
p_g.l(h)   = 1;
p_trn.l    = 1;
p_fx.l     = 1;
p_ls.l(h)  = 1;
p_w.l(h)   = 1;
p_y.l(s)   = 1;
p_va.l(s)  = 1;
p_c.l(g)   = 1;
p_cc.l(h)  = 1;
i_gov.l    = 1;
i_e.l(h)   = 1;
i_h.l(h)   = 1;
a_km.l     = 0;
tau_l.l    = 1;
tau_k.l    = 1;

* fix indicator variables:
tau_pl.fx = 0;
tau_l.fx  = 1;
tau_k.fx  = 1;

* fix variables according to switches and benchmark values.
* n.b. this causes associated equations to drop.
a_invest.fx$static     = 1;
a_km.fx$(efks = 0)     = 1;
p_g.fx(h)$(vpg(h) = 0) = 0;
i_e.fx(h)$(not redist) = 1;
i_gov.fx$redist        = 1;

solve gemtap using mcp;

Set sc 'scenarios' / bench 'benchmark replication'
                     itcut 'uniform (flat rate) income tax'
                     ktcut 'uniform capital tax'
                     ltcut 'uniform labor tax'              /;

Parameter summary(*,*,sc) 'solution summary';

Table uniftax(sc,*) 'indicators for uniform'
           k  l  i
   bench   0  0  0
   itcut   0  0  1
   ktcut   1  0  0
   ltcut   0  1  0;

loop(sc,
*  flat rate capital tax:
   if(uniftax(sc,"k"),
      t_k(s) = sum(ss, tk(ss))/sum(ss, dk(ss));
   else
      t_k(s) = tk(s)/dk(s);
   );
*  flat rate labor tax:
   if(uniftax(sc,"l"),
      t_l(s) = sum(ss, tl(ss))/sum(ss, dl(ss));
   else
      t_l(s) = tl(s)/dl(s);
   );
*  move to a flat rate income tax:
   if(uniftax(sc,"i"),
      t_i(h)    = tiave;
      t_iave(h) = tiave;
   else
      t_i(h)    = taubmk(h)/(1-taubmk(h));
      t_iave(h) = pit(h)/(sl(h) + sk(h));
   );

   solve gemtap using mcp;

*  report solution statistics:
   summary("status","_", sc) = gemtap.modelstat;
   summary("iters", "_", sc) = gemtap.iterusd;
   summary("cpu",   "_", sc) = gemtap.resusd;

*  public goods provision:
   summary("g","_",sc)   = 100*(a_gc.l - 1);
   summary("pk","_",sc)  = 100*(p_k.l/p_trn.l - 1);
   summary("pl","_",sc)  = 100*(p_l.l/p_trn.l - 1);
   summary("kmx","_",sc) = 100*a_km.l;

*  report welare changes indices:
   summary("ev",h,sc) = 100*(a_w.l(h) - 1);

* report current consumption:
   summary("cc",h,sc) = 100*(a_cc.l(h) - 1);

* report private consumption:
   summary("cp",h,sc) = 100*(a_cp.l(h) - 1);
);

display summary;