$title 16 sector general equilibrium tax model of uk $include ptax.gms *A model constructed by Keshab Bhattarai under the supervision of Professor John Whalley under an *ESRC project in general equilibrium modelling in the University of Warwick. Graham Siddorn *in the Inland Revenue had provided data for it. Results of the model are published in the *Holly and Weale (2000)ed. Econometric Modelling: Techniques and Applications Cambridge *University Press, pp. 69-93. This model is written in GAMS/MPSGE shoftware. *The MPSGE software was written by Professor Thomas F. Rutherford of the University of Colorado, Boulder USA. * ptax.gms includes specification of tax system in the UK in 1995. SET HH Households and labor categories / H1 Household 1 /; ALIAS (HH,lc); TABLE IOF(K,KK) Input-output transaction matrix Agric Extra Minin Chemi Metal Engin Foodd othma Power Const Distr Trans Finan Pubad Educa House Agric 2853 0 0 8 1 0 8748 302 0 3 536 32 5 0 83 0 Extra 0 802 0 3609 0 1 0 0 1811 0 50 0 0 0 0 0 Minin 7 0 39 84 781 51 17 67 2317 19 22 2 0 0 1 0 Chemi 1125 11 20 4324 664 540 430 1921 723 641 1318 1550 711 0 772 17 Metal 149 142 184 800 6811 4970 1438 4269 75 9153 741 290 119 0 135 0 Engin 82 603 449 447 1166 7013 415 2512 306 1895 965 926 935 0 167 44 Foodd 2121 16 4 160 53 44 5015 275 58 147 5382 375 588 0 528 3 othma 511 281 60 1205 991 2351 2547 11835 380 3279 5856 2569 7021 0 1484 241 Power 328 0 205 702 1047 580 546 918 12006 424 1708 819 1409 0 482 36 Const 186 0 2 95 184 119 130 261 0 23022 760 128 1812 0 138 858 Distr 873 209 109 1486 2711 3394 1662 3125 695 2891 4438 2700 2496 0 623 94 Trans 266 761 217 763 2335 830 1151 2211 235 846 12956 8091 10649 0 1084 169 Finan 1023 317 280 2574 3193 4870 3665 8382 912 9147 18504 7541 49906 0 4436 7516 Pubad 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Educa 363 0 33 415 282 539 481 1101 170 263 962 744 2823 0 4930 47 House 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; Table asset(j,K) categories of capital asset in the year 1995 Agric Extra Minin Chemi Metal Engin Foodd othma Power Const Distr Trans Finan Pubad Educa House Build 15672 50 1125 11284 13381 15646 13528 24558 54403 3955 76826 50835 107812 49959 91925 0 pmlon 0 2968 0 6703 2621 744 918 6088 42115 283 6381 21945 968 1778 0 0 pmsho 2993 20032 1867 17351 18766 18647 13721 34374 2399 2549 23430 13894 31251 7519 10204 0 vehic 1122 283 71 490 699 1062 662 1568 501 1715 6448 15425 18478 1055 946 0 dwell 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 709731 ; TABLE ZZ(*,K) MISCELLANEOUS PARAMETERS AND INITIAL DATA Agric Extra Minin Chemi Metal Engin Foodd othma Power Const Distr Trans Finan Pubad Educa House FinDem 6539 5592 510 24920 16011 40642 29953 53929 14212 62407 108189 26745 44328 67842 38044 35482 Imp 1453 1045 209 8698 6340 9722 5567 20040 3469 4334 3190 3019 3064 0 1334 13 Sbyfd 10 18 9 33 1487 61 3 331 9 136 109 184 1425 0 66 0 h1 5077 4529 292 16190 8185 30859 24384 33558 10735 57937 104890 23542 39839 67842 36644 35468 Tax -434 14 -135 1224 763 577 -373 1015 2701 273 8427 1022 5280 0 724 7 Kstock 19788 23333 3063 35827 35466 36099 28829 66588 99419 8502 113086 102099 158508 60311 103075 709731 Ka 5228 6777 238 7116 4397 5289 5844 8733 5037 16923 19175 16365 23845 6762 8365 26436 Lb 2966 869 1996 5943 12080 17617 7437 27242 4521 16703 50599 22953 54508 61080 25843 0 vat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XD 19110 11865 3917 39686 45286 58567 44722 94539 35424 90101 135697 69310 166594 67842 51196 35482 intd 9888 3142 1601 16673 20220 25301 26245 37178 19688 51732 54197 25767 78472 0 14864 9025 p0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ; parameter chk, chkk; chk = sum(k, zz("lb",k)); chkk = sum(k, zz("ka",k)); display chk, chkk; Table income(*,hh) Sources of Income to the households h1 intr 166530 wage 312357 trns 21087 hhtx 0 ; parameter c0(hh) total extended consumption value cap0(j,k) capital stock type asset j for sector k d0(hh,k) final demand grev government revenue (returned lump-sum) hit(hh) marginal income tax hit0(hh) base year income tax rate incbal(*) income balance * intr(hh) household interest income intr(j,hh) iof(kk,k) intermediate demand kt0(k) total capital stock for each sector k0(j,k) capital l0(k) wage payments leisure(hh) leisure demand (value net of income tax) mcf marginal cost of public funds mkt(*) market cleance check for the base year nettrn(hh) net income transfer netwage(hh) wage income (net of income tax) p0(k) consumer prices (gross of vat) pindex price index for marginal calculations prf(kk) zero profit condition ptaxrv tax revenue from ptax rk0(j,k) base user cost of capital rk0(j,k) base year return (gross of tax) tk(j,k) capital tax rate by assets per sector P-tax rates tk0(j,k) base year capital tax rate taxio(k) tax payment in io balances taxdiff(k) tax payment differences by sectors vt(k) value-added tax rate vt0(k) base year value-added tax rate wages(hh) wage income (gross of income tax) y0(k) sectoral output; * Extract some data: y0(k) = zz("xd",k) -zz("imp",k)-zz("sbyfd",k); d0(hh,k) = ZZ("findem",k) -zz("imp",k)-zz("sbyfd",k); cap0(j,k) = asset(j,k); kt0(k) = zz("ka",k); k0(j,k) = zz("ka",k)*(cap0(j,k)/sum(jj,cap0(jj,K))); l0(k) = zz("lb",k); taxio(k) = zz("tax",k); display k0,kt0, cap0; * Calibrate capital tax rates to the data: *tk(i) =zz("tax",i)/k0(i); tk(j,k) = trafo(j,k); tk("dwell",k) = 0; tk("dwell","house") = trafo("dwell","house"); rk0(j,k) = 1 + tk(j,k); ptaxrv(k) = sum(j, trafo(j,k)*k0(j,k)); taxdiff(k) = ptaxrv(k) -taxio(k); display tk, rk0, ptaxrv, taxdiff; l0(k) = zz("lb",k); wages(hh) = sum(k,l0(k)); display l0; * Impose a uniform VAT rate of 23%: vt(k)=0.23; p0(k) = 1 + vt(k); *intr(hh) = income("INTR",HH); intr(j,hh) = sum(k, k0(j,k)); * Impose a marginal income tax at 22%: *wages(hh) = income("wage",hh); hit(hh)=0.22; netwage(hh) = (1-hit(hh)) * wages(hh); * Assume that 3/4 as much time is spent on leisure and * home production for all households: leisure(hh) =(3/4) * netwage(hh); * The value of aggregate (extended) consumption: *d0(hh,k) =d0(hh,k)+taxdiff(k); c0(hh) = sum(k, d0(hh,k)*p0(k)) + leisure(hh); * Government tax revenue: grev = sum((j,k), k0(j,k)*tk(j,k)) + sum(hh, hit(hh)*wages(hh)) + sum((hh,k), vt(k)*d0(hh,k)) +sum(k, taxdiff(k)); * Zero profit: y0(k) = y0(k)+taxdiff(k); prf(k) = y0(k) - sum(kk, iof(kk,k)) - l0(k) - sum(j,k0(j,k)*rk0(j,k)); display prf; * Market clearance: *d0(hh,k) =d0(hh,k)+taxdiff(k); mkt(k) = y0(k)-taxdiff(k) - sum(kk,iof(k,kk)) - sum(hh,d0(hh,k)); mkt("l") = sum(hh, wages(hh)) - sum(k, l0(k)); mkt("k") = sum((j,k), k0(j,k)) - sum((j,hh),intr(j,hh)); display mkt; * Assuming that the data satisfy zero profit and market * clearance, use net transfers to balance income accounts: *nettrn(hh) = c0(hh) - intr(hh) - (netwage(hh)+leisure(hh)); nettrn(hh) = c0(hh) - sum(j,intr(j,hh)) - (netwage(hh)+leisure(hh)); incbal("govt") = grev - sum(hh, nettrn(hh)); *grev = incbal("govt"); display incbal,nettrn, y0; **MPSGE syntax for declaring a general equilibrium model of taxes $ontext $model:uk $commodities: pg(k) ! supply price rk(j) ! capital rental rate pl ! wage rate pt ! value of transfers ple(hh) ! net of tax wage pc(hh) ! unit expenditure cost index $sectors: y(k) ! production ls(hh) ! labor supply c(hh) ! consumpion $consumers: ra(hh) ! private households govt ! tax income account $prod:y(k) s:0 va:2 L(va):3 o:pg(k) q:(y0(k)) i:pg(kk) q:iof(kk,k) i:pl q:l0(k) va: i:rk(j) q:k0(j,k) L: a:govt t:tk(j,k) p:rk0(j,k) $prod:ls(hh) o:pl q:wages(hh) a:govt t:hit(hh) i:ple(hh) q:netwage(hh) $prod:c(hh) s:1.75 a:3.0 o:pc(hh) q:c0(hh) i:pg(k) q:d0(hh,k) a:govt t:vt(k) p:p0(k) a: i:ple(hh) q:leisure(hh) $demand:govt d:pt q:grev $demand:ra(hh) e:ple(hh) q:(netwage(hh)+leisure(hh)) e:rk(j) q:intr(j,hh) e:pt q:nettrn(hh) d:pc(hh) q:c0(hh) $report: V:Y1(k) O:Pg(k) PROD:Y(k) V:L1(k) I:PL PROD:Y(k) V:K1(j,k) I:RK(j) PROD:Y(k) V:LS1(HH) I:PLE(HH) PROD:LS(HH) V:C1(HH,k) I:Pg(k) PROD:C(HH) V:LE(HH) I:PLE(HH) PROD:C(HH) V:W1(hh) D:PC(HH) DEMAND:RA(HH) V:PT1 D:PT DEMAND:GOVT V:W(HH) W:RA(HH) $offtext $sysinclude mpsgeset uk option mcp =path; uk.iterlim = 3; $include uk.gen solve uk using mcp; $include uk.gen solve uk using mcp; parameter reva,meb, va(k), betak(j,k),betal(k),alpha(hh),alphal(Hh), sumalphc,alphac(hh,k), sumbetak(k); reva = govt.L; va(k) =PL.L*L1.L(k) +sum(j, RK.L(j)*K1.L(j,k)); *netinc(h) =ra.L(H)-HTX(H); betal(k) =(PL.L*L1.L(k))/va(k) ; betak(j,k) = (rk.L(j)*K1.L(j,k))/va(k); sumbetak(k) = sum(j, betak(j,k)); *alpha(h) =SUM(k,pg.l(k)*C1.l(H,I))/NETINC(H); alpha(hh) =SUM(k,pg.l(k)*C1.l(Hh,k))/(netwage(hh)+leisure(hh)+sum(j,intr(j,hh))+nettrn(hh)); alphac(hh,k) =pg.l(k)*C1.l(Hh,k)/(netwage(hh)+leisure(hh)+sum(j,intr(j,hh))+nettrn(hh)); sumalphc = sum((hh,k), alphac(hh,k)); alphaL(Hh) = 1-alpha(hh); display va,betak,sumbetak,betal,alpha,alphal,alphac,sumalphc; uk.iterlim = 8000; * Assign base year taxes for future reference: vt0(k) = vt(k); hit0(hh) = hit(hh); tk0(j,k) = tk(j,k); * Begin with marginal excess burden calculations: * Compute the average mcf for value-added taxes: vt(k) = vt0(k) + 0.05; $include uk.gen solve uk using mcp; pindex = sum(hh, pc.l(hh)*c0(hh)) / sum(hh, c0(hh)); mcf("average","vt") = 1 + sum(hh, pc.l(hh) * c0(hh) * (1-c.l(hh))) / (grev*(pt.l - pindex)); vt(k) = vt0(k); display "mcf-VAT", pindex,pt.l, pc.l,mcf; * Compute the average marginal cost of fund (mcf) for capital taxes: tk(j,k) = tk0(j,k) + 0.05; $include uk.gen solve uk using mcp; pindex = sum(hh, pc.l(hh)*c0(hh)) / sum(hh, c0(hh)); mcf("average","tk") = 1 + sum(hh, pc.l(hh) * c0(hh) * (1-c.l(hh))) / (grev*(pt.l - pindex)); tk(j,k) = tk0(j,k); display "mcf-tk", pindex,pt.l, pc.l,mcf; * Compute the average mcf for income taxes: hit(hh) = hit(hh) + 0.05; $include uk.gen solve uk using mcp; pindex = sum(hh, pc.l(hh)*c0(hh)) / sum(hh, c0(hh)); mcf("average","hit") = 1 + sum(hh, pc.l(hh) * c0(hh) * (1-c.l(hh))) / (grev*(pt.l - pindex)); hit(hh) = hit0(hh); display "mcf-hit", pindex,pt.l, pc.l,mcf; vt(k) = vt0(k) + 0.05; tk(j,k) = tk0(j,k) + 0.05; hit(hh) = hit0(hh) + 0.05; $include uk.gen solve uk using mcp; pindex = sum(hh, pc.l(hh)*c0(hh)) / sum(hh, c0(hh)); mcf("average","all") = 1 + sum(hh, pc.l(hh) * c0(hh) * (1-c.l(hh))) / (grev*(pt.l - pindex)); display "mcf-all", pindex,pt.l, pc.l,mcf; vt(k) = vt0(k); tk(j,k) = tk0(j,k); hit(hh) = hit(hh); * Compute the sector-specific mcfs for vat and capital taxes: alias (kkk,k); loop(kkk, vt(k) = vt0(k) + 0.05; $include uk.gen solve uk using mcp; pindex = sum(hh, pc.l(hh)*c0(hh)) / sum(hh, c0(hh)); mcf(k,"vt") = 1 + sum(hh, pc.l(hh) * c0(hh) * (1-c.l(hh))) / (grev*(pt.l - pindex)); vt(k) = vt0(k); tk(j,k) = tk0(j,k) + 0.05; $include uk.gen solve uk using mcp; pindex = sum(hh, pc.l(hh)*c0(hh)) / sum(hh, c0(hh)); mcf(k,"tk") = 1 + sum(hh, pc.l(hh) * c0(hh) * (1-c.l(hh))) / (grev*(pt.l - pindex)); tk(j,k) = tk0(j,k); ); * Tax reform simulations: parameter welfare Welfare impacts of tax reform (%EV); tk(j,k) = 0; $include uk.gen solve uk using mcp; tk(j,k) = tk0(j,k); welfare(hh,"tk")= 100 * (c.l(hh)-1); display "cons-tk",c.l; hit(hh) = 0; $include uk.gen solve uk using mcp; hit(hh) = hit0(hh); welfare(hh,"hit")= 100 * (c.l(hh)-1); display "cons-hit",c.l; vt(k) = 0; $include uk.gen solve uk using mcp; vt(k) = vt0(k); welfare(hh,"vt")= 100 * (c.l(hh)-1); display "cons-vat",c.l; tk(j,k) = 0; vt(k) = 0; hit(hh) = 0; $include uk.gen solve uk using mcp; welfare(hh,"gft")= 100 * (c.l(hh)-1); meb = sum(hh,(100 * (c.l(hh)-1)))/(reva-govt.L); display "cons-all",c.l; display mcf,meb,welfare;