Compactness of representation leaves fewer opportunities to make mistakes. For this reason alone I prefer to implement equilibrium models with MPSGE. I use algebraic models for teaching, or occasionally I write out a model in full algebraic form in order to introduce functional forms which are unavailable in MPSGE or in order to apply joint maximization as a solution method for large scale models with an imbedded linear program.
I recognize, however, that the tabular MPSGE syntax can be impenetrable for many competent modellers, therefore I conclude my discussion of the core GTAPinGAMS model by going through the implementation in GAMS algebra. I pose the model here as a mixed complementarity problem, but in this formulation all of the market clearance and zero profit conditions will hold with equality, so the model can be solved in GAMS as a nonlinear program (NLP) with a vacuous objective or a constrained nonlinear system (CNS).
In order to write out GTAP in algebraic form it is helpful to introduce some additional benchmark data structures which simplify demand function algebra. The extra parameters include benchmark value shares for all of the nonlinear demand and supply functions in the model. (See Table 12.)
The variables used in the GAMS/MCP model are listed in Table 13, separated by blank lines into four subsets. The first set of variables are unit demand and supply functions, corresponding to the symbols from the algebraic formulation above. (See Table 8.) Demand and supply functions are represented implicitly in the MPSGE model, but for simplicity these are introduced as separate symbols in the algebraic model. The remaining three subsets of variables in the model correspond precisely to the sectors, commodities and consumers in the MPSGE model.
Table 14 presents equations defining the unit demand and supply functions. Using benchmark quantities, prices and value shares, I use the calibrated share form to express demands as a function of input prices. (See Rutherford 1998, Chapter 3). In order to keep track of what is what, I am following Michael Saunders' suggestions for GAMS program style, listing variables and GAMS variables in upper case, parameters and sets in lower case. The three symbols in Table 15 have not yet been defined. eta=2 represents the elasticity of transformation between production for the domestic and export markets, esubdm=4 is the domestic-import Armington elasticity of substitution, and esubmm=8 is the import-import Armington elasticity.
PARAMETER vad(i,r) Sectoral value-added, tau(i,r,s) Unit transport cost coefficient thetaf(f,i,r) Value added, thetad(i,r) Domestic output, thetag(i,r) Government demand, thetap(i,r) Private demand, thetat(i,r) Transport, thetam(d,i,r) Import value share, beta(i,s,r) Value share of bilateral imports, gamma(i,s,r) Goods share of unit import cost; vad(i,r) = sum(f, vfm(f,i,r)*pf0(f,i,r)); tau(i,r,s)$vxmd(i,r,s) = vtwr(i,r,s) / vxmd(i,r,s); thetam(d,i,r)$va(d,i,r) = vm(d,i,r) / va(d,i,r); thetaf(f,i,r)$vad(i,r) = pf0(f,i,r) * vfm(f,i,r) / vad(i,r); thetad(i,r)$vom(i,r) = vdm(i,r) / vom(i,r); thetag(i,r) = pg0(i,r) * vgm(i,r) / vg(r); thetap(i,r) = pc0(i,r) * vpm(i,r) / vp(r); thetat(i,r)$sum((j,s), vst(j,s)) = vst(i,r) / vt; beta(i,s,r)$vxmd(i,s,r) = (vxmd(i,s,r)*pmx0(i,s,r)+vtwr(i,s,r)*pmt0(i,s,r) ) / vim(i,r); gamma(i,s,r)$vxmd(i,s,r) = vxmd(i,s,r)*pmx0(i,s,r) / (vxmd(i,s,r)*pmx0(i,s,r) + vtwr(i,s,r)*pmt0(i,s,r) );
VARIABLES A_G(i,r) Public sector unit demand A_C(i,r) Private unit demand A_F(f,i,r) Factor unit demand A_X(i,r) Export unit supply A_D(i,r) Domestic unit supply A_M(i,r,s) Import unit demand C(r) Private consumption G(r) Public provision Y(i,r) Aggregate Output M(i,r) Import aggregation A(d,i,r) Armington aggregations YT Transport PC(r) Private demand PG(r) Public provision PD(i,r) Domestic Output price PX(i,r) Export price PM(i,r) Import price PA(d,i,r) Armington composite price PF(f,r) Factor price PT Transport services RA(r) Representative agent income;
DEF_G(i,r).. A_G(i,r) =E= vgm(i,r) * PROD(j, (PA("g",j,r)*(1+tg(j,r))/pg0(j,r))**thetag(j,r)) / ( PA("g",i,r)*(1+tg(i,r))/pg0(i,r) ); DEF_C(i,r).. A_C(i,r) =E= vpm(i,r) * PROD(j, (PA("c",j,r)*(1+tp(j,r))/pc0(j,r))**thetap(j,r)) / ( PA("c",i,r)*(1+tp(i,r))/pc0(i,r) ); DEF_F(f,i,r).. A_F(f,i,r) =E= vfm(f,i,r) * PROD(ff, (PF(ff,r)*(1+tf(ff,i,r))/pf0(ff,i,r) )**thetaf(ff,i,r)) / ( PF(f,r)*(1+tf(f,i,r)) / pf0(f,i,r) ); DEF_X(i,r).. A_X(i,r) =E= vxm(i,r) * (PX(i,r) / (thetad(i,r) * PD(i,r)**(1+eta) + (1-thetad(i,r)) * PX(i,r)**(1+eta))**(1/(1+eta)) )**eta; DEF_D(i,r).. A_D(i,r) =E= vdm(i,r) * (PD(i,r) / (thetad(i,r) * PD(i,r)**(1+eta) + (1-thetad(i,r)) * PX(i,r)**(1+eta))**(1/(1+eta)) )**eta; DEF_M(i,r,s).. A_M(i,r,s) =E= vxmd(i,r,s) * ( PM(i,s) / ( gamma(i,r,s) * PX(i,r)*(1+tx(i,r,s))*(1+tm(i,r,s))/pmx0(i,r,s) + (1-gamma(i,r,s)) * PT*(1+tm(i,r,s)) / pmt0(i,r,s) ) )**esubmm;
Having defined compensated demands, it is then straightforward to write down zero profit equations. For sector Yir this means that the cost of inputs to production (intermediate demand plus primary factors, gross of tax) must equal the value of outputs (domestic sales plus exports, net of tax).
* Production: PRF_Y(i,r).. SUM(j, vafm(j,i,r) * PA("i",j,r) * (1+ti(j,i,r)) ) + SUM(f, A_F(f,i,r) * PF(f,r) * (1 + tf(f,i,r)) ) =E= (1 - ty(i,r)) * (PD(i,r) * A_D(i,r) + PX(i,r) * A_X(i,r)); * Armington aggregation across imports from different countries: PRF_M(i,r).. SUM(s, (1 + tm(i,s,r)) * A_M(i,s,r) * (PX(i,s) * (1 + tx(i,s,r)) + PT * tau(i,s,r))) =E= PM(i,r) * vim(i,r) ; * Public output: PRF_G(r).. SUM(i, PA("g",i,r) * (1+tg(i,r)) * A_G(i,r)) =E= PG(r) * vg(r); * Private consumption: PRF_C(r).. SUM(i, PA("c",i,r) * (1+tp(i,r)) * A_C(i,r)) =E= PC(r) * vp(r); * Import-domestic aggregation by submarket: PRF_A(d,i,r).. ((1-thetam(d,i,r)) * PD(i,r)**(1-esubdm) + thetam(d,i,r) * PM(i,r)**(1-esubdm) )**(1/(1-esubdm)) =E= PA(d,i,r); * Inter-national transport services (Cobb-Douglas): PRF_YT.. PROD((i,r), PD(i,r)**thetat(i,r)) =E= PT;
The zero profit conditions for A(d,i,r), and YT are based on CES and Cobb-Douglas cost functions because the associated unit demand functions are not defined explicitly in the model.22 Market clearance equations are displayed in Table 15. The only tricky equation here is MKT_PA(d,i,r) in which I use three different subsets to equate submarket supply with intermediate, public and private demand. The subsets are declared:
set i_d(d)/i/, c_d(d) /c/, g_d(d) /g/;This notation permits me to define a different right-hand-side expression for each element of set d in the model definition.
* Exports: MKT_PX(i,r).. YX(i,r)*Y(I,R) =E= SUM(s, A_M(i,r,s)*M(i,s)) + VST(i,r)*YT*(PT/PX(i,r)); * Domestic supply: MKT_PD(i,r).. YD(i,r) * Y(I,R) =E= SUM(d, A(d,i,r) * vd(d,i,r) * ( PA(d,i,r)/PD(i,r) )**esubdm ) + vi(r)$cgd(i); * Imports: MKT_PM(i,r).. vim(i,r) * M(i,r) =E= SUM(d, A(d,i,r) * vm(d,i,r) * ( PA(d,i,r)/PM(i,r) )**esubdm ); * International transport: MKT_PT.. YT * vt =E= sum((i,r,s), A_M(i,r,s) * M(i,s) * tau(i,r,s)); * Armington supply: MKT_PA(d,i,r).. va(d,i,r) * A(d,i,r) =E= sum(j, vafm(i,j,r) * Y(j,r))$i_d(d) + (A_C(i,r) * C(r))$c_d(d) + ( A_G(i,r) * G(r))$g_d(d); * Government provision: MKT_PG(r).. G(r) =E= 1; * Factor market: MKT_PF(f,r).. evoa(f,r) =E= sum(i, A_F(f,i,r) * Y(i,r)); * Private demand: MKT_PC(r).. C(r) * vp(r) =E= RA(r) / PC(r) ;
The final equation for this model is an expression defining regional income as a function of factor prices, transfers, and tax revenue. The complexity in this equation concerns accounting for revenue from each of seven different tax instruments.23 Not to belabor the point, but the income expression in Table 16 illustrates the usefulness of MPSGE for tax policy analysis.24
INC_RA(r).. RA(r) =E= sum(f, PF(f,r) * evoa(f,r)) + sum(num, PC(num) * vb(r)) - sum(cgd, PD(cgd,r) * vdm(cgd,r)) - PG(r) * vg(r) * Output tax: + sum(i, ty(i,r)*(PX(i,r)*A_X(i,r)+PD(i,r)*A_D(i,r))*Y(I,R) ) * Tax on intermediate demand: + sum((i,j), ti(j,i,r) * PA("i",j,r) * vafm(j,i,r) * Y(i,r) ) * Taxes on factor use: + sum( (i,f), tf(f,i,r) * PF(f,r) * A_F(f,i,r) * Y(i,r)) * Export tax: + sum((i,s), tx(i,r,s) * PX(i,r) * A_M(i,r,s) * M(i,s) ) * Import tariff applies to mechandise gross of export tax * and transport cost: + sum((i,s), tm(i,s,r) * A_M(i,s,r) * M(i,r) * ( PX(i,s) * (1+tx(i,s,r)) + PT * tau(i,s,r) ) ) * Taxes on goverment consumption: + sum(i, tg(i,r) * PA("g",i,r) * A_G(i,r) * G(r)) * Taxes on private consumption: + sum(i, tp(i,r) * PA("c",i,r) * A_C(i,r) * C(r));