*I appreciate data collaboration of Graham Siddorn in the Inldand Revenue and supervision by Professor John Whalley and Carlo Perroni *in process of construction of this model. $title intertemporal multisectoral ge tax model of UK 1995 *$codex = 1; $OFFSYMXREF $INLINECOM { } $include uk95.gms * Set declarations scalar armington /1.5/ intersub /1.0/ tback /9/ Capflow /0/ ann /0/ debt /1/; SET T Time periods /1995*2050/ *Time periods /1995*2060/ horizon(t); horizon(t) =yes$(ord(t) ne card(t)); PARAMETER YEAR(T); YEAR(T) = 1996 + ORD(T); gsize(t) =1; SETS TFIRST(T) First period TSECOND(T) Second period TLAST(T) Last period; * Set definitions: TFIRST(T) = YES$(ORD(T) EQ 1); TSECOND(T) = YES$(ORD(T) EQ 2); TLAST(T) = YES$(ORD(T) EQ CARD(T)); ALIAS (TT,T); scalar ESUBT Intertemporal elasticity /0.5/ GR Annual potential growth rate /0.02/ R Annual net interest rate /0.05/ ETRNDX Elasticity of transformation /2.0/ ESUB Elasticity of substitution /0.5/ ESUBDM Elasticity of substitution /2.0/ ; Parameter IJ0 Initial net investment, Ig0 Initial gross investment, UBAR Utility in benchmark PK0 Reference price for capital, gRK0 User cost of capital in benchmark dprr depreciation rate in single capital model ijj investment kstokk capital stock depj depreciation rate in sector specific capital model ij investment for sector j ; *============================================================== * Calibration *============================================================== * Net investment on the initial steady-state covers growth * plus deprecition: parameter invchk, kratio; kstock(k) = sum(j,cap0(j,k)); depj(j) = 0.07; ijj(k) = (id0(k)+id0m(k)+stock(k)+stockm(k)); kratio(k) =ijj(k)/kstock(k); display kratio, kstock; ijj(k) = (kstock(k)/sum(kk,kstock(kk)))*tid0; invchk(k) = kt0(k)-ijj(k); grk0(k) = ijj(k)/kstock(k); dprr(k) = invchk(k)/kstock(k); dprr(k)= sum(j,cap0(j,k))/sum((jj,kk),cap0(jj,kk)); dprr(k)= sum(j,dep(j,k)*cap0(j,k)/sum(jj,cap0(jj,k))); dprr(k)$(dprr(k) lt gr) = gr; ijj(k) =((dprr(k)+gr)/(r+dprr(k)))*kt0(k); kstock(k) =ijj(k)/(dprr(k)+gr); ijj(k) =((dprr(k)+gr)*KSTOCK(K)); kstock(k) = KT0(K)/(DPRR(K)+r); kratio(k) =ijj(k)/kstock(k); invchk(k) = ijj(k)-((id0(k)+id0m(k)+stock(k)+stockm(k))*(1+VTK(K))); display ijj, kstock, invchk,kratio, dep, dprr; kstokk(j) = sum(k,cap0(j,k)); ij(j) = ((depj(j)+r)/(gr+depj(j)))*sum(k,k0(j,k)); ij(j) = (depj(j)+gr)*kstokk(j); kstokk(j) =ij(j)/(depj(j)+gr); * Defining discounting and growth factors PARAMETER PREF(T) Reference price for scaling, QREF(T) Reference quantity CREF(hh,T) Reference consumption path for intertemporal consumer ; * Reference price path is determined by the interest rate: PREF(T) = 1/(1+R)**(ORD(T)-1); * Reference quantity path is determined by the growth rate: QREF(T) = (1+GR)**(ORD(T)-1); * Reference consumption path for the intertemporal consumer: CREF(hh,T) = (1/card(hh))*sum(k,CCh0(hh,k)+cchm0(hh,k)) * QREF(T); * Present value of consumption over the model horizon: UBAR(hh) = (1/card(hh))*sum(k,CCh0(hh,k)+cchm0(hh,k)+leisure(hh))*SUM(T,QREF(T)*PREF(T)); DISPLAY PREF, QREF, UBAR; parameter incadjj, tkk0, prbal,invbal, invbalt; parameter transfer(hh), tr1(hh,t); *incadjj(hh,t) =151580-252; incadjj(hh,t) =151580-252; tkk0(k) =tkk(k); KT0(K) = KT0(K)/(1+tkk0(k)); kstock(k) = kstock(k)/(1+tkk0(k)); ijJ(k) = ijJ(k)/(1+tkk0(k)); scalar rev0; rev0 = sum(k, kt0(k)*tkk0(k)); *============================================================= * MPSGE Model Specification *============================================================= $ontext $MODEL:UK95 *$ECHOP:.TRUE *$FUNLOG:.TRUE *$DATECH:.TRUE $sectors: kap(k,t) ! capital stock id(t) ! investment activity inv(k,t) ! investment y(k,t) ! production ls(hh,t) ! labor supply c(hh,t) ! consumpion x(k,t)$expt(k) !exports IM(k,t)$m0(k) ! imports go(t) !government consumption gol$(debt eq 1) gol1(t)$(debt eq 0) u(hh,t) ! utility intd(kk,k,t)$(iof(kk,k)+iofm(kK,k)) lu(hh) ! life time utility * xinv(t)$CAPFLOW * minv(t)$CAPFLOW ** $commodities: PK(k,t) ! price of capital stock ptk(k) ! price of terminal capital rK(k,t) ! capital rental rate pd(k,t) ! supply price px(k,t)$expt(k) ! export price PM(k,t)$m0(k) ! import price pint(kk,k,t)$(iof(kk,k)+iofm(kK,k)) pl(t) ! wage rate pc(hh,t) ! unit expenditure cost index ple(hh,t) ! net of tax wage pinv(t) ! investment price pg(t) ! price of government spending pgl$(debt eq 1) pgl1(t)$(debt eq 0) pfx(t)$(CAPFLOW eq 0) ! relative price of external sector pu(hh,t) ! price of utility plu(hh) ! price of life time utility ppfx$(CAPFLOW eq 1) $consumers: ra(hh) ! private households govt$(debt eq 1) ! tax income account govt1(t)$(debt eq 0) ! tax income account $auxiliary: tkap(k) ! Terminal capital demand multax$(debt eq 1) multax1(t)$(debt eq 0) *composite investment good $prod:id(t) s:armington o:pinv(t) q:(sum(k,(id0(k)+stock(k)+id0m(k)+stockm(k))*(1+vtk0(k)))) i:pd(k,t)$((ord(t) LE ann) and (debt eq 1)) q:((id0(k)+stock(k))) a:govt T:vtk0(k) p:p0k(k) i:pm(k,t)$((ord(t) LE ann) and (debt eq 1)) q:((id0m(k)+stockm(k))) a:govt T:vtk0(k) p:p0k(k) i:pd(k,t)$((ord(t) GT ann) and (debt eq 1)) q:((id0(k)+stock(k))) a:govt n:multax m:vtk(k) p:p0k(k) i:pm(k,t)$((ord(t) GT ann) and (debt eq 1)) q:((id0m(k)+stockm(k))) a:govt n:multax m:vtk(k) p:p0k(k) i:pd(k,t)$((ord(t) LE ann) and (debt eq 0)) q:((id0(k)+stock(k))) a:govt1(t) n:multax1(t) m:vtk0(k) p:p0k(k) i:pm(k,t)$((ord(t) LE ann) and (debt eq 0)) q:((id0m(k)+stockm(k))) a:govt1(t) n:multax1(t) m:vtk0(k) p:p0k(k) i:pd(k,t)$((ord(t) GT ann) and (debt eq 0)) q:((id0(k)+stock(k))) a:govt1(t) n:multax1(t) m:vtk(k) p:p0k(k) i:pm(k,t)$((ord(t) GT ann) and (debt eq 0)) q:((id0m(k)+stockm(k))) a:govt1(t) n:multax1(t) m:vtk(k) p:p0k(k) *investment by destination $prod:inv(k,t)$horizon(t) o:pk(k,t+1) q:ijJ(K) i:pinv(t) q:ijJ(K) $prod:inv(k,t)$tlast(t) o:ptk(k)$tlast(t) q:ijJ(K) i:pinv(t) q:ijJ(K) *law of motion of capital $prod:kap(k,t)$horizon(t) o:pk(k,t+1) q:(kstoCk(K)*(1-dpRR(K))) o:rK(k,t) q:(KT0(K)) i:PK(k,t) q:(kstoCk(K)) $prod:kap(k,t)$tlast(t) o:ptk(k)$tlast(t) q:(kstoCk(K)*(1-dpRR(K))) o:rK(k,t) q:(KT0(K)) i:PK(k,t) q:(kstoCk(K)) *production $prod:y(k,t) s:0 t:etran(k) va:sigmav(k) o:pd(k,t)$((ord(t) LE ann) and (debt eq 1)) q:dd0(k) a:govt T:prt0(k) P:pref(t) o:px(k,t)$(expt(k) and (ord(t) LE ann) and (debt eq 1)) q:expt(k) a:govt T:prt0(k) P:pref(t) o:pd(k,t)$((ord(t) GT ann) and (debt eq 1)) q:dd0(k) a:govt n:multax m:prt(k) P:pref(t) o:px(k,t)$(expt(k) and (ord(t) GT ann) and (debt eq 1)) q:expt(k) a:govt n:multax m:prt(k) P:pref(t) o:pd(k,t)$((ord(t) LE ann) and (debt eq 0)) q:dd0(k) a:govt1(t) n:multax1(t) m:prt0(k) P:pref(t) o:px(k,t)$(expt(k) and (ord(t) LE ann) and (debt eq 0)) q:expt(k) a:govt1(t) n:multax1(t) m:prt0(k) P:pref(t) o:pd(k,t)$((ord(t) GT ann) and (debt eq 0)) q:dd0(k) a:govt1(t) n:multax1(t) m:prt(k) P:pref(t) o:px(k,t)$(expt(k) and (ord(t) GT ann) and (debt eq 0)) q:expt(k) a:govt1(t) n:multax1(t) m:prt(k) P:pref(t) i:pint(kk,k,t)$(iof(kk,k)+iofm(kK,k)) q:(iof(kk,k)+iofm(kk,k)*(1+tarint0(k))) i:pl(t) q:l0(k) P:pref(t) va: I:rK(k,t)$((ord(t) LE ann) and (debt eq 1)) q:KT0(K) a:govt T:tkk0(k) p:((1+tkk0(k))*pref(t)) va: I:rK(k,t)$((ord(t) GT ann) and (debt eq 1)) q:KT0(K) a:govt n:multax m:tkk(k) p:((1+tkk0(k))*pref(t)) va: I:rK(k,t)$((ord(t) LE ann) and (debt eq 0)) q:KT0(K) a:govt1(t) n:multax1(t) m:tkk0(k) p:((1+tkk0(k))*pref(t)) va: I:rK(k,t)$((ord(t) GT ann) and (debt eq 0)) q:KT0(K) a:govt1(t) n:multax1(t) m:tkk(k) p:((1+tkk0(k))*pref(t)) va: *intermediate demand $prod:intd(kk,k,t)$(iof(kk,k)+iofm(kk,k)) s:armington o:pint(kk,k,t) q:(iof(kk,k)+iofm(kk,k)*(1+tarint0(k))) i:pd(kk,t) q:iof(kk,k) i:pm(kk,t)$((ord(t) LE ann) and (debt eq 1)) q:iofm(kk,k) a:govt T:tarint0(k) p:(1+tarint0(k)) i:pm(kk,t)$((ord(t) GT ann) and (debt eq 1)) q:iofm(kk,k) a:govt n:multax m:tarint(k) p:(1+tarint0(k)) i:pm(kk,t)$((ord(t) LE ann) and (debt eq 0)) q:iofm(kk,k) a:govt1(t) n:multax1(t) m:tarint0(k) p:(1+tarint0(k)) i:pm(kk,t)$((ord(t) GT ann) and (debt eq 0)) q:iofm(kk,k) a:govt1(t) n:multax1(t) m:tarint(k) p:(1+tarint0(k)) *exports $prod:x(k,t)$expt(k) o:pfx(t)$(capflow eq 0) q:expt(k) o:ppfx$(capflow eq 1) q:(expt(k)*pref(t)) i:px(k,t)$expt(k) q:expt(k) *imports $prod:im(k,t)$m0(k) o:pm(k,t)$m0(k) q:(m0(k)+m0(k)*tarfrt0(k)) P:(1+tarfrt(k)) i:pfx(t)$((ord(t) LE ann) and (debt eq 1) and (capflow eq 0)) q:m0(k) a:govt T:tarfrt0(k) i:pfx(t)$((ord(t) GT ann) and (debt eq 1) and (capflow eq 0)) q:m0(k) a:govt n:multax m:tarfrt(k) i:pfx(t)$((ord(t) LE ann) and (debt eq 0) and (capflow eq 0)) q:m0(k) a:govt1(t) n:multax1(t) m:tarfrt0(k) i:pfx(t)$((ord(t) GT ann) and (debt eq 0) and (capflow eq 0)) q:m0(k) a:govt1(t) n:multax1(t) m:tarfrt(k) i:ppfx$((ord(t) LE ann) and (debt eq 1) and (capflow eq 1)) q:(m0(k)*pref(t)) a:govt T:tarfrt0(k) i:ppfx$((ord(t) GT ann) and (debt eq 1) and (capflow eq 1)) q:(m0(k)*pref(t)) a:govt n:multax m:tarfrt(k) i:ppfx$((ord(t) LE ann) and (debt eq 0) and (capflow eq 1)) q:(m0(k)*pref(t)) a:govt1(t) n:multax1(t) m:tarfrt0(k) i:ppfx$((ord(t) GT ann) and (debt eq 0) and (capflow eq 1)) q:(m0(k)*pref(t)) a:govt1(t) n:multax1(t) m:tarfrt(k) *capital exports *$prod:xinv(t)$CAPFLOW * o:pfx(t) q:1000 * i:pinv(t) q:1001 *capital exports *$prod:minv(t)$CAPFLOW * o:pinv(t) q:1000 * i:pfx(t) q:1001 *instantaneous utility at t $prod:u(hh,t) s:sigmau(hh) o:pu(hh,t) q:(c0(hh)) p:pref(t) i:pc(hh,t) q:(sum(k,(cch0(hh,k)+cchm0(hh,k))*p0c(k))) p:pref(t) i:ple(hh,t) q:(leisure(hh)) p:pref(t) *composite consumption good $prod:c(hh,t) s:sigmac(hh) a:armington o:pc(hh,t) q:(sum(k, (cchm0(hh,k)+cch0(hh,k))*(1+vtc0(k)))) p:pref(t) i:pd(k,t)$((ord(t) LE ann) and (debt eq 1)) q:(cch0(hh,k)) a:govt T:vtc0(k) p:p0c(k) a: i:pm(k,t)$((ord(t) LE ann) and (debt eq 1)) q:(cchm0(hh,k)) a:govt T:vtc0(k) p:p0c(k) a: i:pd(k,t)$((ord(t) GT ann) and (debt eq 1)) q:(cch0(hh,k)) a:govt n:multax m:vtc(k) p:p0c(k) a: i:pm(k,t)$((ord(t) GT ann) and (debt eq 1)) q:(cchm0(hh,k)) a:govt n:multax m:vtc(k) p:p0c(k) a: i:pd(k,t)$((ord(t) LE ann) and (debt eq 0)) q:(cch0(hh,k)) a:govt1(t) n:multax1(t) m:vtc0(k) p:p0c(k) a: i:pm(k,t)$((ord(t) LE ann) and (debt eq 0)) q:(cchm0(hh,k)) a:govt1(t) n:multax1(t) m:vtc0(k) p:p0c(k) a: i:pd(k,t)$((ord(t) GT ann) and (debt eq 0)) q:(cch0(hh,k)) a:govt1(t) n:multax1(t) m:vtc(k) p:p0c(k) a: i:pm(k,t)$((ord(t) GT ann) and (debt eq 0)) q:(cchm0(hh,k)) a:govt1(t) n:multax1(t) m:vtc(k) p:p0c(k) a: *government consumption $prod:go(t) a:armington o:pg(t) q:(pub+sum(k,m0(k)*tarfrt0(k))) p:pref(t) i:pd(k,t)$((ord(t) LE ann) and (debt eq 1)) q:g0(k) a:govt T:vtg0(k) P:P0g(k) a: i:pm(k,t)$((ord(t) LE ann) and (debt eq 1)) q:gm0(k) a:govt T:vtg0(k) P:P0g(k) a: i:pd(k,t)$((ord(t) GT ann) and (debt eq 1)) q:g0(k) a:govt n:multax m:vtg(k) P:P0g(k) a: i:pm(k,t)$((ord(t) GT ann) and (debt eq 1)) q:gm0(k) a:govt n:multax m:vtg(k) P:P0g(k) a: i:pd(k,t)$((ord(t) LE ann) and (debt eq 0)) q:g0(k) a:govt1(t) n:multax1(t) m:vtg0(k) P:P0g(k) a: i:pm(k,t)$((ord(t) LE ann) and (debt eq 0)) q:gm0(k) a:govt1(t) n:multax1(t) m:vtg0(k) P:P0g(k) a: i:pd(k,t)$((ord(t) GT ann) and (debt eq 0)) q:g0(k) a:govt1(t) n:multax1(t) m:vtg(k) P:P0g(k) a: i:pm(k,t)$((ord(t) GT ann) and (debt eq 0)) q:gm0(k) a:govt1(t) n:multax1(t) m:vtg(k) P:P0g(k) a: i:pm(k,t) q:(m0(k)*tarfrt0(k)) P:P0g(k) *labour supply $prod:ls(hh,t) o:pl(t)$((ord(t) LE ann) and (debt eq 1)) q:wages(hh) a:govt T:hit0(hh) o:pl(t)$((ord(t) GT ann) and (debt eq 1)) q:wages(hh) a:govt n:multax m:hit(hh) o:pl(t)$((ord(t) LE ann) and (debt eq 0)) q:wages(hh) a:govt1(t) n:multax1(t) m:hit(hh) o:pl(t)$((ord(t) GT ann) and (debt eq 0)) q:wages(hh) a:govt1(t) n:multax1(t) m:hit(hh) i:ple(hh,t) q:netwage(hh) $prod:lu(hh) s:intersub o:plu(hh) q:(sum(t,(c0(hh)*qref(t)*pref(t)))) i:pu(hh,t) q:(c0(hh)*qref(t)) p:pref(t) * household lifetime budget balance $demand:ra(hh) d:plu(hh) q:(sum(t,(c0(hh)*qref(t)*pref(t)))) e:ple(hh,t) q:((leisure(hh)+netwage(hh))*qref(t)) e:pk(k,tfirst) q:(kstoCk(K)) e:ptk(k) q:(-1) r:tkap(k) e:pinv(t) q:(-(-SUM(K,ijJ(K))+(tid0 +sum(k,(id0m(k)+stockm(k)+id0(k)+stock(k))*(vtk0(k)))))*qref(t)) e:pfx(t)$(capflow eq 0) q:(tbal*qref(t)) e:ppfx$(capflow eq 1) q:(tbal*sum(t,qref(t)*pref(t))) e:plu(hh) q:transfer(hh) *government consumption and savings $prod:gol$(debt eq 1) s:0 i:pg(t) q:((pub+sum(k,m0(k)*tarfrt0(k)))*qref(t)) p:pref(t) o:pgl q:(sum(t,((pub+sum(k,m0(k)*tarfrt0(k)))*qref(t)*pref(t)))) $demand:govt$(debt eq 1) d:pgl q:(sum(t,((pub+sum(k,m0(k)*tarfrt0(k)))*qref(t)*pref(t)))) e:plu(hh) q:-transfer(hh) $prod:gol1(t)$(debt eq 0) s:0 i:pg(t) q:((pub+sum(k,m0(k)*tarfrt0(k)))*qref(t)) p:pref(t) o:pgl1(t) q:((pub+sum(k,m0(k)*tarfrt0(k)))*qref(t)) p:pref(t) $demand:govt1(t)$(debt eq 0) d:pgl1(t) q:((pub+sum(k,m0(k)*tarfrt0(k)))*qref(t)*pref(t)) e:plu(hh) q:-tr1(hh,t) *terminal constraint on capital stock $CONSTRAINT:tkap(k) sum(T$TLAST(T+1), INV(k,T+1)/inv(k,t) -kap(k,T+1)/kap(k,t)) =e= 0; $CONSTRAINT:multax$(debt eq 1) gol =e= 1; $CONSTRAINT:multax1(t)$(debt eq 0) gol1(t) =e= 1; $report: V:Y1(k,t) O:Pd(k,t) PROD:Y(k,t) V:K1(k,t) I:pk(k,t) PROD:KAP(k,t) V:LS1(HH,t) i:PLe(hh,t) PROD:LS(HH,t) V:L1(k,t) i:Pl(t) PROD:Y(k,t) v:inv1(k,t) i:pinv(t) PROD:inv(k,t) V:U1(HH,t) O:PU(hh,t) PROD:U(HH,t) V:W1(HH) W:RA(HH) $offtext $sysinclude mpsgeset uk95 *============================================================= * Setting the level values for activities and prices *============================================================= * Activities * xinv.l(t)$CAPFLOW = 0; * minv.l(t)$CAPFLOW = 0; Y.L(k,t) = QREF(T); X.L(k,t) = QREF(T); IM.L(k,t) = QREF(T); kap.L(k,t) = QREF(T); inv.l(k,t) = qref(t); id.L(t) = QREF(T); intd.l(kk,k,t) = QREF(T); C.L(hh,t) = QREF(T); ls.L(hh,t) = QREF(T); go.l(t) = qref(t); U.L(hh,t) = qref(t); lu.l(hh) = 1; RA.L(hh) = c0(hh); * Prices PINv.l(t) = pref(t); * PINv.fx(t)$CAPFLOW * = PINv.l(t); pint.l(kk,k,t) = pref(t); PLE.L(hh,t) = PREF(T); PD.L(k,t) = PREF(T); PM.L(k,t) = PREF(T); PX.L(k,t) = PREF(T); PFX.L(t) = PREF(T); PC.L(hh,t) = PREF(T); PK.L(k,t) = (1+r)*PREF(T); RK.L(k,t) = PREF(T); PL.L(t) = PREF(T); pg.l(t) = pref(t); pu.l(hh,t) = pref(t); plu.l(hh) = 1; Loop(t$tlast(t), tkap.l(k) = qref(t)*kstoCk(K)*(1+gr); ptk.l(k) = pref(t); ); multax.l = 1; debt = 1; tr1(hh,t) = 0; transfer(hh) = 0; *===================================================== * Solve: *===================================================== parameter welfare, pubase; Parameter sumoutb,sumout,growth,growthi,growthl,growthk, invt,sumcap1,suminv1; Parameter sumout_y,growth_y,growth_i, invt_i,sumcap1_k,suminv1_i; parameter summary, sumcap,suminv, growth_b,growthi_b, invt_b, growth_K; parameter growth_b,growthi_b, growth_l,invt_b, growth_K; *uk95.OPTFILE = 1; *OPTION SYSOUT = ON; option mcp = path; *option codex = 1; uk95.workspace = 25; uk95.iterlim = 0; $include uk95.gen solve uk95 using mcp; $exit parameter ty; ty(t,k) = y.l(k,t); display ty; $include uk95.gen uk95.iterlim = 3; solve uk95 using mcp; transfer(hh) = plu.m(hh); tr1(hh,t) = transfer(hh)/sum(tt, pref(tt)*qref(tt)) *pref(t)*qref(t); debt = 0; gol1.l(t)$(debt eq 0) = 1; pgl1.l(t)$(debt eq 0) = pref(t); multax1.l(t)$(debt eq 0) = 1; option mcp = path; uk95.workspace = 25; uk95.iterlim = 0; $include uk95.gen solve uk95 using mcp; *$exit uk95.iterlim = 10000; $include uk95.gen solve uk95 using mcp; option decimals = 4; uk95.iterlim = 10000; pubase(hh) =sum(t,pu.l(hh,t)*u1.l(hh,t)); debt = 1; $setglobal gp_opt1 'set key bottom right' $setglobal gp_opt2 "set title 'Total Output Over Time' " $setglobal gp_opt3 "set xlabel 'Time period in Years'" $libinclude plot ty $setglobal batch yes *$setglobal gp_opt5 'set term gif' *$setglobal gp_opt6 "set output 'out_k.gif'" $setglobal gp_opt7 "set size 0.8,0.8" $setglobal gp_opt8 "set yrange [-100:400]" $setglobal gp_opt9 "set xrange [0:30]" $exit