$TITLE A SEE/WTSM Model of World Trade -- MCP Version for Free Trade Area (FTA) $ontext > In the attached version of the model, I have enforced the condition > that the US dollar is the numeraire currency, and computed all > surpluses in dollar terms. Yes, there is a degree of indeterminancy in the model which permits us to fix one of the regional price indices. Note that when this price is fixed, the equation is omitted, but you can see in the solution listing that even though the equation is omitted, it is still satisified in the model solution. ---- VAR E Exchange rate in region j ($-fc) LOWER LEVEL UPPER MARGINAL ... USA 1.0000 1.0000 1.0000 1.921308E-11 < ** ... ** Note that the zero marginal indicates that the omitted equation is in balance . > Under an FTA, the original coding misses the economic gains to > regional producers and consumers arising from duty-free intrabloc > trade under the FTA. I don't think that I had this wrong. Here is the basic logic of the consumer surplus calculation: CS = (p0-p*) * (q0+q*)/2 in which p0 is the reference price level, pm0 in the code, and p* is the equilibrium price level. I believe that the relevant equilibrium price is p*=PM.L(i,r)/E.L(r) which is defined in terms of local currency. Similarly, q0 is the reference demand quantity, md0 in the code, and q* is the equilibrium quantity demand, i.e. q* = M.l(i,r) + MFTA.l(i,r)$fta(r) Note that this quantity accounts for all three types of imports. The producer surplus calculation is analogous: PS = (p*-1) * (q0+q*)/2 In this calculation, we take the reference price level equal to unity, and p* is defined as: p*=PX.L(i,r)/E.L(r). I've modified the reporting code accordingly. ------------------------------------------------------------------- In going through the model a second time, I came across an important logical problem with the FTA formulation The homogeneous goods formulation we have written down leads to significant levels of "reimports" in the computed equilibrium. Note that in the model we had been using, there would be significant economic effects of free trade areas defined over a single region -- nothing in the model formulation prevents a country from "exporting to itself", and if the selected country has high tariffs there is a significant economic impact. We can see that this occurs in the present FTA calculation in which EUO, in which there is a substantial reduction in EUO tariff revenues, consumer and producer surplus, even though EUO trade with the other FTA states is negligible in the benchmark: ---- 481 PARAMETER surpluspct Social surplus as % of benchmark consumption Tariff Consumer Producer Cons+Prod Total ALB -11.0 1.9 3.2 5.1 -5.9 BIH -10.6 2.5 4.1 6.5 -4.1 BGR -8.7 2.9 5.3 8.3 -0.4 HRV -9.6 2.0 3.8 5.8 -3.8 MKD -8.3 3.3 4.6 7.8 -0.5 MDA -10.0 4.2 6.1 10.2 0.2 ROM -10.1 4.0 6.2 10.1 YUG -9.1 1.8 3.5 5.3 -3.7 TUR -0.1 -0.1 -0.2 -0.2 UKR 0.1 -0.1 EUO -3.1 1.1 2.1 3.3 0.2 --------------------------------------------------------------- EUN -0.1 -0.1 BLR -0.2 -0.1 -0.3 -0.3 RUS -0.4 0.1 -0.3 -0.3 CHE 0.1 0.1 0.1 USA 0.1 0.1 0.1 JPN 0.3 0.3 0.3 CHN -0.2 -0.1 -0.3 -0.3 DCO -0.1 -0.1 -0.2 -0.2 EMP -0.1 -0.1 -0.2 -0.2 WAO -0.2 -0.1 -0.3 -0.3 AFO -0.1 -0.1 -0.1 ASC -0.3 -0.1 -0.4 -0.4 AMO -0.1 -0.1 -0.1 ROW 0.1 0.1 0.1 FTA -3.2 1.2 2.2 3.4 0.1 A simple constraint can be applied to prevent "own-region cross-hauling" through the FTA. I do this with the following constraint applying to imports from FTA markets: mshr_fta(i,r)$fta(r).. sum(fta(rr)$(not sameas(rr,r)), XFTA(i,rr)) =G= MFTA(i,r); This requires that no region import from the FTA an amount greater than exports of all other FTA member states. The shadow value on this constraint is the non-negative price LAMDA(i,r). This price then enters into the equilibrium (arbitrage) condition for imports from the FTA: mftaeq(i,r)$fta(r).. PFTA(i) + LAMDA(i,r) =G= PM(i,r); Likewise, the price of exports from an fta member states includes premia for any of the partners into which it is able to sell: xftaeq(i,r)$fta(r).. PX(i,r) =G= PFTA(i) + sum(fta(rr)$(not sameas(r,rr)), LAMDA(i,rr)); After having applied this (loose) constraint on trade flows, we find (as expected) that the FTA has a negligible influence on the EUO economy, nor does the trade agreement affect any other regions in the model: Tariff Consumer Producer Cons+Prod Total ALB -11.0 3.8 3.7 7.5 -3.5 BIH -10.6 4.3 4.7 9.0 -1.6 BGR -8.7 5.3 6.2 11.5 2.8 HRV -9.6 3.7 4.7 8.3 -1.3 MKD -8.3 5.5 5.4 11.0 2.6 MDA -10.0 8.1 7.5 15.5 5.6 ROM -10.1 6.3 7.0 13.2 3.1 YUG -9.1 3.7 4.3 8.0 -1.1 EUO -0.1 -0.1 FTA -0.3 0.1 0.2 0.3 This change in the model formulation assures that the Ricardian logic carries through: benefits captured as a result of a regional trade agreement are captured by the smaller country. We can also explore the impact of changing the set of countries included in the FTA. For example, if Ukraine is added, the economic impact becomes: Tariff Consumer Producer Cons+Prod Total ALB -11.0 3.8 3.7 7.5 -3.5 BIH -10.6 4.3 4.7 8.9 -1.7 BGR -8.7 5.3 6.2 11.5 2.8 HRV -9.6 3.7 4.7 8.3 -1.3 MKD -8.3 5.5 5.4 11.0 2.6 MDA -10.0 8.1 7.5 15.5 5.6 ROM -10.1 6.3 7.0 13.2 3.1 YUG -9.1 3.7 4.3 8.0 -1.1 UKR -8.4 7.0 6.8 13.8 5.3 EUO -0.1 -0.1 FTA -0.4 0.1 0.2 0.4 There are substantial benefits for Ukraine, and there is virtually no impact on the other member states. $offtext sets i Commodities / an Live animals & animal products ve Vegetable products fa Fats & oils fs Manufactured foodstuffs mn Mineral products ch Chemical rp Rubber & plastics hl Hides & leather products cw Cork & wood articles pp Pulp & paper products ta Textiles & apparel fw Footwear & other made-up articles sp Stone & mineral products ps Precious stones & jewellery mt Base metals & metal products ma Machinery te Transport equipment pe Professional equipment aa Arms & ammunition mm Miscellaneous manufactures wa Works of art ot Goods nes /, r Country and regions / ALB Albania, BIH Bosnia-Herzegovina, BGR Bulgaria, HRV Croatia, MKD TFYR Macedonia, MDA Republic of Moldova, ROM Romania, YUG Serbia-Montenegro, TUR Turkey, UKR Ukraine, EUO EU-15, EUN EU-10, BLR Belarus, RUS Russian Federation, CHE Switzerland, USA United States, JPN Japan, CHN China, DCO Other developed, EMP Euro-Med partners, WAO Other West Asia, AFO Other Africa, ASC Central Asia, ASO Other Asia, AMO Other America, ROW Rest of World/ kfta(r) States creating the FTA /ALB, BIH, BGR, HRV, MKD, MDA, ROM, YUG, EUO/, kfta2(r) States creating the FTA /ALB, BIH, BGR, HRV, MKD, MDA, ROM, YUG, UKR, EUO/, fta(r) States in FTA in the model; alias (r,rr); parameter md0(i,r) Base year import demand, xs0(i,r) Base year exports, t(i,r) Tariff rate, epsilon(i,r) Import demand elasticity, eta(i,r) Export supply elasticity; $onecho >gdxxrw.txt par=eta rng=eta!b2 par=epsilon rng=epsilon!b2 par=t rng=t!b2 par=xs0 rng=xs0!b2 par=md0 rng=md0!b2 $offecho $if not exist tradedata.gdx $call gdxxrw i=tradedata.xls o=tradedata.gdx @gdxxrw.txt $gdxin 'tradedata.gdx' $load md0 xs0 t epsilon eta * ------ md0, xs0 scaled by 1.0E+6; tariff rates are decimal fractions parameter b(r) Current account deficit pm0(i,r) Reference price of imports, xsd(i) Excess demand; b(r) = sum(i, md0(i,r)-xs0(i,r)); xsd(i) = sum(r, md0(i,r) - xs0(i,r)); display xsd; pm0(i,r) = 1 + t(i,r); fta(r) = no; positive variables M(i,r) Imports (Imports from non-FTA & non-CU) X(i,r) Exports (Exports to non-FTA & non-CU) MFTA(i,r) FTA Imports XFTA(i,r) FTA Exports P(i) World market price ($) PFTA(i) Market price within the FTA zone ($) PM(i,r) Import price ($) LAMDA(i,r) Limit on own-commodity imports in the FTA PX(i,r) Export price ($) E(r) Exchange rate in region j ($-fc); equations mdemand, meq, mftaeq, xsupply, xeq, xftaeq, ftamarket, market, caccount, mshr_fta; mdemand(i,r).. M(i,r) + MFTA(i,r)$fta(r) =e= md0(i,r) * (PM(i,r)/(E(r)*pm0(i,r)))**epsilon(i,r); xsupply(i,r).. xs0(i,r) * (PX(i,r)/E(r))**eta(i,r) =E= X(i,r) + XFTA(i,r)$fta(r); meq(i,r).. P(i) * (1+t(i,r)) =G= PM(i,r); mftaeq(i,r)$fta(r).. PFTA(i) + LAMDA(i,r) =G= PM(i,r); xeq(i,r).. PX(i,r) =G= P(i); xftaeq(i,r)$fta(r).. PX(i,r) =G= PFTA(i) + sum(fta(rr)$(not sameas(r,rr)), LAMDA(i,rr)); mshr_fta(i,r)$fta(r).. sum(fta(rr)$(not sameas(rr,r)), XFTA(i,rr)) =G= MFTA(i,r); ftamarket(i)$card(fta).. sum(fta(r), XFTA(i,r) - MFTA(i,r)) =E= 0; market(i).. sum(r, X(i,r) - M(i,r)) =E= 0; caccount(r).. 0 =e= sum(i, P(i) * (X(i,r)-M(i,r)) + (PX(i,r)*XFTA(i,r)-PM(i,r)*MFTA(i,r))$fta(r) ) + b(r); model global /mdemand.PM, meq.M, mftaeq.MFTA, xsupply.PX, xeq.X, xftaeq.XFTA, ftamarket.PFTA, market.P, caccount.E, mshr_fta.LAMDA /; M.l(i,r) = md0(i,r); X.l(i,r) = xs0(i,r); P.l(i) = 1; PM.L(i,r) = pm0(i,r); PX.L(i,r) = 1; E.l(r) = 1; E.FX("usa") = 1; PFTA.l(i) = 1; global.iterlim = 0; solve global using mcp; E.LO(r) = 0.001; P.LO(i) = 0.0001; PFTA.LO(i) = 0.0001; PM.LO(i,r) = 0.0001; PX.LO(i,r) = 0.0001; * Normalize prices: E.FX("usa") = 1; * Declare parameters for model output: parameter ssummary Sectoral summary, rsummary Regional results summary (% change), surplus Social surplus impacts (local currency), surpluspct Social surplus as % of consumption; set s /Tariff,Consumer,Producer,Cons+Prod,Total/; set rs(*)/FTA,nFTA/; rs(r) = yes; * Create a temporary batinclude file with reporting code which * can subsequently be accessed through a $batinclude "call": * This command permits us to "write" a file containing "%1": $escape = $onecho >"%gams.scrdir%report.scr" ssummary("%=1",i,"P") = P.l(i); ssummary("%=1",i,"PFTA") = PFTA.l(i); ssummary("%=1",i,"Trade") = 100*(sum(r, M.l(i,r)+MFTA.L(i,r))/sum(r, md0(i,r))-1); rsummary("%=1",r,"E") = E.L(r); rsummary("%=1",r,"M") = 100 * (sum(i, M.L(i,r)+MFTA.L(i,r)$fta(r))/sum(i,md0(i,r))-1); rsummary("%=1",r,"X") = 100 * (sum(i, X.L(i,r)+XFTA.L(i,r)$fta(r))/sum(i,xs0(i,r))-1); surplus("%=1",r,"Tariff") = round(sum(i, P.L(i)/E.l(r)*t(i,r)*M.L(i,r) - (pm0(i,r)-1)*md0(i,r)), 3); surplus("%=1",r,"Consumer") = round(sum(i, (pm0(i,r)-PM.L(i,r)/E.L(r)) * (md0(i,r)+M.l(i,r) + MFTA.l(i,r)$fta(r))/2),3); surplus("%=1",r,"Producer") = round(sum(i, (PX.L(i,r)/E.L(r)-1) * (xs0(i,r)+X.l(i,r) + XFTA.l(i,r)$fta(r))/2),3); surplus("%=1","FTA",s) = sum(fta, surplus("%=1",fta,s)); surplus("%=1","nFTA",s) = sum(r$(not fta(r)), surplus("%=1",r,s)); surplus("%=1",rs,"Cons+Prod") = surplus("%=1",rs,"Consumer") + surplus("%=1",rs,"Producer"); surplus("%=1",rs,"Total") = surplus("%=1",rs,"Tariff") + surplus("%=1",rs,"Cons+Prod"); surpluspct("%=1",r,s) = 100 * surplus("%=1",r,s) /sum(i,md0(i,r)*pm0(i,r)); surpluspct("%=1","nFTA",s) = 100 * surplus("%=1","nFTA",s) /sum((i,r)$(not fta(r)), md0(i,r)*pm0(i,r)); surpluspct("%=1","FTA",s)$sum((i,r)$fta(r), md0(i,r)*pm0(i,r)) = 100 * surplus("%=1","FTA",s)/sum((i,r)$fta(r), md0(i,r)*pm0(i,r)); surpluspct("%=1",rs,s) = round(surpluspct("%=1",rs,s),1); option surplus:3,surpluspct:1; $offecho * Generate a report of benchmark values: $batinclude "%gams.scrdir%report.scr" BMK * The following PATH options improve algorithmic efficiency. * Michael Ferris could probably explain why this is true. I * found these by simply reading the PATH documentation and trying a * few of the suggested specifications: $onecho >path.opt crash_method none; crash_perturb no; $offecho * Instruct PATH to read its options file: global.optfile=1; global.iterlim = 50000; * Solve scenarios and generate reports: fta(kfta) = yes; LAMDA.FX(i,r) = 0; solve global using mcp; $batinclude "%gams.scrdir%\report.scr" FTA_xhaul LAMDA.up(i,r) = inf; solve global using mcp; $batinclude "%gams.scrdir%report.scr" FTA fta(kfta2) = yes; solve global using mcp; $batinclude "%gams.scrdir%\report.scr" UKR option ssummary:3:1:1, rsummary:3:1:1, surplus:3:1:1; display ssummary, rsummary, surplus, surpluspct;