twocge.gms : A Two Country CGE Model

Description

No description.


Reference

  • Hosoe, N, Gasawa, K, and Hashimoto, H, Handbook of Computible General Equilibrium Modeling. University of Tokyo Press, Tokyo, Japan, 2004.

Small Model of Type : NLP


Category : GAMS Model library


Main file : twocge.gms

$title A Two-Country CGE Model in Ch. 10.3 (TWOCGE,SEQ=278)

$onText
No description.


Hosoe, N, Gasawa, K, and Hashimoto, H
Handbook of Computible General Equilibrium Modeling
University of Tokyo Press, Tokyo, Japan, 2004

Keywords: nonlinear programming, general equilibrium model, social accounting
          matrix, Japanese economy, United States economy
$offText

Set
   u    'SAM entry' / BRD, MLK, CAP, LAB, IDT, TRF, HOH, GOV, INV, EXT /
   i(u) 'goods'     / BRD, MLK                                         /
   h(u) 'factor'    /           CAP, LAB                               /
   r    'country'   / JPN, USA                                         /;

Alias (u,v), (i,j), (h,k), (r,rr);

Table SAM(u,v,r) 'social accounting matrix'
         BRD.JPN MLK.JPN CAP.JPN LAB.JPN IDT.JPN
   BRD        21      8
   MLK        17      9
   CAP        20      30
   LAB        15      25
   IDT         5       4
   TRF         1       2
   HOH                        50      40
   GOV                                         9
   INV
   EXT        13      11

   +     TRF.JPN HOH.JPN GOV.JPN INV.JPN EXT.JPN
   BRD                20      19      16       8
   MLK                30      14      15       4
   CAP
   LAB
   IDT
   TRF
   HOH
   GOV         3      23
   INV                17      2               12
   EXT

   +     BRD.USA MLK.USA CAP.USA LAB.USA IDT.USA
   BRD        40       1
   MLK        17      29
   CAP        33      30
   LAB        15      31
   IDT        10      20
   TRF         1       1
   HOH                        63      46
   GOV                                        30
   INV
   EXT         8       4

   +     TRF.USA HOH.USA GOV.USA INV.USA EXT.USA
   BRD                30      20      20      13
   MLK                30      14      15      11
   CAP
   LAB
   IDT
   TRF
   HOH
   GOV         2      29
   INV                20      27             -12
   EXT                                          ;

* loading the initial values
Parameter
   Y0(j,r)   'composite factor'
   F0(h,j,r) 'the h-th factor input by the j-th firm'
   X0(i,j,r) 'intermediate input'
   Z0(j,r)   'output of the j-th good'
   Xp0(i,r)  'household consumption of the i-th good'
   Xg0(i,r)  'government consumption'
   Xv0(i,r)  'investment demand'
   E0(i,r)   'exports'
   M0(i,r)   'imports'
   Q0(i,r)   "Armington's composite good"
   D0(i,r)   'domestic good'
   Sp0(r)    'private saving'
   Sg0(r)    'government saving'
   Td0(r)    'direct tax'
   Tz0(j,r)  'production tax'
   Tm0(j,r)  'import tariff'
   FF(h,r)   'factor endowment of the h-th factor'
   Sf(r)     'foreign saving in US dollars'
   tauz(i,r) 'indirect tax rate'
   taum(i,r) 'import tariff rate';

Td0(r)    =  SAM("GOV","HOH",r);
Tz0(j,r)  =  SAM("IDT",j,r);
Tm0(j,r)  =  SAM("TRF",J,r);
F0(h,j,r) =  SAM(h,j,r);
Y0(j,r)   =  sum(h, F0(h,j,r));
X0(i,j,r) =  SAM(i,j,r);
Z0(j,r)   =  Y0(j,r) + sum(i, X0(i,j,r));
M0(i,r)   =  SAM("EXT",i,r);
tauz(j,r) =  Tz0(j,r)/Z0(j,r);
taum(j,r) =  Tm0(j,r)/M0(j,r);
Xp0(i,r)  =  SAM(i,"HOH",r);
FF(h,r)   =  SAM("HOH",h,r);
Xg0(i,r)  =  SAM(i,"GOV",r);
Xv0(i,r)  =  SAM(i,"INV",r);
E0(i,r)   =  SAM(i,"EXT",r);
Q0(i,r)   = (Xp0(i,r)+Xg0(i,r)+Xv0(i,r) + sum(j, X0(i,j,r)));
D0(i,r)   = (1+tauz(i,r))*Z0(i,r)-E0(i,r);
Sp0(r)    =  SAM("INV","HOH",r);
Sg0(r)    =  SAM("INV","GOV",r);
Sf(r)     =  SAM("INV","EXT",r);

display Y0, F0, Z0,   X0, Xp0, Xg0, Xv0, E0, M0, Q0, D0, Sp0, Sg0, Td0, Tz0, Tm0
        FF, Sf, tauz, taum;

* calibration
Parameter
   sigma(i) 'elasticity of substitution'
   psi(i)   'elasticity of transformation'
   eta(i)   'substitution elasticity parameter'
   phi(i)   'transformation elasticity parameter';

sigma(i) =  2;
psi(i)   =  2;
eta(i)   = (sigma(i)-1)/sigma(i);
phi(i)   = (psi(i)+1)/psi(i);

Parameter
   alpha(i,r)  'share parameter in utility function'
   beta(h,j,r) 'share parameter in production function'
   b(j,r)      'scale parameter in production function'
   ax(i,j,r)   'intermediate input requirement coeff.'
   ay(j,r)     'composite fact. input req. coeff.'
   mu(i,r)     'government consumption share'
   lambda(i,r) 'investment demand share'
   deltam(i,r) 'share parameter in Armington function'
   deltad(i,r) 'share parameter in Armington function'
   gamma(i,r)  'scale parameter in Armington function'
   xid(i,r)    'share parameter in transformation func.'
   xie(i,r)    'share parameter in transformation func.'
   theta(i,r)  'scale parameter in transformation func.'
   ssp(r)      'average propensity for private saving'
   ssg(r)      'average propensity for gov. saving'
   taud(r)     'direct tax rate';

alpha(i,r)  =  Xp0(i,r)/sum(j, Xp0(j,r));
beta(h,j,r) =  F0(h,j,r)/sum(k, F0(k,j,r));
b(j,r)      =  Y0(j,r)/prod(h, F0(h,j,r)**beta(h,j,r));
ax(i,j,r)   =  X0(i,j,r)/Z0(j,r);
ay(j,r)     =  Y0(j,r)/Z0(j,r);
mu(i,r)     =  Xg0(i,r)/sum(j, Xg0(j,r));
lambda(i,r) =  Xv0(i,r)/(Sp0(r)+Sg0(r)+Sf(r));
deltam(i,r) = (1+taum(i,r))*M0(i,r)**(1-eta(i))/((1+taum(i,r))*M0(i,r)**(1-eta(i)) + D0(i,r)**(1-eta(i)));
deltad(i,r) =  D0(i,r)**(1-eta(i))/((1+taum(i,r))*M0(i,r)**(1-eta(i)) +D0(i,r)**(1-eta(i)));
gamma(i,r)  =  Q0(i,r)/(deltam(i,r)*M0(i,r)**eta(i) + deltad(i,r)*D0(i,r)**eta(i))**(1/eta(i));
xie(i,r)    =  E0(i,r)**(1-phi(i))/(E0(i,r)**(1-phi(i))+D0(i,r)**(1-phi(i)));
xid(i,r)    =  D0(i,r)**(1-phi(i))/(E0(i,r)**(1-phi(i))+D0(i,r)**(1-phi(i)));
theta(i,r)  =  Z0(i,r)/(xie(i,r)*E0(i,r)**phi(i) + xid(i,r)*D0(i,r)**phi(i))**(1/phi(i));
ssp(r)      =  Sp0(r)/sum(h, FF(h,r));
ssg(r)      =  Sg0(r)/(Td0(r)+sum(j, Tz0(j,r))+sum(j, Tm0(j,r)));
taud(r)     =  Td0(r)/sum(h, FF(h,r));

display alpha, beta,  b,   ax,  ay, mu, lambda, deltam, deltad, gamma, xie
        xid,   theta, ssp, ssg, taud;

Variable
   Y(j,r)     'composite factor'
   F(h,j,r)   'the h-th factor input by the j-th firm'
   X(i,j,r)   'intermediate input'
   Z(j,r)     'output of the j-th good'
   Xp(i,r)    'household cons. of the i-th good'
   Xg(i,r)    'government consumption'
   Xv(i,r)    'investment demand'
   E(i,r)     'exports'
   M(i,r)     'imports'
   Q(i,r)     "Armington's composite good"
   D(i,r)     'domestic good'
   pf(h,r)    'the h-th factor price'
   py(j,r)    'composite factor price'
   pz(i,r)    'supply price of the i-th good'
   pq(i,r)    "Armington's composite good price"
   pe(i,r)    'export price in local currency'
   pm(i,r)    'import price in local currency'
   pd(i,r)    'the i-th domestic good price'
   epsilon(r) 'exchange rate'
   pWe(i,r)   'export price in US dollars'
   pWm(i,r)   'import price in US dollars'
   Sp(r)      'private saving'
   Sg(r)      'government saving'
   Td(r)      'direct tax'
   Tz(j,r)    'production tax'
   Tm(i,r)    'import tariff'
   UU(r)      'utility'
   SW         'social welfare [fictitious obj. func.]';

Equation
   eqpy(j,r)    'composite factor aggregation func.'
   eqX(i,j,r)   'intermediate demand function'
   eqY(j,r)     'composite factor demand func.'
   eqF(h,j,r)   'factor demand function'
   eqpzs(j,r)   'unit cost function'
   eqTd(r)      'direct tax revenue function'
   eqTz(j,r)    'production tax revenue function'
   eqTm(i,r)    'import tariff revenue function'
   eqXg(i,r)    'government demand function'
   eqXv(i,r)    'investment demand function'
   eqSp(r)      'private saving function'
   eqSg(r)      'government saving function'
   eqXp(i,r)    'household demand function'
   eqpe(i,r)    'world export price equation'
   eqpm(i,r)    'world import price equation'
   eqepsilon(r) 'balance of payments'
   eqpqs(i,r)   'Armington function'
   eqM(i,r)     'import demand function'
   eqD(i,r)     'domestic good demand function'
   eqpzd(i,r)   'transformation function'
   eqDs(i,r)    'domestic good supply function'
   eqE(i,r)     'export supply function'
   eqpw(i,r,rr) 'international price equilibrium'
   eqw(i,r,rr)  'international quantity equilibrium'
   eqpqd(i,r)   'market clearing cond. for comp. good'
   eqpf(h,r)    'factor market clearing condition'
   eqUU(r)      'utility function'
   obj          'social welfare function [fictitious]';

* domestic production
eqpy(j,r)..     Y(j,r)  =e= b(j,r)*prod(h, F(h,j,r)**beta(h,j,r));

eqX(i,j,r)..    X(i,j,r)=e= ax(i,j,r)*Z(j,r);

eqY(j,r)..      Y(j,r)  =e= ay(j,r)*Z(j,r);

eqF(h,j,r)..    F(h,j,r)=e= beta(h,j,r)*py(j,r)*Y(j,r)/pf(h,r);

eqpzs(j,r)..    pz(j,r) =e= ay(j,r)*py(j,r) + sum(i, ax(i,j,r)*pq(i,r));

* government behavior
eqTd(r)..       Td(r)   =e= taud(r)*sum(h, pf(h,r)*FF(h,r));

eqTz(i,r)..     Tz(i,r) =e= tauz(i,r)*pz(i,r)*Z(i,r);

eqTm(i,r)..     Tm(i,r) =e= taum(i,r)*pm(i,r)*M(i,r);

eqXg(i,r)..     Xg(i,r) =e= mu(i,r)*(Td(r) + sum(j, Tz(j,r)) + sum(j, Tm(j,r))-Sg(r))/pq(i,r);

* investment behavior
eqXv(i,r)..     Xv(i,r) =e= lambda(i,r)*(Sp(r) + Sg(r) + epsilon(r)*Sf(r))/pq(i,r);

* savings
eqSp(r)..       Sp(r)   =e= ssp(r)*sum(h, pf(h,r)*FF(h,r));

eqSg(r)..       Sg(r)   =e= ssg(r)*(Td(r) + sum(j, Tz(j,r)) + sum(j, Tm(j,r)));

* household consumption
eqXp(i,r)..     Xp(i,r) =e= alpha(i,r)*(sum(h, pf(h,r)*FF(h,r)) -Sp(r) - Td(r))/pq(i,r);

* international trade
eqpe(i,r)..     pe(i,r) =e= epsilon(r)*pWe(i,r);

eqpm(i,r)..     pm(i,r) =e= epsilon(r)*pWm(i,r);

eqepsilon(r)..  sum(i, pWe(i,r)*E(i,r)) + Sf(r) =e= sum(i, pWm(i,r)*M(i,r));

* Armington function
eqpqs(i,r)..    Q(i,r)  =e= gamma(i,r)*(deltam(i,r)*M(i,r)**eta(i) + deltad(i,r)*D(i,r)**eta(i))**(1/eta(i));

eqM(i,r)..      M(i,r)  =e= (gamma(i,r)**eta(i)*deltam(i,r)*pq(i,r)/((1+taum(i,r))*pm(i,r)))**(1/(1-eta(i)))*Q(i,r);

eqD(i,r)..      D(i,r)  =e= (gamma(i,r)**eta(i)*deltad(i,r)*pq(i,r)/pd(i,r))**(1/(1-eta(i)))*Q(i,r);

* transformation function
eqpzd(i,r)..    Z(i,r)  =e= theta(i,r)*(xie(i,r)*E(i,r)**phi(i) + xid(i,r)*D(i,r)**phi(i))**(1/phi(i));

eqE(i,r)..      E(i,r)  =e= (theta(i,r)**phi(i)*xie(i,r)*(1+tauz(i,r))*pz(i,r)/pe(i,r))**(1/(1-phi(i)))*Z(i,r);

eqDs(i,r)..     D(i,r)  =e= (theta(i,r)**phi(i)*xid(i,r)*(1+tauz(i,r))*pz(i,r)/pd(i,r))**(1/(1-phi(i)))*Z(i,r);

* market clearing condition
eqpqd(i,r)..    Q(i,r)  =e= Xp(i,r)+Xg(i,r)+Xv(i,r) + sum(j, X(i,j,r));

eqpf(h,r)..     FF(h,r) =e= sum(j, F(h,j,r));

* international market clearing condition
eqpw(i,r,rr)..  (pWe(i,r) -pWm(i,rr))$(ord(r) <> ord(rr)) =e= 0;

eqw(i,r,rr)..   (E(i,r) -M(i,rr))$(ord(r) <> ord(rr)) =e= 0;

* fictitious objective function
eqUU(r)..       UU(r)   =e= prod(i, Xp(i,r)**alpha(i,r));

obj..           SW      =e= sum(r, UU(r));

* Initializing variables
Y.l(j,r)     = Y0(j,r);
F.l(h,j,r)   = F0(h,j,r);
X.l(i,j,r)   = X0(i,j,r);
Z.l(j,r)     = Z0(j,r);
Xp.l(i,r)    = Xp0(i,r);
Xg.l(i,r)    = Xg0(i,r);
Xv.l(i,r)    = Xv0(i,r);
Q.l(i,r)     = Q0(i,r);
E.l(i,r)     = E0(i,r);
M.l(i,r)     = M0(i,r);
D.l(i,r)     = D0(i,r);
pf.l(h,r)    = 1;
py.l(j,r)    = 1;
pz.l(i,r)    = 1;
pq.l(i,r)    = 1;
pe.l(i,r)    = 1;
pm.l(i,r)    = 1;
pd.l(i,r)    = 1;
epsilon.l(r) = 1;
pWe.l(i,r)   = 1;
pWm.l(i,r)   = 1;
Sp.l(r)      = Sp0(r);
Sg.l(r)      = Sg0(r);
Td.l(r)      = Td0(r);
Tz.l(i,r)    = Tz0(i,r);
Tm.l(i,r)    = Tm0(i,r);

* setting lower bounds to avoid division by zero
Y.lo(j,r)     = 0.00001;
F.lo(h,j,r)   = 0.00001;
X.lo(i,j,r)   = 0.00001;
Z.lo(j,r)     = 0.00001;
Xp.lo(i,r)    = 0.00001;
Xg.lo(i,r)    = 0.00001;
Xv.lo(i,r)    = 0.00001;
Q.lo(i,r)     = 0.00001;
E.lo(i,r)     = 0.00001;
M.lo(i,r)     = 0.00001;
D.lo(i,r)     = 0.00001;
pf.lo(h,r)    = 0.00001;
py.lo(j,r)    = 0.00001;
pz.lo(i,r)    = 0.00001;
pq.lo(i,r)    = 0.00001;
pe.lo(i,r)    = 0.00001;
pm.lo(i,r)    = 0.00001;
pd.lo(i,r)    = 0.00001;
epsilon.lo(r) = 0.00001;
pWe.lo(i,r)   = 0.00001;
pWm.lo(i,r)   = 0.00001;
Sp.lo(r)      = 0.00001;
Sg.lo(r)      = 0.00001;
Td.lo(r)      = 0.00001;
Tz.lo(i,r)    = 0.0000;
Tm.lo(i,r)    = 0.0000;

* numeraire
pf.fx("LAB",r) = 1;

* fixing the redundant variable
epsilon.fx("USA") = 1;

Model twocge / all /;

solve twocge maximizing SW using nlp;

* Simulation Runs: Abolition of Import Tariffs
taum(i,r) = 0;

option bRatio = 1;

solve twocge maximizing SW using nlp;

* Display changes
Parameter
   dY(j,r),  dF(h,j,r), dX(i,j,r), dZ(j,r),  dXp(i,r),    dXg(i,r),  dXv(i,r)
   dQ(i,r),  dE(i,r),   dM(i,r),   dD(i,r),  dpf(h,r),    dpy(j,r),  dpz(i,r)
   dpq(i,r), dpe(i,r),  dpm(i,r),  dpd(i,r), depsilon(r), dpWe(i,r), dpWm(i,r)
   dSp(r),   dSg(r),    dTd(r),    dTz(i,r), dTm(i,r);

dY(j,r)     = (Y.l(j,r)  /Y0(j,r)  -1)*100;
dF(h,j,r)   = (F.l(h,j,r)/F0(h,j,r)-1)*100;
dX(i,j,r)   = (X.l(i,j,r)/X0(i,j,r)-1)*100;
dZ(j,r)     = (Z.l(j,r)  /Z0(j,r)  -1)*100;
dXp(i,r)    = (Xp.l(i,r) /Xp0(i,r) -1)*100;
dXg(i,r)    = (Xg.l(i,r) /Xg0(i,r) -1)*100;
dXv(i,r)    = (Xv.l(i,r) /Xv0(i,r) -1)*100;
dQ(i,r)     = (Q.l(i,r)  /Q0(i,r)  -1)*100;
dE(i,r)     = (E.l(i,r)  /E0(i,r)  -1)*100;
dM(i,r)     = (M.l(i,r)  /M0(i,r)  -1)*100;
dD(i,r)     = (D.l(i,r)  /D0(i,r)  -1)*100;
dpf(h,r)    = (pf.l(h,r) /1 -1)*100;
dpy(j,r)    = (py.l(j,r) /1 -1)*100;
dpz(i,r)    = (pz.l(i,r) /1 -1)*100;
dpq(i,r)    = (pq.l(i,r) /1 -1)*100;
dpe(i,r)    = (pe.l(i,r) /1 -1)*100;
dpm(i,r)    = (pm.l(i,r) /1 -1)*100;
dpd(i,r)    = (pd.l(i,r) /1 -1)*100;
dpWe(i,r)   = (pWe.l(i,r)/1 -1)*100;
dpWm(i,r)   = (pWm.l(i,r)/1 -1)*100;
depsilon(r) = (epsilon.l(r)/1 -1)*100;
dSp(r)      = (Sp.l(r)   /Sp0(r)   -1)*100;
dSg(r)      = (Sg.l(r)   /Sg0(r)   -1)*100;
dTd(r)      = (Td.l(r)   /Td0(r)   -1)*100;
dTz(i,r)    = (Tz.l(i,r) /Tz0(i,r) -1)*100;
dTm(i,r)    = (Tm.l(i,r) /Tm0(i,r) -1)*100;

display dY,  dF,  dX,  dZ,  dXp, dXg,  dXv,  dQ,       dE,  dM,  dD,  dpf, dpy
        dpz, dpq, dpe, dpm, dpd, dpWe, dpWm, depsilon, dTd, dTz, dTm, dSp, dSg;