$Title Mix and Match General Equilibrium with Iceberg Costs

*Edward J. Balistreri, Colorado School of Mines (ebalistr@mines.edu)
*Thomas F. Rutherford, ETH Z\"{u}rich (tom@mpsge.org).
*March 2011
*	This formulation allows for Armington, Krugman, or Melitz
*	trade depending on the user defined subset j(i),k(i),or h(i).

$onempty
Set
        r        countries or regions      /R1*R3/
        f        factors of production     /L1*L3/,
        i        goods                /G1, G2, G3/
	j(i)     Armingtion goods     /G1/,
        k(i)     Krugman goods            /G2/,
        h(i)     Melitz goods                 /G3/;

;
display i,j,k,h;
Alias (r,s),(f,g);

Parameters
        alpha        top level elasticity of substitution      /2.0/,
        a            Pareto shape parameter                    /4.6/,
        b            Pareto lower support                      /0.5/,
        sig_j        industry elasticity of substitution (a+1) /5.6/,
        sig_k        industry elasticity of substitution (a+1) /5.6/,
        sig_h        industry elasticity of substitution       /3.8/,
	esub	     elasticity of substitution in production  /1.0/
        vx0(i,r,s)   arbitrary benchmark export values
        beta(i,r)    expenditure weights 
        gamma(i,f,r) primary factor value shares
        lbar(f,r)    primary factor supply
        ra0(r)       benchmark income
        c0(i,r)      benchmark input cost,
	w0(f,r)	     benchmark wage,
        y0(i,r)      benchmark input supply,
        q0(i,r)      benchmark aggregate quantity,
        p0(i,r)      benchmark price index,
        m0(*,r)      benchmark number of entered firms,
        n0(*,r,s)    benchmark number of operating firms,
        qf0(i,r,s)   benchmark avg firm-level quantity,
        pf0(i,r,s)   benchmark avg firm-level pricing (gross),
        phi0(i,r,s)  benchmark avg productivity
        fc(*,r,s)    bilateral fixed costs,
        delt_fs(*,r) annualized sunk cost,
        nk0(k,r)     benchmark number of (krugman) firms
        fck(k,r)     krugman fixed costs,
	t(i,r,s)     bilateral tariffs 
        tau(i,r,s)   iceberg transport cost factor,
        lambda(i,r,s)  preference weight parameter
        ;

*        Finite variance restriction
Abort$(a le (sig_h - 1))
     "Firm size distribution must have a finite variance. a > sig-1";

*        Setup the benchmark with arbitrary data
t(i,r,s)   = 0;
vx0(i,r,s) = 1;
vx0(i,r,r) = 3;
*        Unit choice
c0(i,r)    = 1;
p0(i,r)    = 1;
w0(f,r)	   = 1;
y0(i,r)    = sum(s, vx0(i,r,s))/c0(i,r);
q0(i,r)    = sum(s, vx0(i,s,r))/p0(i,r);
ra0(r)     = sum(i,q0(i,r)*p0(i,r));
beta(i,r)  = p0(i,r) * (q0(i,r)/RA0(r))**(1/alpha);

*        randomly distribute the factor shares
gamma(i,f,r)=0;
loop(f$(ord(f) ne card(f)),
        gamma(i,f,r) = uniform(0,(1-sum(g,gamma(i,g,r))));
);
gamma(i,f,r)$(ord(f) eq card(f)) = 1-sum(g,gamma(i,g,r));
display gamma;

lbar(f,r)  = sum(i,gamma(i,f,r)*y0(i,r)*c0(i,r));

*---- Melitz model Calibration ----* 
M0(i,r)    = 10;
N0(i,r,r)  = 9;
*     Assume that foreign operation falls off using the following
N0(i,r,s)  = (vx0(i,r,s)/vx0(i,r,r))**2 * N0(i,r,r);
*     Calibrate the sunk cost based on free entry
delt_fs(i,r)= y0(i,r)/M0(i,r) * (sig_h-1)/(a*sig_h);
*     Calibrate the fixed cost based on zero cutoff profit
fc(i,r,s)   = vx0(i,r,s)/(N0(i,r,s)*c0(i,r)) * (a + 1 - sig_h)/(a*sig_h);
pf0(i,r,s) = (vx0(i,r,s)/(N0(i,r,s)*q0(i,s)*p0(i,s)))**(1/(1-sig_h));
qf0(i,r,s) = (p0(i,s)*q0(i,s))*pf0(i,r,s)**(-sig_h);
lambda(i,r,s)= p0(i,s)**(1-sig_h);
phi0(i,r,s)= b * (a/(a+1-sig_h))**(1/(sig_h-1)) * 
            (N0(i,r,s)/M0(i,r))**(-1/a);
*     Calibrated tau (used for all sectors to give us a
*     consistent simulation instrument):
tau(i,r,s) = (1-1/sig_h)*pf0(i,r,s)*phi0(i,r,s)/c0(i,r);
*-----------------------------------*

*---- Krugman model Calibration-----* 
* Assume tau(k,r,s) is given by the melitz calibration
NK0(k,r)   = 10;
fcK(k,r)   = sum(s,vx0(k,r,s))/(sig_k*NK0(k,r)*c0(k,r));
pf0(k,r,s) = tau(k,r,s)*c0(k,r)/(1-1/sig_k);
qf0(k,r,s) = vx0(k,r,s)/(NK0(k,r)*pf0(k,r,s));
lambda(k,r,s)= qf0(k,r,s)/q0(k,s) * (pf0(k,r,s)/p0(k,s))**sig_k;

$ontext
*Note: We could have used the following code to calibrate tau
NK0(k,r)   = 10;
fcK(k,r)   = sum(s,vx0(k,r,s))/(sig_k*NK0(k,r)*c0(k,r));
pf0(k,r,s) = (vx0(k,r,s)/(NK0(k,r)*q0(k,s)*p0(k,s)))**(1/(1-sig_k));
qf0(k,r,s) = (p0(k,s)*q0(k,s))*pf0(k,r,s)**(-sig_k);
lambda(k,r,s)= p0(k,s)**(1-sig_k);
tau(k,r,s) = (1-1/sig_k)*pf0(k,r,s)/c0(k,r);
$offtext
*-----------------------------------*

*---- Armington model Calibration---* 
* Assume tau(j,r,s) is given by the melitz calibration
lambda(j,r,s)=(vx0(j,r,s)/(c0(j,r)*q0(j,s)))**(1/sig_j) * 
            (p0(j,s)/(c0(j,r)))**(-1)  *
             tau(j,r,s)**((sig_j-1)/sig_j);
*-----------------------------------*

display tau;

Positive Variables
        U(r)          Welfare
        E(r)          True cost of living index
        Q(i,r)        Composite Quantity,
        P(i,r)        Composite price index,
        M(h,r)        Number of Entered firms
        N(h,r,s)      Number of Operating firms (varieties)
        NK(k,r)       Number of Krugman firms (varieties)
        QF(*,r,s)     Avg Firm output in s-market
        PF(*,r,s)     Avg Firm (gross) pricing in s-market
        PHI(h,r,s)    Avg Firm productivity 
        c(i,r)        Composite input price (marginal cost),
        Y(i,r)        Composite input supply (output)
        w(f,r)        Primary factor price
        RA(r)         Income
	pi(h,r,s)     Capacity rents;

Equations
        EXPFUN(r)     Unit expenditure function,
        DEM(i,r)      Aggregate demand,
        PRC_h(h,r)    Price index,
        PRC_k(k,r)    Price index,
        PRC_j(j,r)    Price index,
        FE(h,r)       Free entry,
        FEK(k,r)      Free entry,
        ZCP(h,r,s)    Zero cutoff profits
        DEMF(h,r,s)   Firm demand,
        DEMFK(k,r,s)  Firm demand,
        MKUP(h,r,s)   Optimal firm pricing,
        MKUPK(k,r,s)  Optimal firm pricing,
        PAR(h,r,s)    Pareto Productivity
        MKT_h(h,r)    Input market clearance,
        MKT_k(k,r)    Input market clearance,
        MKT_j(j,r)    Input market clearance,
        COST(i,r)     Unit cost functions
        LMKT(f,r)     Primary factor markets
        FINAL(r)      Final demand
        BC(r)         Budget constraint
	Capacity(h,r,s) Capacity constraint M gt N
	;

EXPFUN(r).. 
    (sum(i,beta(i,r)**alpha *P(i,r)**(1-alpha))**(1/(1-alpha)))$(alpha ne 1)
    + prod(i,(P(i,r)/p0(i,r))**beta(i,r))$(alpha eq 1)
    - E(r) =g= 0;

DEM(i,r)..   
    Q(i,r) - RA0(r)*U(r)*(beta(i,r)*E(r)/P(i,r))**alpha =g= 0;
          
PRC_h(h,s).. 
    sum(r,lambda(h,r,s)*N(h,r,s)*PF(h,r,s)**(1-sig_h))**(1/(1-sig_h)) - 
    P(h,s) =g= 0; 

PRC_k(k,s).. 
    sum(r,lambda(k,r,s)*NK(k,r)*PF(k,r,s)**(1-sig_k))**(1/(1-sig_k)) - 
    P(k,s) =g= 0; 

PRC_j(j,s).. 
    sum(r,lambda(j,r,s)**(sig_j) *((1+t(j,r,s))*tau(j,r,s)*c(j,r))**(1-sig_j)
       )**(1/(1-sig_j)) - P(j,s) =g= 0; 

DEMF(h,r,s)..  
    QF(h,r,s) -  lambda(h,r,s)*Q(h,s)*(P(h,s)/PF(h,r,s))**sig_h =g= 0;

DEMFK(k,r,s)..
    QF(k,r,s) -  lambda(k,r,s)*Q(k,s)*(P(k,s)/PF(k,r,s))**sig_k =g= 0;

MKUP(h,r,s)..  
    (1+t(h,r,s))*tau(h,r,s)*c(h,r)/PHI(h,r,s) - (1 - 1/sig_h)*PF(h,r,s) =g= 0;

MKUPK(k,r,s).. 
    (1+t(k,r,s))*tau(k,r,s)*c(k,r)            - (1 - 1/sig_k)*PF(k,r,s) =g= 0;

FE(h,r)..  
    c(h,r)*delt_fs(h,r) - 
    sum(s,(N(h,r,s)/M(h,r))*PF(h,r,s)*QF(h,r,s)*(sig_h-1)/((1+t(h,r,s))*a*sig_h)
	 +pi(h,r,s)) 
    =g= 0; 

FEK(k,r).. 
    c(k,r)*fcK(k,r) - 
    sum(s,PF(k,r,s)*QF(k,r,s)/((1+t(k,r,s))*sig_k)) 
    =g= 0;

ZCP(h,r,s).. 
    c(h,r)*fc(h,r,s) + pi(h,r,s) - 
    (PF(h,r,s)*QF(h,r,s)*(a+1-sig_h))/((1+t(h,r,s))*a*sig_h) 
    =g= 0;

PAR(h,r,s).. 
    PHI(h,r,s) * (N(h,r,s)/M(h,r))**(1/a) -  
    b * (a/(a+1-sig_h))**(1/(sig_h-1)) 
    =g= 0;

MKT_j(j,r).. 
    Y(j,r) - 
    sum(s,tau(j,r,s)*Q(j,s)*
         (lambda(j,r,s)*P(j,s)/((1+t(j,r,s))*tau(j,r,s)*c(j,r)))**(sig_j)
       ) =g= 0;

MKT_k(k,r).. 
    Y(k,r) - 
    NK(k,r)*(fcK(k,r) + sum(s,tau(k,r,s)*QF(k,r,s))) =g= 0;

MKT_h(h,r).. 
    Y(h,r) - (delt_fs(h,r)*M(h,r) +
    sum(s,N(h,r,s)*(fc(h,r,s) + tau(h,r,s)*QF(h,r,s)/PHI(h,r,s)))
             ) =g= 0;

COST(i,r).. 
    c(i,r) - (
    (sum(f,gamma(i,f,r)*(w(f,r)/w0(f,r))**(1-esub))**(1/(1-esub)))$(esub ne 1) +
    prod(f,w(f,r)**gamma(i,f,r))$(esub eq 1)
    )=g=0; 

LMKT(f,r).. 
    lbar(f,r) - 
    sum(i,gamma(i,f,r)*Y(i,r)*(c(i,r)*w0(f,r)/(c0(i,r)*w(f,r)))**esub) =g= 0;

FINAL(r)..  RA0(r)*U(r)*E(r) - RA(r) =g= 0;
        
BC(s)..     RA(s) =e= 
*   Factor income
    sum(f,w(f,s)*lbar(f,s)) +
*   plus tariff revenue
    sum(r,
       sum(j,t(j,r,s)*c(j,r)*tau(j,r,s)*Q(j,s)*
             (lambda(j,r,s)*P(j,s)/((1+t(j,r,s))*tau(j,r,s)*c(j,r)))**(sig_j))
     + sum(k,t(k,r,s)*pf(k,r,s)*qf(k,r,s)* NK(k,r)/(1+t(k,r,s)))
     + sum(h,t(h,r,s)*pf(h,r,s)*qf(h,r,s)*N(h,r,s)/(1+t(h,r,s)))
       );

Capacity(h,r,s).. M(h,r) =g= N(h,r,s); 

Model b_1  /
*          GE          Armington    Krugman      Melitz
*          ---------   ---------    ---------    --------
           expfun.U,
           DEM.P,
                       PRC_j.Q,     PRC_k.Q,     PRC_h.Q,
                                    FEK.NK,      FE.M, 
                                                 ZCP.N,
                                    DEMFK.PF,    DEMF.PF,
                                    MKUPK.QF,    MKUP.QF,
                                                 PAR.PHI,
                       MKT_j.c,     MKT_k.c,     MKT_h.c,
						 capacity.pi,
           COST.Y,
           LMKT.w
           FINAL.E,
           BC.RA/;

*Set the level values and check for benchmark consistency 
Q.l(i,r)    = q0(i,r)   ;
P.l(i,r)    = p0(i,r)   ;
M.l(h,r)    = M0(h,r)   ;
N.l(h,r,s)  = N0(h,r,s) ;
NK.l(k,r)   = NK0(k,r)  ;
QF.l(h,r,s) = QF0(h,r,s);
PF.l(h,r,s) = PF0(h,r,s);
QF.l(k,r,s) = QF0(k,r,s);
PF.l(k,r,s) = PF0(k,r,s);
PHI.l(h,r,s)= PHI0(h,r,s);
c.l(i,r)    = c0(i,r)   ;
Y.l(i,r)    = y0(i,r)   ;
w.l(f,r)    = 1         ;
U.l(r)      = 1         ;
E.l(r)      = 1         ;
RA.l(r)     = RA0(r)    ;

*Set lower bounds to avoid bad function calls:
Q.lo(i,r)    =1e-6;
P.lo(i,r)    =1e-6;
M.lo(h,r)    =1e-6;
N.lo(h,r,s)  =1e-6;
NK.lo(k,r)   =1e-6;
QF.lo(h,r,s) =1e-6;
PF.lo(h,r,s) =1e-6;
QF.lo(k,r,s) =1e-6;
PF.lo(k,r,s) =1e-6;
PHI.lo(h,r,s)=1e-6;
c.lo(i,r)    =1e-6;


b_1.iterlim = 0;
Solve b_1 using MCP;
Abort$(b_1.objval > 1e-6) "Benchmark Replication Failed";