Gams PDF
Gams PDF
Gams PDF
2 1. Introduction to applied general-equilibrium modeling This is a set of notes to introduce you to applied general-equilibrium modeling and software used to analyze applied GE problems. First some general comments about generalequilibrium modeling. There are many models which are portrayed by their authors as general equilibrium. The term assumes different meanings in different fields, so it is probably a good idea to begin with a definition of what this means. When we say general equilibrium, we are normally thinking of models which have the following characteristics. (1) (2) (3) (4) Multiple interacting agents Individual behavior based on optimization Most agent interactions are mediated by markets and prices Equilibrium occurs when endogenous variables (e.g., prices) adjust such that (i) agents, subject to the constraints they face, cannot do better by altering their behavior (ii) markets (generally, not always) clear so, for example, supply equals demand in each market.
General-equilibrium theory in economics is often quite abstract. A usual introductory formulation consists of a set of markets for goods and factors of production. Agents, which are typically labeled consumers and firms, optimize subject to the constraints they face such as technologies and budget constraints. These optimizations then lead to excess demand functions for each good and factor. Equilibrium is then obtaining by finding a set of prices such that all excess demands are zero. General-equilibrium theory is generally focused on abstract issues such as proving that a set of equilibrium prices and hence equilibrium itself exists. While this is an important task, the theorists rarely bother with analyzing what those equilibrium prices are or how they are related to underlying features of the economy such as preferences, technologies and so forth. And it follows that the abstract theory is of little or no use in answering questions about how changes in policies such as taxes or tariffs influence the equilibrium. Some progress can be made in special theoretical models such as the HeckscherOhlin model of international trade. In this model, the direction of trade can be related to underlying technologies and factor endowments, and the effects of policies such as tariffs on welfare and the distribution of income among factor owners (the Stolper-Samuelson theorem) can be derived. Yet even in the analytical Heckscher-Ohlin model, two problems persist. First, the results
3 are qualitative; e.g., they give us the signs of comparative-statics derivatives or tell us that some elasticity is greater than one. But analytical results cannot be much more precise than that. Second, almost all results are only unambiguous in a version of the model in which there are two goods, two factors, two countries and consumers everywhere have identical and homogeneous preferences over goods. Three goods, three factors, three countries or two distinct consumer groups create problems that cause the elegant results of Heckscher-Ohlin to collapse. Applied general-equilibrium modeling is the way around these difficulties, such that the concept of general-equilibrium actually becomes useful for analyzing real economies and real policies. Any number of good, factors, household types, and countries may be included. While the field started out with the assumptions of constant returns to scale and perfect competition in all production activities, we have learned how to incorporate scale economies and imperfect competition. We have learned how to include complex tax structures, public goods, externalities, and rationing constraints such as price controls or quotas that prevent markets from clearing. Naturally, there is a price to be paid from the theorists point of view. We have to assume specific functional forms for preferences, production functions, and so forth. Many parameters of these functions can be drawn from published data or estimated with econometrics, but others remain educated guess work. This exercise draws criticism from both theorists and econometricians alike, but in the end applied GE modeling delivers answers to policy questions, however imprecise those answers might be. What exactly is an applied GE model? It begins by following theory: an economy and the equilibrium conditions for that economy are translated into a mathematical formulation. General equilibrium is then represented as the solution to a well-defined mathematical problem. More specifically, there are two general ways of formulating this mathematical problem. The first is to model the economy as an optimization or programming problem. This tend to be the first way a student of economics would approach the problem, since optimization and optimization techniques are a fundamental part of the theory of the consumer and the theory of the firm. Thus general equilibrium could be thought of as the solution to a big linear or non-linear programming problem, in which some objective function is maximized or minimized subject to a set of constraints. It turns out that representing equilibrium as the solution to an optimization problem becomes awkward when there are several households or countries. What is it that should be optimized? There is no clear objective function to optimize. The second way of approaching the problem follows from formal theory. Individual optimizing behavior and decisions of consumers and firms are embedded in functions describing the agents choices in response to the values of variables facing them. So, for example, we use individual optimization to derive demand and supply functions that describe how consumers and firms will react to prices, taxes, and other variables. Once we have done this, finding general-equilibrium is reduced to finding the solution to
4 a square system of n equations in n unknowns. Individual behavior and optimization are embedded in those n equations. That is the approach we take here. An applied generalequilibrium model is a square system of n equations in n unknowns that is formulated in a fashion that permits a numerical solution by computational techniques, finding the actual values of the endogenous variables for given values of exogenous parameters. Endogenous variables include outputs, prices, trade volumes and so forth. Exogenous parameters include preferences, technologies, factor endowments and so forth. As we will see shortly, the software we use permits a very important generalization of this notion of solving a square system of equations. For many economic problems, equilibrium may involve some goods not being produced or some possible trade links not being actively used. We really would like to formulate the general-equilibrium model as a system of weak inequalities, with each inequality associated with a particular non-negative variable such as a price or quantity. If a particular weak inequality holds as an equation, then the associated variable is strictly positive. If it holds as a strict inequality, then the associated variables is zero. An example of this for a competitive model is the requirement that, in equilibrium, the profits from a given production activity must be non-positive. The associated variable to this inequality is the output level of that activity. In equilibrium, the weak inequality may hold as a strict equality, in which case there is positive output. If it holds as a strict inequality, (potential) profits from that production activity are negative, and no output is produced. Thus we will formulate a general equilibrium model as a square system of weak inequalities, each with an associated non-negative variable. This is referred to as a complementarity problem in mathematics, and the associated variables are referred to as complementary variables. Software other than that used here (GAMS and MPS/GE) generally do not allow the user to solve complementarity problems, greatly limiting model formulation and the range of comparative statics questions analyzed by the modeler.
5 2. Steps in Applied General-Equilibrium Modeling Here are the normal steps in applied general-equilibrium modeling. (1) Specify dimensions of the model. Numbers of goods and factors Numbers of consumers Numbers of countries Numbers of active markets
(2)
Chose functional forms for production, transformation, and utility functions; specification of side constraints. Includes choice of outputs and inputs for each activity Includes specification of initially slack activities
(3)
Construct micro-consistent data set. Data satisfies zero profits for all activities, or if profits are positive, assignment of revenues Data satisfies market clearing for all markets
(4)
Calibration parameters are chosen such that functional forms and data are consistent. By consistent we mean that the data represent a solution to the model
(5)
(6)
Counter-factual experiments.
Steps (3) and (4) are not strictly speaking necessary. The software can be used for pure simulation analysis, in which there initially is no data. However, in learning the software, it is very valuable to start by writing down a micro-consistent data set and then transform that into code such that the solution to the model reproduces the initial data.
6 Lets now turn to a concrete example of a simple general-equilibrium model. Example M1: 2-good, 2-factor closed economy with fixed factor endowments, one representative consumer. Take a very simply economy, two sectors (X and Y), two factors (L and K), and one representative consumer (utility function W). L and K are in inelastic (fixed) supply, but can move freely between sectors. px, py, pl, and pk are the prices of X, Y, L and K, respectively. I is consumers income and pw will be used later to denote the price of one unit of W. These are the equations of the model. (1) X X ( Lx , K x ) Y Y ( Ly , K y ) L Lx L y K Kx K y W W(X, Y ) I pl L p k K px X p y Y
(2)
(3)
(4)
(5)
(6)
___________________________________________________________ How do we find equilibrium, which in this case is a set of prices, and factor allocations to the two sectors? Many economists first reaction would be to formulate equilibrium as the solution to an optimization problem. Equilibrium could be solved for by a constrained optimization problem: Max (5) subject to the constraints (1), (2), (3), (4), and (6). While this would work, the usefulness of this approach breaks down quickly as the model becomes more complicated. Suppose, for example, there are two different consumer types with different preferences and different factor endowments. What do we maximize? You could maximize the utility of one consumer subject to an arbitrary fixed level of the utility of the other consumer, exploiting the first theorem of welfare economics. But unless you are extraordinarily lucky, the solution will give each consumer an implied expenditure level which is not equal to the consumers income. Thus there is an inconsistency in the proposed solution.
7 The alternative approach is to convert the problem to a system of equations, and solve that system. First, solve the underlying cost minimization problems for producers and consumers, so that individual optimizing behavior is embedded in the model. In the present model, we want to solve for cost functions for each sector, which embody efficient and optimizing cost-minimizing behavior. These give the minimum cost of producing a good at given factor prices. Similarly, we can solve for a cost function for the consumer, commonly called an expenditure function, which gives the minimum cost at given commodity prices of buying one unit of utility or welfare (W). These functions are given as follows.
Unit cost functions for X and Y Unit cost (expenditure) function for W
The next crucial step is provided by theory, Shepards lemma in particular. This result, which in turn relies on the envelope theorem, states that the partial derivatives of these functions are quantities. In particular, we have: cx cxpl X producers demand for labor per unit of output (similarly for Y) pl cx cxpk X producers demand for capital per unit of output (similarly for Y) pk e cxpx Consumers demand for X per unit of utility (similarly for Y) px
Now we are in a position to specify general equilibrium as the solution to a square system of 9 weak inequalities in 9 unknowns. These are as follows:
Non-positive profits for X Non-positive profits for Y Non-positive "profits" for W Supply Demand for X Supply Demand for Y Supply Demand for W Supply Demand for L Supply Demand for K Income balance
cx(pl, pk) px cy(p l, pk) py e(px, py) pw X epx(px, py)W Y epy(px, py)W W I / pw L* cxwX + cywY K* cxrX + cyrY I = plL* + pkK*
These weak inequalities can be solved for the unknowns X, Y, W, px, py, pw, pl, pk, and I. Note that these inequalities are of three types, and this is generally true of a very large class of general-equilibrium models. These three types are: Zero-profit conditions, inequalities (1)-(3) in the above example. Market clearing conditions, inequalities (4)-(8) in the above example Income balance, equation (9) in the above example.
Formulating equilibrium as a complementarity problem requires that each inequality is associated with a particular variable. A good way to intuit the correct association is to think about the economics of what must be true if a particular weak inequality holds as a strict inequality. If a zero profit conditions holds as a strict inequality in equilibrium, profits for that activity are negative, so that good will not be produced (strictly speaking that activity will not used; one good could be produced with several alternative activities). Thus the complementary
9 variable to a zero-profit condition is a quantity, the activity level. If a market-clearing condition holds as a strict inequality, supply exceeds demand for that good or factor in equilibrium so its price must be zero. Thus the complementary variable to a market clearing equation is the price of that good or factor. The complementary variable to an income balance equation is just the income of that agent. The correct association of inequalities and unknowns in the square system is thus: Inequality (1) (2) (3) (4) (5) (6) (7) (8) (9) Non-positive profits for X Non-positive profits for Y Non-positive "profits" for W Supply Demand for X Supply Demand for Y Supply Demand for W Supply Demand for L Supply Demand for K Income balance cx(pl, pk) px cy(pl, pk) py e(px, py) pw X epx(px, py)W Y epy(px, py)W W I / pw L* cxwX + cywY K* cxrX + cyrY I = plL* + pkK* Complementary Variable X Y W px , py pw pl pk I
Now lets turn to the issue of starting with a micro-consistent data set, a set of numbers which are in fact consistent with the above problem formulation. That is, lets start with a set of numbers that satisfy zero profits, market clearing, and income balance. The above problems can be thought of as consisting of three production activities, X, Y, and W, and four markets, X, Y, L, and K. In what follows, we will represent the initial data for this economy by a rectangular matrix. This matrix is related to the concept of a SAM social accounting matrix, which is discussed later. But the term SAM has been used in a rather different sense, so we will just refer to our rectangular matrix as a MCM micro-consistency matrix. In the present example, there are two types of columns in the rectangular MCM, corresponding to production sectors and consumers. In the model outlined above, there are three production sectors (X, Y and W) and a single consumer (CONS). Rows correspond to markets in
10 the present example. Complementary variables are prices, so we have listed the price variables on the left to designate rows. In the MCM, there are both positive and negative entries. A positive entry signifies a receipt (sale) in a particular market. A negative entry signifies an expenditure (purchase) in a particular market. Reading down a production column, we then observe a complete list of the transactions associated with that activity. Here is our matrix of initial values. Production Sectors Consumers Row sum 0 0 0 0 0
Markets | X Y W | CONS --------------------------------------------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -75 -25 | 100 --------------------------------------------------------------------------------------Column sum 0 0 0 0
A rectangular MCM is balanced or micro-consistent when row and column sums are zeros. Positive numbers represent the value of commodity flows into the economy (sales or factor supplies), while negative numbers represent the value of commodity flows out of the economy (factor demands or final demands). With this interpretation, a row sum is zero if the total amount of commodity flowing into the economy equals the total amount of commodity flowing out of the economy. This is market clearance, and one such condition applies for each commodity in the model. Columns in this matrix correspond to production sectors or consumers. A production sector column sum is zero if the value of outputs equals the cost of inputs. A consumer column is balanced if the sum of primary factor sales equals the value of final demands. Zero column sums thus indicate zero profits or product exhaustion in an alternative terminology. Finally, we emphasize that the numbers of the matrix are values, prices times quantities. The modeler is free as to how to interpret these as prices versus quantities. A good practice is to choose units so that as many things initially are equal to one as possible. Prices can be chosen as one, and representative quantities for activities can be chosen such that activity levels are also equal to one (e.g., activity X run at level one produces 100 units of good X). In the case of taxes, both consumer and producer prices cannot equal one of course, a point we will return to in a later section.
11 Now we are in a position to adopt functional forms and write an actual GAMS program to solve this model. First, we specify this general-equilibrium model as an MCP, writing out all the functions. We use very simple Cobb-Douglas functions for the three activities. The share parameters for the functions are given in the data matrix above. Goods in the utility function get equal shares of 0.5. X is capital intensive with capital having a share of 0.75 and labor a share of 0.25. Y is labor intensive with the opposite ordering of shares. While we will not go into detail about GAMS syntax here, a few final points with respect to the actual program follows. (1) The opening line $TITLE is not necessary, but used to the model in the listing (output) file. $ONTEXT.....$OFFTEXT is a way of designating a block of comments, to be ignored by GAMS. In this case, we put our data matrix inside this block, meaning it is not actually used in the computation. A text line can also be preceded by a *. GAMS ignores any line beginning with a *. We declare the parameter names, then assign them values (note where semi-colons do and do not go). Next we declare positive variables and then equation names. We write out the equation names in the syntax shown [equation name], then the equation itself ending with a semicolon. Note the use of the reference quantities such as 100, 75 etc. in the equations. This will ensure that the activity levels will be X = Y = W = 1 in the initial solution to the model. Note that GAMS was written to use greater-than-or-equal-to syntax (=G=). Also note that we have avoided having variables in denominators, since if a variable (even temporarily during the execution of the algorithm) has a value of zero, this causes a divided by zero problem and may crash the solver. Then the model is specified, and we chose a numeraire (recall from theory that only relative prices are determined). Here we choose utility as the numeraire, so that factor prices are then real values in terms of utility. The notation is PW.FX, FX for fixed. Before the solve statement, we are going to help the solver by giving starting values for the variables. The syntax is, for example X.L, where the L stands for level. Default values are zero, and in non-linear problems it is very helpful and indeed sometimes necessary to help the solver with some initial guesses. We constructed this problem
(2)
(3) (4)
(5)
(6)
(7)
(5)
12 knowing the answer, so I give those values as .L values. (6) Finally, the solve statement.
Now we are ready to go. After the first solve statement, we do two counterfactual experiments. The first sets a tax of 0.50 on the inputs to X production. Then we have a second solve statement. Finally, we remove the tax and double the labor endowment of the economy. TX is a parameter which sets the tax, and LENDOW is a multiplier on the initial labor endowment.
13 $TITLE Model M1_MCP: Closed 2x2 Economy - An Introduction to the Basics $ONTEXT This is the exact same model as M1_MPS.GMS but uses the MCP format. Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -75 -25 | 100 -----------------------------------------------------$OFFTEXT PARAMETERS TX LENDOW TX = 0; LENDOW = 1; POSITIVE VARIABLES X Y W PX PY PW PL PK CONS; EQUATIONS PRF_X Zero profit for sector X PRF_Y Zero profit for sector Y PRF_W Zero profit for sector W (Hicksian welfare index) MKT_X MKT_Y MKT_L MKT_K MKT_W Supply-demand Supply-demand Supply-demand Supply-demand Supply-demand balance balance balance balance balance for for for for for commodity X commodity Y primary factor L primary factor L aggregate demand Ad-valorem tax rate for X sector inputs Labor endowment multiplier;
14 I_CONS * PRF_X.. PRF_Y.. PRF_W.. * MKT_X.. MKT_Y.. MKT_W.. MKT_L.. MKT_K.. * I_CONS.. Income definition for CONS; Zero profit inequalities 100 * PL**0.25 * PK**0.75 * (1+TX) =G= 100*PX; 100 * PL**0.75* PK**0.25 =G= 100*PY; 200 * PX**0.5 * PY**0.5 =G= 200*PW; Market clearance inequalities 100 * X =G= 100 * W * PX**0.5 * PY**0.5 / PX; 100 * Y =G= 100 * W * PX**0.5 * PY**0.5 / PY; 200 * W =E= CONS / PW; 100 * LENDOW =G= 25 * X * PL**0.25 * PK**0.75 / PL + 75 * Y * PL**0.75 * PK**0.25 / PL; 100 =G= 75 * X * PL**0.25 * PK**0.75 / PK + 25 * Y * PL**0.75 * PK**0.25 / PK; Income balance equations CONS =E= 100*LENDOW*PL + TX*100*X*PL**0.25*PK**0.75;
MODEL ALGEBRAIC /PRF_X.X, PRF_Y.Y, PRF_W.W, MKT_X.PX, MKT_Y.PY, MKT_L.PL MKT_K.PK, MKT_W.PW, I_CONS.CONS /; * Chose a numeraire (not necessary)
X.L=1; Y.L=1; W.L=1; PX.L=1; PY.L=1; PK.L=1; PL.L=1; CONS.L=200; SOLVE ALGEBRAIC USING MCP; * Solve the counterfactuals:
This file is saved in the relevant directory as M1_MCP.GMS, although you can use any name you want, it doesnt have to correspond to the model name. At the DOS prompt, >, type GAMS M1_MCP. This command runs the model. The output or listing file will automatically be written to the same directory, with name M1_MCP.LST. In the listing file, we will see the following information, along with a statement that the solution is normal and optimal. We will not go into a long explanation here, but rather just focus on the solution values. The list of 1.000 indicates we successfully reproduced our benchmark data as an equilibrium, since we chose units such that this would be the case.
16 LOWER ---------------------------EQU EQU EQU EQU EQU EQU EQU EQU EQU PRF_X PRF_Y PRF_W MKT_X MKT_Y MKT_L MKT_K MKT_W I_CONS . . . . . -100.000 -100.000 . . LEVEL . . . . . -100.000 -100.000 . . UPPER +INF +INF +INF +INF +INF +INF +INF . . MARGINAL 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 200.000
Zero profit for sector X Zero profit for sector Y Zero profit for sector W (Hicksian welfare index) Supply-demand balance for commodity X Supply-demand balance for commodity Y Supply-demand balance for primary factor L Supply-demand balance for primary factor L Supply-demand balance for aggregate demand Income definition for CONS LOWER LEVEL 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 200.000 UPPER +INF +INF +INF +INF +INF 1.000 +INF +INF +INF MARGINAL . . . . . EPS . . .
----------------------------
X Y W PX PY PW PL PK CONS
. . . . . 1.000 . . .
Now lets look at the results for our first counterfactual, in which we place a 50% tax on the inputs to X production. ************** counterfactual: tax on X inputs LOWER ---------------------VAR VAR VAR VAR VAR VAR VAR X Y W PX PY PW PL . . . . . 1.000 . LEVEL 0.845 1.147 0.985 1.165 0.859 1.000 0.903 UPPER +INF +INF +INF +INF +INF 1.000 +INF MARGINAL . . . . . -16.412 .
We see that X production decreases, Y production increases, and welfare falls due to the distortionary nature of the tax, even though the tax revenue is redistributed back to the consumer. There is also a redistribution of income between factors. The relative price of capital, the factor used intensively in X falls, and the relative price of labor rises as resources are shifted to Y production. In the second counterfactual, we remove the tax, and double the labor endowment of the economy. ***************counterfactual: double labor endowment (zero tax) LOWER ---------------------------VAR VAR VAR VAR VAR VAR VAR VAR VAR X Y W PX PY PW PL PK CONS . . . . . 1.000 . . . LEVEL 1.189 1.682 1.414 1.189 0.841 1.000 0.707 1.414 282.843 UPPER MARGINAL
+INF . +INF . +INF . +INF . +INF . 1.000 6.617E-11 +INF . +INF . +INF .
Here we see a relative shift to Y, the good using labor intensively, although X production also rises. The price of X rises relative to Y. The real price of capital, now the scarce factor, rises, and the real price of labor falls. Although labor has a 50% income share initially, doubling labor supply increases welfare by less than 50% (it increases W by 41.4%) due to diminishing returns from the presence of the fixed factor capital.
18 3. The MPS/GE subsystem of GAMS GAMS now include a higher-level language, written by Rutherford, called MPS/GE, which stands for mathematical programming system for general equilibrium. MPS/GE uses the MCP solver in GAMS. This higher-level language permits extremely efficient shortcuts for modelers, allowing us to concentrate on economics rather than coding. There are several great features of MPS/GE. First, the program has routines for calibrating and writing all constant-returns CES and CET functions, up to three levels of nesting. All the modeler has to do is to specify the nesting structure, substitution elasticities in each nest and a representative point on the function, consisting of output quantities, input quantities and prices. This point and price vector uniquely determine the function, and MPS/GE then generates the cost function (or expenditure function). This is not that time and error saving in the simple simulation models of this book, but it is a wonderful feature for larger models. Second, and closely related, the form of the data required to specify a CES/CET function is exactly the data modelers have, so there is a swift and easy move from an accounting matrix as described in the previous appendix to the calibration of the model. Third, a lot of market-clearing and income-balance equations are written automatically by MPS/GE so the modeler doesnt have to worry about doing so. Fourth, and closely related, a lot of errors that can occur when a modeler writes out his or her equations cannot occur in MPS/GE. If there is a tax or markup, for example, the revenues must be assigned to some agent and will be allocated automatically to that agent by the income-balance properties of the coding. I once refereed a paper in which the author claimed to have some weird numerical result. It turned out that the modeler had a tax, but forgot to put the tax revenue in the representative agents income balance equation. That cannot happen in MPS/GE. In short, MPS/GE automatically checks for and ensures many of the product-exhaustion and income-balance requirements discussed in the previous section. In this appendix, I am going to give a short and superficial introduction to the MPS/GE subroutine of GAMS. I am going to use exactly the same problem as in the previous appendix, so that you can see the connection. First, a few key words. SECTOR (ACTIVITY) Production activities that convert commodity inputs into commodity outputs. The variable associated with a sector is the activity level. COMMODITY (MARKETS) A good or factor. The variable associated with a commodity is its price, not its quantity.
19 CONSUMERS Individuals who supply factors and receive tax revenues, markups, and pay subsidies. In imperfectly competitive models, firm owners can be designated as consumers. A government that receives tax revenue and buys public goods is also designated as a consumer. The variable associated with a consumer is income from all sources. AUXILIARY Additional variables, such as markup formulae or taxes with endogenous values which are functions of other variables such as prices and quantities. Please note the spelling of auxiliary: mistakes cause MPS/GE to crash, and you wont know why. CONSTRAINT An equation that is typically used to set the value of an auxiliary variable. In these appendix programs, constraint equations will be used to set the values of markups, which are auxiliary variables. Here is what an MPS/GE program, embedded in a GAMS file, looks like, where the model name is M1_MCP. ______________________________________________________________ GAMS statements such as declaring sets, parameters, parameter values, etc. **** now control is passed to the MPS/GE subsystem **** $ONTEXT [this tells the GAMS compiler to ignore what follows, but the MPS/GE compiler will recognize the model statement that follows and will begin to pay attention]
$MODEL: M1_MCP Declaration of sectors, commodities, consumers, auxiliary variables Production Blocks Demand Blocks Constraint equations $OFFTEXT [control is passed back to GAMS]
20 **** now we are back in GAMS **** $SYSINCLUDE MPSGESET M1_MCP GAMS statements such as setting starting values of variables, other parameter values, etc. $INCLUDE M1_MCP.GEN SOLVE M1_MCP USING MCP; GAMS statements processing output ______________________________________________________________ Below, we formulate exactly the same problem introduced above using MPS/GE. We present the file M1_MCP.GMS and then discuss its details.
21 $TITLE $ONTEXT This is the exact same model as M1_MCP.GMS but uses the MPS/GE format. Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -75 -25 | 100 -----------------------------------------------------$OFFTEXT PARAMETERS TX LENDOW TX = 0; LENDOW = 1; $ONTEXT $MODEL:M1_MPS $SECTORS: X Y W $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS $PROD:X s:1 O:PX I:PL ! Activity level for sector X ! Activity level for sector Y ! Activity level for sector W (Hicksian welfare index) ! ! ! ! ! Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L primary factor K welfare (expenditure function) Model M1_MPS: Closed 2x2 Economy - An Introduction to the Basics
A:CONS T:TX
22 I:PK $PROD:Y s:1 O:PY I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK $OFFTEXT $SYSINCLUDE mpsgeset M1_MPS PW.FX = 1; $INCLUDE M1_MPS.GEN SOLVE M1_MPS USING MCP; * Solve the counterfactuals Q:75 Q:100 Q:75 Q:25 Q:200 Q:100 Q:100 Q:200 Q:(100*LENDOW) Q:100 A:CONS T:TX
TX = 0.5; LENDOW = 1; $INCLUDE M1_MPS.GEN SOLVE M1_MPS USING MCP; TX = 0; LENDOW = 2; $INCLUDE M1_MPS.GEN SOLVE M1_MPS USING MCP;
The terminology here is a bit confusing, since MPS/GE takes the information in a production block and generates a cost function, not a production function. But the variable complementary with a production block (cost function) is an activity level. Lets take an example from the above program, adding the price field (discussed shortly). $PROD:Y s:1 O:PY I:PL I:PK Q:100 Q: 75 Q: 25 P:1 P:1 P:1
First line Name of activity (Y), value of substitution (here s:1) and transformation elasticities if there are several outputs. Default elasticity of substitution is 0 (not 1!). First column Names of commodity outputs (O:) and inputs (I:). Second column Reference commodity quantities (Q:) used for calibration. Default = 1 if none specified. Third column Reference commodity prices (P) used for calibration. Default = 1 if none specified, which is why they are omitted in the program above. MPS/GE then takes this information to construct a cost function and, as a feature of CES functions, it is globally defined by a single reference point. Think of putting an isoquant labeled 100 units of output, with elasticity of substitution 1, though input points L = 70, K = 30, with slope PL/PK = 1. That is what MPS/GE does for you. In this simple case, it constructs the cost function: 100*(PL**.75)*(PK**.25) =G= 100*PY; The saving from using MPS/GE might not seem like a big deal, but believe me with many inputs, different prices for all inputs, and an elasticity of substitution of 3.5, it is a huge saving indeed. One example of the treatment of taxes (others will follow later, including those with endogenous rates) is in the production block for X.
24
The A field means assign the revenue from tax TX to the agent CONS. Read it as the statement assign to agent CONS the revenue from tax rate TX on inputs L and K. A utility function is also represented by a production block; that is, utility is a good which is produced from commodity inputs (including possibly factor inputs such as leisure). Here is the utility function (W for welfare), in which utility (good PW) is produced from inputs of X and Y. MPS/GE constructs the underlying expenditure (cost) function. $PROD:W s:1 O:PW I:PX I:PY
A consumers income constraint is also represented by a block in this case called a demand block. In what follows, the consumer demands the utility good PW (the D field), and receives income from endowments (the E fields) of labor and capital. MPS/GE automatically handles tax revenue or subsidy payments in the background, adding or subtracting them to the consumer's endowment income. $DEMAND:CONS D:PW E:PL E:PK
MPS/GE also automatically looks after the market clearing conditions without the modeler having to worry about specifying these additional equations. 4. Example of how the Q and P fields are used to construct the underlying cost function. All constant returns CES and CET functions can be completely characterized by a single point consisting of (1) input quantities (2) output quantities (3) input and output prices, and (4) the elasticity of substitution or transformation (there may be several levels of substitution elasticities).
25 MPS/GE constructs the underlying cost function from such a single observation. It is particularly important to specify the reference prices correctly. Consider the two production blocks: $PROD: X s:1 O:PX Q:100 P:1 I:PL Q: 25 P:1 I:PK Q: 75 P:1 $PROD: X s:1 O:PX Q:100 P:1 I:PL Q: 25 P:2 I:PK Q: 75 P:0.667 These are both Cobb-Douglas production functions that can produce 100 X from inputs of 25 labor and 75 capital, and in each case the value of the inputs equals the value of the output. But the isoquant has a different slope through that input combination in the two cases: the marginal rate of substitution in the first case is one, but 3 in the second case. Thus these are not the same technologies. Later, with various taxes, it is important to divide values into price and quantity components when all prices cannot be normalized to one. Consider the following two production blocks. $PROD: X s:1 O:PX Q:100 P:1 I:PL Q: 25 P:1 I:PK Q: 75 P:1 $PROD: X s:1 O:PX Q:100 P:1 I:PL Q: 50 P:0.5 I:PK Q: 75 P:1 In both cases, the values of inputs and output are the same, and would appear the same in the data matrix. But these are not the same functions, the first being a clearly more efficient technology than the second. While both will have the same share parameters on L and K (0.25 and 0.75 respectively), the first technology will have a higher multiplicative efficiency parameter scaling up the output from given inputs (or scaling down the cost of output at given factor prices). MPS/GE will automatically calculate this scaling parameter. More will be said about this when we get to an example with taxes in the benchmark data shortly.
26 5. Vector syntax for GAMS and MPS/GE. GAMS has some features that streamline the formulation of the computer code, features that are immensely useful in large dimension problems in particular. We cannot go through all the features of GAMS syntax here, students must rely on the GAMS manual itself. But we can show you what these features are and how they are used. First, actual numbers need not appear in MCP program equations or in MPS/GE production and demand blocks.. These can be specified somewhere else in the program or indeed read from external files. Second, set notation can be used when convenient, as in cases where there are many goods, factors, countries or consumers. Combining these two features, data can be specified in an array or table, and read into the computation program in a straightforward way. In what follows, we rewrite our basic model from above using these features. We present first the MPS/GE version and then the MCP version for completeness. The program begins with the GAMS key word TABLE. Now our micro-consistency matrix is actually going to be used directly in the program to load the values of variables and parameters. Then we use the GAMS key word SET. We use two sets here, the set of goods (X, Y) and the set of factors (L, K). ALIAS is a GAMS key word that allows two different designators for a given set. We then declare parameters, and after that parameter assignments are used to extract the data from the TABLE. Following these assignments of data to parameters, we use a DISPLAY statement, which will write out the values of the parameters in the listing file, so we can do a quick check that the assignments are correct. Again, you should consult the GAMS manual for a much more complete description of these operations and definitions (for example the use of when referring to a specific element of a table or set; e.g., BENCH(I, W)). The MPS/GE block follows. Note the absence of any numbers. Consider the production block: $PROD:Z(I) s:1 O:PC(I) I:PF(F) Q:Z0(I) Q:FD0(F,I)
A:CONS
T:T(I)
Two production (cost) functions for two goods using two factors with different factor intensities and different tax rates across sectors are specified in this extremely parsimonious way. Following the MPS/GE version, we present the MCP version of the basic model. The share parameters for the Cobb-Douglas functions are calculated from the data (ALPHA, BETA). Note also the use of GAMS key words SUM (sum of) and PROD (production of).
27 Note also the use of the alternative set designators, in CMKET(I), for example. If we have an equation for market I = X, for example, GAMS does not permit us to sum over all values of I on the right-hand side. But we can sum over the alias J, which is what we do. In the counterfactuals, note again the use of quotation marks to designate a particular member of a set.
*This is the exact same model as M1_MPS.GMS but uses vector syntax. TABLE BENCH(*,*) X Y W L K SET I F X 100 -40 -60 Benchmark financial flows (e.g. an input-output table) Y 100 -60 -40 W -100 -100 200 CONS -200 100 100; /X, Y/, /L, K/;
ALIAS (I,J), (F,FF); PARAMETER Z0(I) FD0(F,I) C0(I) E(F) T(I) W0 Benchmark sectoral output, Benchmark factor demands, Benchmark consumption demand, Factor endowments, Sectoral ad-valorem tax rate, Benchmark total consumption;
* Extract data from the original format into model-specific arrays: Z0(I) FD0(F,I) C0(I) W0 E(F) T(I) = = = = = = BENCH(I,I); -BENCH(F,I); -BENCH(I,"W"); SUM(I, C0(I)); BENCH(F,"CONS"); 0;
29 $SECTORS: Z(I) W $COMMODITIES: PW PC(I) PF(F) $CONSUMERS: CONS $PROD:Z(I) s:1 O:PC(I) I:PF(F) $PROD:W s:1 O:PW I:PC(I) ! Commodity production index ! Welfare index ! Utility price index ! Commodity price index ! Factor price index ! Representative consumer Q:Z0(I) Q:FD0(F,I) Q:W0 Q:C0(I) Q:W0 Q:E(F)
A:CONS
T:T(I)
$OFFTEXT $SYSINCLUDE mpsgeset M1_VEC PW.FX = 1; $INCLUDE M1_VEC.GEN SOLVE M1_VEC USING MCP; * Solve the counterfactuals:
T("X") = 0.5; $INCLUDE M1_VEC.GEN SOLVE M1_VEC USING MCP; E("L") = 2 * E("L"); T(I) = 0; $INCLUDE M1_VEC.GEN SOLVE M1_VEC USING MCP;
30 * Present the MCP version for the sake of completeness: ALPHA(F,I) BETA(I) Factor input benchmark value share Consumption value share;
PARAMETER
ALPHA(F,I) = FD0(F,I) / SUM(FF, FD0(FF,I)); BETA(I) = C0(I) / W0; EQUATIONS PROFIT(I) CMKT(I) FMKT(F) PRF_W MKT_W I_CONS PROFIT(I).. PRF_W.. CMKT(I).. MKT_W.. FMKT(F).. I_CONS.. Zero profit condition Commodity market clearance Factor market clearance Zero profit for aggregate consumption Market clearance for aggregate consumption Income = factor earnings plus taxes;
(1+T(I)) * PROD(F, PF(F)**ALPHA(F,I)) =E= PC(I); PROD(I, PC(I)**BETA(I)) =E= PW; Z0(I) * Z(I) =E= C0(I) * W * PROD(J, PC(J)**BETA(J)) / PC(I); W0 * W =E= CONS / PW; E(F) =E= SUM(I, FD0(F,I) * Z(I) * PROD(FF, PF(FF)**ALPHA(FF,I))) / PF(F); CONS =E= SUM(F, PF(F) * E(F)) + SUM(I, T(I) * Z0(I) * Z(I) * PROD(F, PF(F)**ALPHA(F,I)) );
MODEL ALGEBRAIC /PROFIT.Z, PRF_W.W, CMKT.PC, FMKT.PF, MKT_W.PW, I_CONS.CONS/; E("L") = 100; T(I) = 0; SOLVE ALGEBRAIC USING MCP; E("L") = 100; T("X") = 0.5; SOLVE ALGEBRAIC USING MCP; E("L") = 2*E("L"); T(I) = 0; SOLVE ALGEBRAIC USING MCP;
In this chapter, we will introduce additional features that are commonly encountered and used in applied situations. Each feature is introduced one at a time to the basic two-good closedeconomy model of the previous section. Obviously, models of real economies will require the modeler to use many of these features simultaneously, but considering them one by one may be a quicker avenue to understanding each building block than attempting to understand complex, multi-sector models all at one go. All the models in this chapter are two-good, closed-economy models. To make each feature as transparent as possible, no taxes are present in the benchmark data. Taxes in the initial benchmark data and how to model those are introduced in chapter 3. Here are the model numbers, with a short description of the features added. M2X denotes Chapter 2, model number X.
two goods, two factors, one household (same as M1_MPS.GMS) introduces intermediate inputs and nesting introduces joint production introduces the use of specific factors use of an initially slack activity (e.g., modeling tax avoidance) introduces a labor supply or labor/leisure choice activity two forms of labor supply, such as to formal/informal sectors two households with different preferences and endowments introduces Stone-Geary (LES) preferences to model non-homothetic demand
We will not go through the first model again, but simple include it for completeness in this chapter under a name consistent with the full set of models. You could use it to try some experiments.
2 Exercises: (1) Try deliberately introducing errors into the specification (such as changing the quantity fields, or adding price fields not equal to 1) and see that the benchmark data is not replicated as a solution. Suppose that we want to interpret the value of X sector output as 50 units at a price of px = 2. Rewrite the MPS/GE file accordingly. Using a standard micro text which covers CES functions, try to verify that the cost functions and the factor demand equations (using Shepards lemma) are correct.
(2)
(3)
Model M22 We begin with model M22, which introduces intermediate goods, and a simple CES nesting notation that permits the modeler to specify different elasticities of substitution between different groups of inputs. This model is shown below. X and Y sectors each use the other sectors output as an input, so that each sector has three inputs. With three inputs, there may be different elasticities of substitution between different pairs of these inputs. Consider the production block for the Y sector. $PROD:Y s:0.75 O:PY I:PX I:PL I:PK va:1 Q:120 Q: 20 Q: 60 Q: 40
va: va:
This specifies a two-level nesting structure. Labor and capital are combined in the both nest with an elasticity of substitution of 1 (va:1). We use VA to denote value added although this is not required and just a could be used. The important thing is the syntax used to specify the structure. Think of the inputs denoted with VA as combined to produce a composite input, in this case termed value added. The top level of the CES function specifies an elasticity of substitution of 0.75 (s:0.75) between the intermediate input, in this case X, and the value-added composite of capital and labor. In some models this is specified as equal to zero, indicating that a fixed amount of the intermediate input is required for each unit of output. A similar structure is specified for the X sector, and in addition we all for taxes on X sector inputs. Following the MPS/GE version of the model, we present the code for the MCP version with all equations written out. This is done for two purposes. First, it again helps you to understand exactly what MPS/GE is doing with the simple the specification that you have given
3 to it. Second, it should help convince you of the advantages of MPS/GE. Finding and correctly specifying the correct CES functions for the X and Y sectors is not an easy manner. But you are not finished there. You also have to correctly apply Shepards lemma to find factor demands for use in the factor-market-clearing equations. While it is very important to understand exactly what MPS/GE is doing in the background, we hope this will also convince you to let this higherlevel software do the dirty work.
4 $TITLE Model M22: Closed Economy 2X2 with Intermediate Inputs and Nesting $ONTEXT Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 120 -20 -100 | PY | -20 120 -100 | PW | 200 | -200 PL | -40 -60 | 100 PK | -60 -40 | 100 -----------------------------------------------------$OFFTEXT PARAMETERS TX; TX = 0; $ONTEXT $MODEL: M22 $SECTORS: X Y W $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS $PROD:X s:0.5 O:PX I:PY I:PL I:PK ! Activity level for sector X ! Activity level for sector Y ! Activity level for sector W (Hicksian welfare index) ! ! ! ! ! Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L primary factor K welfare (expenditure function)
T:TX T:TX
5 $PROD:Y s:0.75 O:PY I:PX I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK va:1 Q:120 Q: 20 Q: 60 Q: 40 Q:200 Q:100 Q:100 Q:200 Q:100 Q:100
va: va:
$OFFTEXT $SYSINCLUDE mpsgeset M22 PW.FX = 1; $INCLUDE M22.GEN SOLVE M22 USING MCP; * Counterfactual: 100% tax on X sector inputs:
TX = 1.0; $INCLUDE M22.GEN SOLVE M22 USING MCP; * * Algebraic representation -- note the complexity of two-level CES functions which are automatically generated within MPSGE.
EQUATIONS PRF_X PRF_Y PRF_W MKT_X MKT_Y MKT_L MKT_K MKT_W I_CONS
Zero profit for sector X Zero profit for sector Y Zero profit for sector W (Hicksian welfare index) Supply-demand Supply-demand Supply-demand Supply-demand Supply-demand balance balance balance balance balance for for for for for commodity X commodity Y primary factor L primary factor L aggregate demand
6 PRF_X.. 120 * ( 1/6 * PY**(1-0.5) + 5/6 * (PL**0.4 * PK**0.6 * (1+TX))**(1-0.5))**(1/(1-0.5)) =E= 120 * PX; PRF_Y.. 120 * ( 1/6 * PX**(1-0.75) + 5/6 * (PL**0.6 * PK**0.4)** (1-0.75) )**(1/(1-0.75)) =E= 120 * PY; PRF_W.. 200 * PX**0.5 * PY**0.5 =E= 200 * PW; MKT_X.. 120 * X =E= 100 * W * PX**0.5 * PY**0.5 / PX + 20*Y*(PY/PX)**0.75; MKT_Y.. 120 * Y =E= 100 * W * PX**0.5 * PY**0.5 / PY + 20*X*(PX/PY)**0.5; MKT_W.. 200 * W =E= CONS / PW; MKT_L.. 100 =E= 40 * X * * 60 * Y * * MKT_K.. 100 =E= 60 * X * * 40 * Y * * (PX/((1+TX)*PL**0.4*PK**0.6))**0.5 PL**0.4 * PK**0.6 / PL + (PY/(PL**0.6 * PK**0.4))**0.75 PL**0.6 * PK**0.4 / PL; (PX/((1+TX)*PL**0.4*PK**0.6))**0.5 PL**0.4 * PK**0.6 / PK + (PY/(PL**0.6 * PK**0.4))**0.75 PL**0.6 * PK**0.4 / PK;
I_CONS.. CONS =E= 100*PL + 100*PK + TX * 100 * X * PL**0.4*PK**0.6 * (PX/((1+TX)*PL**0.4*PK**0.6))**0.5; MODEL ALGEBRAIC /PRF_X.X, PRF_Y.Y, PRF_W.W, MKT_X.PX, MKT_Y.PY, MKT_L.PL, MKT_K.PK, MKT_W.PW, I_CONS.CONS /; * Check the benchmark:
X.L=1; Y.L=1; W.L=1; PX.L=1; PY.L=1; PK.L=1; PW.L=1; CONS.L=200; TX = 0; SOLVE ALGEBRAIC USING MCP; * Solve the same counterfactual:
7 Excercises: (1) Revise the X sector production to nest Y with K at the bottom(Cobb-Douglas) level, and then let these inputs trade off with L at the top (CES) nest. LY:1 Q:120 Q: 20 Q: 40 Q: 60
Before running TX=1 experiment, guess as to whether this revised nesting will increase or decrease the welfare cost of taxation. Run the experiment, and see if the results confirm or contradict your economic intuition. (2) Rewrite the algebraic model in accordance with the new nesting structure, and verify that you obtain identical solution values. (This exercise is tedious but educational, with a level of difficulty roughly comparable to 500 piece jig-saw puzzle.)
Model 23 This model continues the same theme, by noting that a given sector can have several output as well as inputs. Here we assume that two sectors, A and B that both produce final outputs X and Y, but sector A is relatively specialized in producing good X and sector B is more specialized in producing good Y. MPS/GE allows the modeler to specify a constant elasticity of transformation (CET) between pairs of outputs, and a nesting structure can also be used in more complicated cases. Here is the production block for B. The transformation elasticity between the two goods is equal to 1.5 (t:1.5) and the substitution elasticity between inputs is 1 (s:1). $PROD:B t:1.5 s:1 O:PX Q:20 O:PY Q:80 I:PL Q:60 I:PK Q:40 Now the model itself, followed by the MCP version.
8 $TITLE $ONTEXT Production Sectors Consumers Markets | A B W | CONS -----------------------------------------------------PX | 80 20 -100 | PY | 20 80 -100 | PW | 200 | -200 PL | -40 -60 | 100 PK | -60 -40 | 100 -----------------------------------------------------$OFFTEXT PARAMETERS TA; TA = 0; $ONTEXT $MODEL: M23 $SECTORS: A B W $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS $PROD:A t:2.0 O:PX O:PY I:PL I:PK $PROD:B t:1.5 O:PX ! Activity level for sector A (80:20 for X:Y) ! Activity level for sector B (20:80 for X:Y) ! Activity level for sector W (Hicksian welfare index) ! ! ! ! ! Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L primary factor K welfare (expenditure function) Model M23: Closed Economy 2x2 with Joint Production
! Income level for consumer CONS s:1 Q:80 Q:20 Q:40 Q:60 s:1 Q:20
9 O:PY I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK Q:80 Q:60 Q:40 Q:200 Q:100 Q:100 Q:200 Q:100 Q:100
$OFFTEXT $SYSINCLUDE mpsgeset M23 PW.FX = 1; $INCLUDE M23.GEN SOLVE M23 USING MCP; * Counterfactual: 10% tax on X sector inputs:
TA = 0.10; $INCLUDE M23.GEN SOLVE M23 USING MCP; * Counterfactual: 100% tax on X sector inputs:
TA = 1.00; $INCLUDE M23.GEN SOLVE M23 USING MCP; * now the mcp version, which again shows you the simplifying features * of MPS/GE EQUATIONS PRF_A PRF_B PRF_W MKT_X MKT_Y MKT_L MKT_K Zero profit for sector X Zero profit for sector Y Zero profit for sector W (Hicksian welfare index) Supply-demand Supply-demand Supply-demand Supply-demand balance balance balance balance for for for for commodity X commodity Y primary factor L primary factor
10 MKT_W I_CONS * * Supply-demand balance for aggregate demand Income definition for CONS;
Write the profit constraints as inequalities -- the tax can cause sector A to shut down completely:
PRF_A.. 100 * PL**0.4 * PK**0.6 * (1+TA) =G= 100 * (0.8 * PX**(1+2.0) + 0.2 * PY**(1+2.0))**(1/(1+2.0)); PRF_B.. 100 * PL**0.6 * PK**0.4 =G= 100 * (0.2 * PX**(1+1.5) + 0.8 * PY**(1+1.5))**(1/(1+1.5)); PRF_W.. 200 * PX**0.5 * PY**0.5 =E= 200 * PW; MKT_X.. 80 * A *(PX/(0.8*PX**(1+2.0)+0.2*PY**(1+2.0))**(1/(1+2.0)))**2 + 20 * B *(PX/(0.2*PX**(1+1.5)+0.8*PY**(1+1.5))**(1/(1+1.5)))**1.5 =E= 100 * W * PX**0.5 * PY**0.5 / PX; MKT_Y.. 20 * A *(PY/(0.8*PX**(1+2.0)+0.2*PY**(1+2.0))**(1/(1+2.0)))**2.0 + 80 * B *(PY/(0.2*PX**(1+1.5)+0.8*PY**(1+1.5))**(1/(1+1.5)))**1.5 =E= 100 * W * PX**0.5 * PY**0.5 / PY; MKT_W.. 200 * W =E= CONS / PW; MKT_L.. 100 =E= 40 * A * PL**0.4 * PK**0.6 / PL + 60 * B * PL**0.6 * PK**0.4 / PL; MKT_K.. 100 =E= 60 * A * PL**0.4 * PK**0.6 / PK + 40 * B * PL**0.6 * PK**0.4 / PK; I_CONS.. CONS =E= 100*PL + 100*PK + TA*100*A*PL**0.4*PK**0.6; MODEL ALGEBRAIC /PRF_A.A, PRF_B.B, PRF_W.W, MKT_X.PX, MKT_Y.PY, MKT_L.PL, MKT_K.PK, MKT_W.PW, I_CONS.CONS /; * Check the benchmark:
A.L=1; B.L=1; W.L=1; PX.L=1; PY.L=1; PK.L=1; PW.L=1; CONS.L=200; TA = 0; SOLVE ALGEBRAIC USING MCP; * Solve the same counterfactuals:
Exercises: (1) Try a higher elasticity of transformation between output in the two sectors, such as t = 10. Try to guess ahead of time as to how this might affect the equilibrium outputs of the two sectors following imposition of the tax. Recall that the A sector is the sector which is relatively good at producing X. While it is harder to find a good discussion of CET functions in a textbook (which generally concentrate on the CES input side), see if you can verify that the MCP version is correct for one of the sectors. Let be the elasticity of transformation. CET functions have the form: ( a X b Y )1 / F ( L , K ) where 1 1 1
(2)
Model 24 There are some inherent difficulties in Heckscher-Ohlin type models, in which all factors are used in and are mobile between sectors. In particular, trade theory demonstrates that when there are more goods than factors, there are flats in the aggregate transformation surface of the economy, and open economies tend to specialize in only as many goods as factors. This is, of course, inconsistent with real data, which generally show economies producing something in all industries. There are several ways around this problem. One is the Armington assumption introduced in the next chapter. A second is to assume a portion of capital, or other factors (e.g., resources, land) is fixed or sector specific in each sector. That is what we do in this example. We take the data matrix of M21 (M1_MPS) and split capital into three factors: (i) capital that is mobile between the two sectors, (ii) capital specific to Y, and (iii) capital specific to X. This assumption helps convexify the model and allow positive production of all goods. It is also a useful assumption when data is too aggregated, such as modeling the valued added in an energy sector as comprised of just capital and labor. Designating a portion of that capital as sector-specific resources, allows for more realistic policy experiments. Second, the returns to the specific factor have a nice interpretation as resource rents. Here is the data matrix of model M21
12 Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -75 -25 | 100 ------------------------------------------------------
Now designate part of the capital in each sector as fixed in that sector, creating a four-factor model. Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -50 -15 | 65 PKX | -25 | 25 PKY | -10 | 10 ------------------------------------------------------
Exercise: As an exercise after examining this model, try to guess how the introduction of the specific factors affects the responsiveness (elasticity) of X and Y outputs to the 100% tax. Run the model and compare it to the 50% X-sector tax results in model M21 (M1_MPS).
13 $TITLE $ONTEXT Here is the initial data matrix for example M21 (also M1_MPS). As noted in the text description, it is technically useful to interpret a portion of capital in each sector as sector specific. Or it can in fact be a separate factor such as land or resources. Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -75 -25 | 100 -----------------------------------------------------Designate part of the capital in each sector as fixed in that sector Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -25 -75 | 100 PK | -50 -15 | 65 PKX | -25 | 25 PKY | -10 | 10 -----------------------------------------------------$OFFTEXT PARAMETERS TX; TX = 0; $ONTEXT $MODEL:M24 $SECTORS: X Y W ! Activity level for sector X ! Activity level for sector Y ! Activity level for sector W (Hicksian welfare index) Model M24: Closed Economy 2x2 with Specific Factors
14 $COMMODITIES: PW PX PY PL PK PKX PKY $CONSUMERS: CONS $PROD:X s:1 O:PX I:PL I:PK I:PKX $PROD:Y s:1 O:PY I:PL I:PK I:PKY $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK E:PKX E:PKY ! ! ! ! ! ! ! Price Price Price Price Price Price Price index index index index index index index for for for for for for for welfare (expenditure function) commodity X commodity Y primary factor L (mobile) capital sector-specific input for sector X sector-specific input for sector Y
! Income level for consumer CONS Q:100 Q: 25 Q: 50 Q: 25 Q:100 Q: 75 Q: 15 Q: 10 Q:200 Q:100 Q:100 Q:200 Q:100 Q: 65 Q: 25 Q: 10
$OFFTEXT $SYSINCLUDE mpsgeset M24 $INCLUDE M24.GEN SOLVE M24 USING MCP; * Solve a counterfactual:
15 Model 25 As noted in chapter one, an attractive and powerful feature of MPS/GE is that it solves complementarity problems in which some production activities can be slack for some values of parameters and active for others. This allows researchers to consider a much wider set of problems that is allowed using software which can only solve systems of equations. Model 25 presents a simple example, motivated by tax evasion activities. There is a third sector, Z, which also produces good X but it is 10% less efficient (10% more costly) than the X activity itself. So initially, Z does not operate. But when a tax of 25% is imposed on X, this activity goes slack and Z begins to operate. We could think of Z as a tax evasion or informal activity that is less efficient but can successfully avoid the tax.
Exercise: As a second counterfactual, we impose the tax but do not let the Z sector operate by imposing the restriction Z.FX = 0;. Compare the results of this run to the first counterfactual in which Z is allowed to operate. Can you interpret the welfare results? Hint: while the tax is distortionary, the switch to the inefficient activity uses real resources to avoid the tax. Now raise the tax to 100%. Does this result that tax evasion (the switch to Z) is welfare worsening still hold?
16 $TITLE $ONTEXT Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -40 -60 | 100 PK | -60 -40 | 100 -----------------------------------------------------Activity Z is unprofitable at initial equilibrium prices. It is therefore not operated, and we cannot infer its technical properties from the benchmark social accounting data. We assume that Z is 10% less efficient than X. $OFFTEXT PARAMETERS TX; TX = 0; $ONTEXT $MODEL:M25 $SECTORS: X Y W Z $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS $PROD:X s:1 O:PX I:PL ! ! ! ! ! ! ! ! ! Activity level for sector X Activity level for sector Y Activity level for sector W (Hicksian welfare index) Alternative activity for producing X. Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L primary factor K welfare (expenditure function) Model M25: Closed 2x2 Economy with an Unprofitable Activity
A:CONS T:TX
17 I:PK $PROD:Y s:1 O:PY I:PL I:PK $PROD:Z s:1 O:PX I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK Q: 60 Q:100 Q: 60 Q: 40 Q:100 Q: 44 Q: 66 Q:200 Q:100 Q:100 Q:200 Q:100 Q:100 A:CONS T:TX
$OFFTEXT $SYSINCLUDE mpsgeset M25 PW.FX = 1; Z.L = 0; $INCLUDE M25.GEN SOLVE M25 USINCP MCP; * Lets levy a high on sector X and see what happens:
TX = 0.25; $INCLUDE M25.GEN SOLVE M25 USING MCP; * What is the effect of the tax if Z could not be used?
18 Model M26 Often general-equilibrium models used in international trade assume that factors of production, especially labor, are in fixed and inelastic supply. But designing tax, welfare, and education systems, endogenizing labor supply is a crucial part of the story. Model M26 endogenizes labor supply, allowing labor to chose between leisure and labor supply with leisure entering into the workers utility function. This requires the modeler to specify an endowment of labor or time, something which is not in itself directly observable. Only the portion actually supplied to the market is observable. The modeler also need to specify an elasticity of substitution between leisure and consumption goods, which will in turn imply an elasticity of labor supply. We cannot do much theoretical analysis here, but do suggest that students interested in these questions work with a simple CES function with one good and leisure in order to understand the basic mircoeconomics of labor supply. For a Cobb-Douglas function with an elasticity of substitution equal to one between consumption and leisure, labor supply is completely inelastic with respect to the wage rate. When the elasticity of substitution is greater than one, an increase in the wage rate will mean an increase in labor supply, and an elasticity of substitution less than one will mean that labor supply is backward bending, falling with an increase in the wage rate. In our formulation, we introduce an additional activity T, which transforms leisure (price PL) into labor supplied (price PLS). Strictly speaking this is not necessary, the consumers endowment of labor could just be supplied to both production and the welfare generating activity W. But adding activities is often useful. The solution will report the activity level of T which allows us to directly check the change in labor supply, and any tax on labor can be specified here just once rather than in each sector that uses labor. Here is the production block for T. $PROD:T O:PLS Q:100 I:PL Q:100 A:CONS T:TL
The production block for W specifies a nesting structure in which goods have an elasticity of substitution of 1 between them in a lower nest, and goods and leisure have an elasticity of substitution between them of 0.5. $PROD:W s:0.5 O:PW I:PX I:PY I:PL cons:1 Q:300 Q:100 cons: Q:100 cons: Q:100
The consumer is assumed to be endowed with 200 units of labor/leisure (found in the DEMAND
19 block), of which 100 units are supplied to the labor market initially. $TITLE $ONTEXT Activity T transforms leisure into labor supply: Production Sectors Consumers Markets | A B W T | CONS --------------------------------------------------------PX | 80 20 -100 | PY | 20 80 -100 | PW | 300 | -300 PLS | -40 -60 100 | PL | -100 -100 | 200 PK | -60 -40 | 100 --------------------------------------------------------$OFFTEXT PARAMETERS TL WELFARE REALCONS; TL = 0; $ONTEXT $MODEL:M26 $SECTORS: X Y T W $COMMODITIES: PX PY PL PLS PK PW $CONSUMERS: CONS ! ! ! ! ! ! ! ! ! ! Activity level for sector X Activity level for sector Y Labor supply Activity level for sector W (Hicksian welfare index) Price Price Price Price Price Price index index index index index index for for for for for for commodity X commodity Y leisure labor supply (factor L input) primary factor K welfare (expenditure function) Model M26: 2x2 Economy with Labor-Leisure Choice
20 $PROD:X s:1 O:PX I:PLS I:PK $PROD:Y s:1 O:PY I:PLS I:PK $PROD:T O:PLS I:PL $PROD:W s:0.5 O:PW I:PX I:PY I:PL $DEMAND:CONS D:PW E:PL E:PK Q:100 Q:100 A:CONS T:TL
Q:100 Q: 40 Q: 60 Q:100 Q: 60 Q: 40
cons:1 Q:300 Q:100 cons: Q:100 cons: Q:100 Q:300 Q:200 Q:100
$OFFTEXT $SYSINCLUDE mpsgeset M26 PW.FX = 1; $INCLUDE M26.GEN SOLVE M26 USING MCP; WELFARE = W.L; REALCONS = (PX.L*X.L*100 + PY.L*Y.L*100)/(PX.L**0.5*PY.L**0.5*200); DISPLAY WELFARE, REALCONS; * Solve a counter-factual, tax labor supply at 25%
TL = 0.5; $INCLUDE M26.GEN SOLVE M26 USING MCP; WELFARE = W.L; REALCONS = (PX.L*X.L*100 + PY.L*Y.L*100)/(PX.L**0.5*PY.L**0.5*200); DISPLAY WELFARE, REALCONS;
21 Several features of this program require some explanation. First, the use of the labor supply activity is going to imply two separate prices in the present of the labor tax. There is PL, which is the price of leisure, or alternatively the consumers price of a labor supplied to the market. PLS is going to be the producers cost of labor. The two are related by PLS = PL(1+TL) We could also refer to these as the before (PL) and after tax wage (PLS). We will spend more time on this issue in the next chapter and are simply alerting the reader to this issue now: in the presence of taxes, generally not all prices can be one, and it is very important to keep track of what prices go where, who pays what price and who receives what price. Second, note the equations and notation at the end of the program. WELFARE = W.L; REALCONS = (PX.L*X.L*100 + PY.L*Y.L*100) /(PX.L**0.5*PY.L**0.5*200); DISPLAY WELFARE, REALCONS; A .L after a variable asks for the current value of a variable. Thus W.L gives the value of the variable named W. In the first two of these statements, parameters (declared earlier) are assigned values following the solution to the model. The first is just the value of welfare. The second, REALCONS, is short for the real value of goods consumption. This is specified as the value of X plus Y consumption divided by the price index for a unit of welfare (the exact consumer price index). We have specified this variable (declared as a parameter in GAMS) in order to make an economic point. As you will see if you run this model, the labor tax leads to a reduction in labor supply. This of course leads to a fall in commodity consumption but also to a rise in leisure. Economic indices generally ignore leisure and report changes in nominal or real consumption. If you look at the solution to the model, you will see that indeed REALCONS falls much more than WELFARE. Thus in this case, the usual statistics overstate the burden of the tax and would overstate the benefit of removing the tax if labor supply increases. Finally, GAMS does not automatically write out the values of parameters in the listing file (in this case M26.LST). You have to request that, which is done here with the DISPLAY statement as shown. Parameter values will be written out following the values of the variables of the model. Exercise: Change the elasticity of substitution between leisure and goods and see how this affects the results concerning the labor tax.
22 Model M27 This is a model which may be of interest to development and public finance economists. It assumes that there are two labor markets, a formal and an informal market. Governments are able to collect taxes on the former but not on the latter. The representative household can choose how much labor to supply to each market. For simplicity, we assume that there is no labor-leisure decision, and that all labor is supplied to one of the two markets, but that can be very easily added and indeed we will suggest that as an exercise at the end. There are many ways of doing this. We first of all use an activity denoted LS which takes household labor and produces two outputs, formal and informal labor (prices PLSF and PLSI) according to a CET transformation function with an elasticity 5.0. Think of this as a household technology embodying the fact that the two types of labor are not perfect substitutes in supply. For example, this might be a crude simplification of the fact that the representative household is actual many households (or household locations) some of whom are better at supplying formal labor and vice versa. Concentrating supply in either market leads to something like diminishing returns, a concave transformation frontier between the two types of labor. In addition, the two types of labor can be imperfect substitutes on the production side. That is what we assume here. Only formal labor is used in the X sector, while both formal and (mostly) informal labor are used in the Y sector. The two types of labor are in a lower level nest with an elasticity of substitution of 3. The formal and informal labor supplies could go directly into production, but the listing file will not directly tell us how much of each type is produced by activity LS. Thus we use two dummy activities LF and LI which take a unit of formal labor (LF) or informal labor (LI) and just turn each unit into a unit of the same thing with a different commodity name (PLF and PLI) which are the actual inputs into production. This is just a trip so that the listing file will tell us how much of each type of labor is supplied, the activity levels of LF and LI respectively. In addition, this trick is convenient in multi-sector models because the tax on formal labor need only be specified once, in the LF activity, and not in every production block using formal labor. Here is the program. You will see from the listing file that the tax on formal labor supply leads to a large shift of household supply toward informal labor and that there is a large shift in output toward Y, the sector using informal labor.
23 $TITLE $ONTEXT Activity LS transforms leisure into formal and informal labor supplies. LF and LI are "dummy" activities used to keep track of how much labor is supplied to each market. Production Sectors Consumers Markets | X Y W LF LI LS | CONS ------------------------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PLF | -40 -10 50 | PLI | -50 50 | PLSF | -50 50 | PLSI | -50 50 | PL | -100 | 100 PK | -60 -40 | 100 ---------------------------------------------------------------$OFFTEXT PARAMETERS TL; TL = 0; $ONTEXT $MODEL:M27 $SECTORS: X Y LS LF LI W $COMMODITIES: PX PY PL PLSF PLSI PLF ! ! ! ! ! ! ! ! ! ! ! ! Activity Activity Activity Activity Activity Activity Price Price Price Price Price Price level for sector X level for sector Y level for household labor supply for formal labor supply for informal labor supply level for sector W (Hicksian welfare index) for for for for for for commodity X commodity Y labor formal labor supplied to market informal labor supply to market formal labor supplied to firms Model M27: 2x2 Economy with Formal/Informal Labor Supply
24 PLI PK PW $CONSUMERS: CONS $PROD:X s:1 O:PX I:PLF I:PK ! Price index for informal labor supplied to firms ! Price index for primary factor K ! Price index for welfare (expenditure function) ! Income level for consumer CONS Q:100 Q: 40 Q: 60
$PROD:Y s:1 a:3 O:PY Q:100 I:PLF Q: 10 I:PLI Q: 50 I:PK Q: 40 $PROD:LS t:5.0 O:PLSF O:PLSI I:PL $PROD:LF O:PLF I:PLSF $PROD:LI O:PLI I:PLSI $PROD:W s:1.0 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK Q: 50 Q: 50 Q:200 Q:100 Q:100 Q:200 Q:100 Q:100 Q: 50 Q: 50 Q: 50 Q: 50 Q:100
a: a:
A:CONS T:TL
$OFFTEXT $SYSINCLUDE mpsgeset M27 PW.FX = 1; $INCLUDE M27.GEN SOLVE M27 USING MCP;
Model M28 A great many questions of interest to trade and public finance economists involve issues of distribution rather than or in addition to issues of aggregate welfare. Households (or consumers in MPS/GE) may differ in their preferences and more importantly in their sources of income (or their factor endowments). For both reasons, different taxes and other government policies affect different households in different ways. In addition to creating deadweight losses or aggregate benefits, tax change can also significantly redistribute income among households. Adding multiple household types is a straightforward extension of our earlier models. In model M28, we allow for two households. Household A is relatively well endowed with labor, and also has a preference for good Y, which is the labor-intensive good. Household B is relatively well endowed with capital and has a relative preference for the capital intensive good X. Our counterfactual experiment is to place a tax on the factor inputs to X, assigning half the revenue to each consumer. As you will guess, this tax lowers the welfare of household B. However, the redistribution effect outweighs the overall deadweight loss of the tax for household A, which is actually better off. This welfare gain is a combination of a redistribution in favor of capital, and a lowering of the relative consumer price of Y, the good favored by household A. Note that we chose labor as numeraire in this program, and the consumer price index (PWA, PWB) will differ for the two households. Exercises: (1) You might (correctly) guess that there is no way to redistribute the tax unevenly and make both households worse off. That would violate the first theorem of welfare economics. Try some alternative distributions to check on this. You will need to specify two different tax parameters, but they should continue to sum to 0.5 = 2*0.25. Recalibrate the data so that the households have the same preferences. Running the experiment gives then a welfare effect due only to the change in factor prices following the imposition of the tax.
(1)
26 $TITLE $ONTEXT Two households: differ in preferences and in endowments Production Sectors Consumers Markets | X Y WA WB | A B ---------------------------------------------------------PX | 100 -40 -60 | PY | 100 -60 -40 | PWA | 100 | -100 PWB | 100 | -100 PL | -25 -75 | 90 10 PK | -75 -25 | 10 90 ---------------------------------------------------------$OFFTEXT PARAMETERS TX; TX = 0; $ONTEXT $MODEL:M28 $SECTORS: X Y WA WB $COMMODITIES: PX PY PL PK PWA PWB $CONSUMERS: CONSA CONSB * * ! ! ! ! ! ! ! ! ! ! Activity level for sector X Activity level for sector Y Welfare index for consumer A Welfare index for consumer B Price Price Price Price Price Price index index index index index index for for for for for for commodity X commodity Y primary factor L primary factor K consumer A welfare consumer B welfare Model M28GMS: 2x2 Economy with Two Household Types
More than one tax may be levied on a single transaction with revenues accruing to different agents. As specified here, the
27 * * ad-valorem tax rate on inputs to sector X equals 2*TX. of the tax revenue accrues to A and half to B. Q:100 Q: 25 Q: 75 Q:100 Q: 75 Q: 25 Q:100 Q: 40 Q: 60 Q:100 Q: 60 Q: 40 Q:100 Q: 90 Q: 10 Q:100 Q: 10 Q: 90 Half
$PROD:X s:1 O:PX I:PL I:PK $PROD:Y s:1 O:PY I:PL I:PK $PROD:WA s:1 O:PWA I:PX I:PY $PROD:WB s:1 O:PWB I:PX I:PY $DEMAND:CONSA D:PWA E:PL E:PK $DEMAND:CONSB D:PWB E:PL E:PK
A:CONSA A:CONSA
T:TX T:TX
A:CONSB A:CONSB
T:TX T:TX
$OFFTEXT $SYSINCLUDE mpsgeset M28 PL.FX = 1; $INCLUDE M28.GEN SOLVE M28 USING MCP; * Solve a counterfactual:
28 Model 29 No budget study we are aware of has ever suggested that consumer preferences are homogeneous. Households tend to spend a much higher proportion of their income on food at low incomes, for example, than at high incomes. Part of the reason that trade economists and applied general-equilibrium modelers are so fond of homogenous functions is that they are technically much easier to handle than non-homogeneous functions. As we noted earlier, any constant-returns CES function can be completely specified by a single vector of values of inputs and output quantities, and the relative prices of inputs at that point. One alternative formulation is know as the Stone-Geary utility function, which in turn gives rise to the linear expenditure system (LES) of demand equations, the latter being popular in budget studies. The Stone-Geary utility function is just a Cobb-Douglas function with the origin displaced from zero. These displacements, if positive, are typically called minimum consumption requirements, meaning that the consumer gets no positive utility until these needs are met. Consider a simple case in which there is a minimum consumption requirement in X but not in Y. The minimum X consumption is denoted X*. The utility function is U ( X X ) Y 1 If we maximized this subject to the usual budget constraint with income I, the demand functions for X and Y would be: X X ( I px X ) px ( 1 ) ( I px X ) py
Y
px X p y Y I
The first equation is rather intuitive in words. It says that you first purchase the minimum consumption requirements, and then you spend a constant fraction ( ) of remaining income net of the minimum requirements on X. Further algebra would give us the budget share spent on X and the income elasticity of demand for X. px X I I ( 1 ) px X I I dX I X dI I ( 1 ) px X
The budget share spent on X falls with increases in income, asymptotically approaching as income rises. The income elasticity of demand rises with income, asymptotically approaching 1. Suppose that we want to calibrate our initial data to the assumption that the income elasticity of demand for X is initially equal to 0.75. If we solve the share equation (equal to 0.5) in the data and the income-elasticity equation (equal to 0.75 by assumption), we get = 3/8. This will then allow us to solve for X*, which is X* = 40. The trick is then to revise the
29 benchmark data matrix, giving the consumer a negative endowment of X = 40. The utility (welfare) function W then has an input of 60 units of X (100 minus the minimum consumption requirement) and 100 units of Y. At prices of 1 for each good, MPS/GE will then calibrate the Cobb-Douglas utility function with an = 3/8 (60/160). The counterfactual experiment in this model is to double the consumers endowment. Note from the results that there is a shift in consumption toward Y, the high income-elasticity good. Of course, the change in X and Y consumption cannot be directly interpreted as income elasticities of demand, since prices will change in general equilibrium. The price of Y will rise relative to X, and the price of the factor used intensively in Y will rise relative to the price of the other factor. One final word of caution about this model and the use of Stone-Geary. Welfare changes have to be interpreted carefully, because utility is not linear (homogenous of degree 1) in income at constant prices. As you will see from the results of this simulation, utility (W) more than doubles as we double the endowment. Note by way of intuition that if income as so low that the consumer could just barely buy the minimum consumption requirement, then utility would be zero. Also, we should note that if income is too small to even buy X* (in general equilibrium, the endowment is insufficient to produce X*), the solver will crash and not compute a solution. These difficulties are troubling, but we are sure that good policy must consider the fact that really poor people consume very different bundles of goods than rich people, and this has probably more to do with non-homogeneity than them having homogeneous but different preferences.
30 $TITLE $ONTEXT The observed data is: Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -40 -60 | 100 PK | -60 -40 | 100 -----------------------------------------------------But calibrated to the model as: Production Sectors Consumers Markets | X Y W | CONS -----------------------------------------------------PX | 100 -60 | -40 PY | 100 -100 | PW | 160 | -160 PL | -40 -60 | 100 PK | -60 -40 | 100 -----------------------------------------------------Model M29: Closed 2x2 Economy -Stone Geary (LES) Preferences
$OFFTEXT PARAMETERS ENDOW; ENDOW = 1; $ONTEXT $MODEL:M29 $SECTORS: X Y W ! Activity level for sector X ! Activity level for sector Y ! Activity level for sector W (Hicksian welfare index)
31 $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS $PROD:X s:1 O:PX I:PL I:PK $PROD:Y s:1 O:PY I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK E:PX ! ! ! ! ! Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L primary factor K welfare (expenditure function)
! Income level for consumer CONS Q:100 Q: 40 Q: 60 Q:100 Q: 60 Q: 40 Q:160 Q: 60 Q:100 Q:160 Q:(100*ENDOW) Q:(100*ENDOW) Q:-40
$OFFTEXT $SYSINCLUDE mpsgeset M29 PW.FX = 1; $INCLUDE M29.GEN SOLVE M29 USING MCP; * Counterfactual: double the factor endowment.
Chapter 3 Taxes, Tax Reform, Public Goods, and Steady-State Models Introduces Auxiliary Variables, Constraints, and Rationing
In this chapter, we will begin with a simple problem in which there are taxes in the initial benchmark data, to illustrate how to calibrate a model with existing taxes. Then we will consider labor taxes with endogenous labor supply. These models will make the point that some taxes are less distortionary than others. However, replacing one tax with another rarely yields the same revenue in general equilibrium. Thus our third example will show how to model tax reforms that yield the government the same amount of revenue, referred to as equal-yield tax reform. In doing so, we will introduce a major feature of MPS/GE, the auxiliary variable and the constraint equation. The new tax rate will be an endogenous tax, whose value is set in general equilibrium by the revenue constraint. Next, we will introduce a public good, and show how that is modeled. Then we will set the tax rate to finance this public good endogenously according to the Samuelson rule for pure public goods. This will also involve the use of an endogenous tax rate, an auxiliary variable, and a constraint equation. But it will also involve the introduction of another new feature, the rationing constraint. Finally, we will end this chapter with two other extensions that are valuable for policy analysis. First, we will consider taxes and classical unemployment. Second, we will consider an endogenous capital stock that adjusts according to a steady-state rule. Comparative statics experiments are then in fact comparative steady-state experiments, showing the generalequilibrium change in all variables after the capital stock has adjusted to its new generalequilibrium level. The models in this chapter are as follows: M31S.GMS M32S.GMS M33S.GMS M34S.GMS M35.GMS M36.GMS closed economy 2x2 with taxes in the benchmark closed economy 2x2 with labor supply and labor tax closed economy 2x2, equal yield tax reform closed economy 2x2 with a public good closed economy 2x2, public good using samuelson rule closed economy 2x2, taxes and classical unemployment
Model M31 Our first model is similar to the models of the previous chapter, but a positive tax and tax revenue are present in the benchmark data. The first task of the modeler is again to construct a micro-consistent data set, and the format we introduced in chapter 1 (dubbed the microconsistency matrix) is a nice way to do this and at the same time set up the data for building the model. Remember that entries into this matrix are values. Row sums equal to zero indicate market clearing and column sums equal to zero indicate product exhaustion (zero profits) or consumer income balance. Under this convention, each tax should be added as a row to the matrix. Taxes are negative entries in a column indicating payments by a sector. There is a corresponding positive entry somewhere. In the present case, the tax is simply redistributed lump sum to the consumer, so the consumer gets a positive entry of the tax revenue. A zero row sum for the tax indicates that all tax receipts must be paid to someone. Here is our matrix: Production Sectors Consumers
Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -20 -60 | 80 PK | -60 -40 | 100 TAX | -20 0 | 20 -----------------------------------------------------The data indicate that the X sector receives 100 units of revenue, of which 20 is paid in taxes. This 20 is received as part of the consumers income. Note that these data do not indicate what type of tax is in place. It could be a tax on X output, on all the inputs, or on just one input. We are going to interpret this as a tax on the labor input into sector X. A crucial task for the modeler is to keep track of what prices firms and consumers face. It is (generally) not possible to calibrate a benchmark equilibrium with all prices equal to one. For example, if a production input is taxed, then if its consumer price (price received by the consumer) is chosen to be equal to one, then producer price (price paid by the producer) is specified as (1 + t). On the other hand, if the producer price is unity, the consumer price is 1/(1+t). We will discuss output taxes shortly. Given that we interpret the above data as a tax on the labor input into the X sector, the
3 data tell us that the tax rate is 100%. The amount paid by the X sector to labor (20) is equal to the tax revenue (20). Thus if we set the consumer price of labor to 1 (also the price to the Y sector), then the price of labor to the X sector must be 2. When the benchmark price of a production input or output is not equal to unity, it is necessary to add a reference price field to the production block. The relative prices of inputs fix the marginal rate of substitution (on inputs, marginal rate of transformation on outputs). Benchmark reference prices and reference quantities are needed in order to correctly fit (calibrate) the technology to the data. If these fields are not correctly specified, then a run of the model will not reproduce the benchmark data as an equilibrium. Here is the correct specification of the X production block (recall that default prices equal 1 so only prices not equal to 1 must be specified). $PROD:X s:1 O:PX I:PL I:PK Q:100 Q: 20 Q: 60
P:2
A:CONS T:TLX
where TLX (for tax on labor in X) is declared as a parameter elsewhere in the file, in order to permit changes in TLX as counterfactual experiments. There are two common mistakes that you need to avoid. First is to leave out the price field thinking that the assignment of the tax will do that for you. That is incorrect, the P:2 must appear in the block. The tax itself is not used in the calibration, the Q and P fields are. Second, the P field must not be specified as P:(1 + TLX). While this would result in the correct initial calibration, any subsequent change in TLX in a counterfactual would result in a recalibration of the technology. Assuming that the modeler wants to just change the tax, not the technology, the P field must have a constant in it. Of course, this constant could itself be a parameter specified somewhere else in the file (e.g., P:(1 + TLX0)), but it must be constant and distinct from the changing tax rate. In some instances, the modeler may of course want to change the technology itself as a counterfactual. That is fine, but be clear on what it is you want to change. Finally, we are going to allow for alternative taxes in the model, including a tax on capital inputs into X (TKX) and a tax on X output (TX). So the production block in the model is written as follows, where TKX and TX are set to zero initially. $PROD:X s:1 O:PX I:PL I:PK Q:100 Q: 20 Q: 60 A:CONS T:TX A:CONS T:TLX A:CONS T:TKX
P:2
4 In the first counterfactual, eliminate taxes on X sector inputs and replace with a single tax on X sector output. We make a guess that the 100% tax on labor might generate revenue roughly equivalent to a tax of 25% on both inputs: 20 units of revenue is 100% of the benchmark labor input, or 25% of total benchmark inputs of labor and capital (20 + 60 = 80). Of course, they will not in fact generate the same revenue as other variables adjust in general equilibrium. Further discussion of this issue is postponed until model M33. Now consider a tax on X sector output. It is important to understand that the output tax rate will be different from the corresponding tax rate on all inputs, because the tax base is different in the two cases. Let mc denote the marginal cost of production (or producer price) and p denote the price charged to the consumer. This is how MPS/GE interprets input (ti) versus output (to) taxes. Tax on all inputs: Tax on the output: p = (1 + ti)mc p(1 - to) = mc
Note mc is the tax base for the input tax, and p is the tax base for the output tax. These are not the same. The output tax that is equivalent to the tax on all inputs is found by: ( 1 ti ) 1 1 to
If ti = TLX = TKX = 0.25 as we have assumed in our first counterfactual, then the equivalent output tax is given by to = TX = 0.20. Thus in our second counterfactual, we set the input taxes to zero and the output tax to 0.20. One more equivalence can be demonstrated with this small model. The final counterfactual demonstrates that a 20% tax on the output of X is the same as a 25% subsidy to the production of Y. Let t be the tax on X and s the subsidy to Y. Formally, we have px (1 t ) py px py (1 s ) mcx mcy if t 0.20 , s 0.25
Absolute prices may differ depending on the choice of the numeraire, but all quantities and welfare are the same. Here is the program.
5 $TITLE $ONTEXT Production Sectors Consumers Model M31.GMS: Closed 2x2 Economy - Calibrate to an Existing Tax
Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -20 -60 | 80 PK | -60 -40 | 100 TAX | -20 0 | 20 -----------------------------------------------------$OFFTEXT PARAMETERS TX TY TLX TKX $ONTEXT $MODEL:M31 $SECTORS: X Y W $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS $PROD:X s:1 O:PX I:PL ! Activity level for sector X ! Activity level for sector Y ! Activity level for sector W (Hicksian welfare index) ! ! ! ! ! Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L (net of tax) primary factor K welfare (expenditure function) Proportional output tax on sector X, Proportional output tax on sector Y, Ad-valorem tax on labor inputs to X, Ad-valorem tax on capital inputs to X;
! Income level for consumer CONS Q:100 Q: 20 A:CONS T:TX A:CONS T:TLX
P:2
6 I:PK $PROD:Y s:1 O:PY I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PK Q: 60 Q:100 Q: 60 Q: 40 Q:200 Q:100 Q:100 Q:200 Q: 80 Q:100 A:CONS T:TKX A:CONS T:TY
$INCLUDE M31.GEN SOLVE M31 USING MCP; * * TLX TKX TX TY = = = = In the first counterfactual, we replace the tax on labor inputs by a uniform tax on both factors: 0.25; 0.25; 0; 0;
$INCLUDE M31.GEN SOLVE M31 USING MCP; * * TLX TKX TX TY = = = = Now demonstrate that a 25% tax on all inputs is equivalent to a 20% tax on the output (or all outputs if more than one) 0; 0; 0.2; 0;
7 $INCLUDE M31.GEN SOLVE M31 USING MCP; * * * TKX TLX TX TY = = = = Finally, demonstrate that a 20% tax on the X sector output is equivalent to a 25% subsidy on Y sector output (assumes that the funds for the subsidy can be raised lump sum from the consumer!) 0; 0; 0; -0.25;
Exercises: (1) (2) Verify that the results from all the counterfactuals accord with our theoretical intuition Set the price field for PL in the PROD:X block in the benchmark equal to one, deliberately creating an error. Run the model and verify that the first solution does not reproduce the benchmark. Deliberately create a second error. Set the price field equal to P:(1 + TLX). Run the model, and see that this replicates the benchmark, but gives different answers to the counterfactuals than with P:2.
(3)
8 Model 32 This model is an extension of the previous model and also extends our earlier model with endogenous labor supply (M26) to a case with taxes in the benchmark. Since the extension here is fairly straightforward, we will take the opportunity to introduce two useful features. One is to first run the model without allowing it to iterate. This allows the modeler to check if the initial values of the model are an equilibrium; that is, is it calibrated correctly? If it is not calibrated correctly, it will indicate what activities or markets are out of balance which is very useful in correcting the calibration. Second, when the modeler wants to loop over a set of parameter values repeatedly solving the model, there is a simple procedure for doing this. Here is the initial data for the model. Production Sectors Consumers
Markets | A B W TL TK CONS ---------------------------------------------------------PX | 120 -120 PY | 120 -120 PW | 340 -340 PLS | -48 -72 120 PKS | -72 -48 120 PL | -100 -100 200 PK | -100 100 TAX | -20 -20 40 --------------------------------------------------------There are supply activities for labor (TL) and capital (TK). Labor can also be used for leisure and so the activity level for labor supply will vary. Capital has no alternative use so it will always be completely supplied to the market. Still, it can be convenient to specify a supply activity, since the tax on capital supply need only be specified once and there will be two prices, one the consumer price and one the producer price (user cost) of capital. As in the previous model, we have to make a choice of units for prices. Our choice will be that the consumer prices (prices received by the consumer) for labor and capital will be set to one. The data matrix indicates that there is a 20% tax on each factor in the benchmark, so the producer prices (user costs) of labor and capital will be PLS = PKS = 1.2. We can also choose how to interpret the X and Y values, but there is only a single price for both producers and consumers, so we will interpret these as 120 units at a price of 1 for each. From here on, things are rather straightforward, so let us introduce a couple of other useful features. First, in complicated models with lots of sectors and taxes, benchmarking is a difficult task and it is often not possible to calibrate the model with all prices and activity levels equal to
9 one. One useful trick for checking the calibration and noting which sectors or markets are out of balance is to not allow the model to iterate initially. After the MPS/GE model itself, you will see the notation: PLS.L =1.2; PKS.L =1.2; M32.ITERLIM = 0; $INCLUDE M32.GEN SOLVE M32 USING MCP; M32.ITERLIM = 2000; First, we set initial values for any activities or prices that we know do not take on the default values of 1. This is done with the .L suffix on the variable that we used once before. Note that this does not fix the value of the variable (that is the .FX suffix), it just sets its initial value. Next we use a command which tells GAMS that it cannot iterate in attempting to solve the model (syntax is <model name>.ITERLIM = 0;). Then we use the INCLUDE and SOLVE statements. Then, in preparation for the next run we set the iteration limit back to a high value. Suppose that we had set the initial value of PLS.L = 1.0 instead of 1.2. This is what you will see if you look at the listing file (M32.LST). LOWER ---------------------------------------VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR X Y W TL TK PX PY PL PK PLS PKS PW CONS . . . . . . . . . . . 1.000 . LEVEL 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.200 1.000 340.000 UPPER +INF +INF +INF +INF +INF +INF +INF +INF +INF +INF +INF 1.000 +INF MARGINAL -8.440 -12.435 . 20.000 . . . . . -9.163 8.365 EPS .
The model has not solved. Recall from chapter 1 that GAMS writes inequalities in the greaterthan-or-equal-to format. The MARGINAL column of the listing file gives the degree of imbalance in an inequality, left-hand side minus right-hand side. A positive number is ok if the associated variable is zero, as in a cost equation (marginal cost minus price is positive if
10 associated with a slack activity). A negative value of a marginal cannot be an equilibrium; for an activity it indicates positive profits and for a market it indicates demand exceeds supply. In our incorrect calibration in which we give the producer price of labor too low a value, we see that there are positive profits for X , Y and negative profits for labor supply. There is an excess demand for labor and an excess supply for capital. Most calibration errors are in the MPS/GE file itself, and not just in setting the initial values of the variables. You could work with this file as an exercise, deliberately introducing errors (such as in the price fields) and see what happens. In any case, the iterlim = 0 statement is very useful in helping you identify where the errors are. The other useful feature we introduce in this model is the use of the LOOP statement to simplify the repeated solving of the model over a series of parameter values. First, we use a set statement to indicate a set of values to be looped over. We cannot go through all of the possible ways to do this in GAMS, here we just use a very simple formulation in which there are five values in the set, denoted just 1-5 (they could be called S1-S5, etc.). Two parameters are declared as vectors, WELFARE(S), and LABSUP(S) (for labor supply). Then the loop statement sets the taxes at different values over the values of the set. LOOP(S, TXL = 0.25 - 0.05*ORD(S); TXK = 0.15 + 0.05*ORD(S); $INCLUDE M32.GEN SOLVE M32 USING MCP; WELFARE(S) = W.L; LABSUP(S) = TL.L; ); DISPLAY WELFARE, LABSUP; ORD(S) denotes the ordinal value of a member of a set. S is an indicator and is not treated as a number in GAMS, so 0.05*S wont work. ORD(S) is treated as a number, so this is how the set index is translated into a number. Note from the tax assignment statement that when S = 1, the initial values of both taxes are 0.20, our benchmark values. At S = 5, the values are TXL = 0, and TXK = 0.40. The model is repeatedly solved within the loop, and after each solve statement the value of the parameters WELFARE and LABSUP are assigned values. The loop is closed with ); After the loop is closed we ask GAMS to display the parameters at the end of the listing file. Note the set index for the parameters is not used in the display statement, GAMS knows what it is.
11 $TITLE $ONTEXT Production Sectors Consumers Model M32: Closed 2x2 Economy -income taxes and labor supply
Markets | X Y W TL TK CONS ---------------------------------------------------------PX | 120 -120 PY | 120 -120 PW | 340 -340 PLS | -48 -72 120 PKS | -72 -48 120 PL | -100 -100 200 PK | -100 100 TAX | -20 -20 40 --------------------------------------------------------$OFFTEXT * * Declare parameters to be used in setting up counter-factual equilibria:
SETS S /1*5/; PARAMETERS TXL TXK WELFARE(S) LABSUP(S) $ONTEXT $MODEL:M32 $SECTORS: X Y W TL TK $COMMODITIES: PX PY PL PK ! ! ! ! ! ! ! ! ! Activity level for sector X Activity level for sector Y Activity level for sector W (Hicksian welfare index) Supply activity for L Supply activity for K Price Price Price Price index index index index for for for for commodity X commodity Y primary factor L (net of tax) primary factor K (net of tax) Labor income tax rate, Capital income tax rate, Welfare, Labor supply;
12 PLS PKS PW $CONSUMERS: CONS $PROD:X s:1 O:PX I:PLS I:PKS $PROD:Y s:1 O:PY I:PLS I:PKS $PROD:TL O:PLS I:PL $PROD:TK O:PKS I:PK $PROD:W s:0.7 O:PW I:PX I:PY I:PL $DEMAND:CONS D:PW E:PL E:PK Q:100 Q:100 a:1 Q:340 Q:120 Q:120 Q:100 Q:340 Q:200 Q:100 P:1.2 P:1 A:CONS T:TXK Q:100 Q:100 P:1.2 P:1 A:CONS T:TXL ! Price index for primary factor L (gross of tax) ! Price index for primary factor K (gross of tax) ! Price index for welfare (expenditure function) ! Income level for consumer CONS Q:120 Q: 40 Q: 60 Q:120 Q: 60 Q: 40
P:1.2 P:1.2
P:1.2 P:1.2
a: a:
TXL = 0.2; TXK = 0.2; PW.FX = 1; PX.L =1.; PY.L =1.; PLS.L =1.2; PKS.L =1.2;
13 M32.ITERLIM = 0; $INCLUDE M32.GEN SOLVE M32 USING MCP; M32.ITERLIM = 2000; * * LOOP(S, TXL = 0.25 - 0.05*ORD(S); TXK = 0.15 + 0.05*ORD(S); $INCLUDE M32.GEN SOLVE M32 USING MCP; WELFARE(S) = W.L; LABSUP(S) = TL.L; ); DISPLAY WELFARE, LABSUP; Lets do some counter-factual with taxes shifted to the factor which is in fixed supply:
Exercises: (1) As suggested above, deliberately create some calibration errors in the MPS/GE file and see how this affects the attempt to reproduce the benchmark data using the iterlim = 0 statement. In order to get more comfortable with setting producer versus consumer prices, reinterpret the bencmark data so that the producer prices (user costs) of capital and labor are equal to one. So, for example, the value of labor in the X sector of 48 is 48 units at a price of 1. Rewrite the MPS/GE file using this convention.
(2)
14 Model M33 This model is a follow-up on model M32 where we considered some income tax reform experiments. Like that model, here we apply taxes through activities which transform (supply) household owned factors into production inputs. The difference here is that we set up a model in which we can do differential tax policy analysis holding the level of government revenue constant. In order to keep things simple, we continue to rebate tax revenue in lump-sum fashion. This model introduces a fourth (and final) class of MPSGE variables (in addition to activity levels, commodity prices and income levels). The new entity is called an "auxiliary variable". In this model, we use an auxiliary variable to endogenously alter the tax rate in order to maintain an equal yield. In the present case, we will hold the labor tax rate exogenous, but change its value, in each case solving for the value of the capital tax that yields the same value of revenue as the original tax. TXK now become a variable, not a parameter. In the initial MPS/GE statements specifying the model, we declare a list of auxiliary variables (note the spelling of auxiliary, use a double l and the model will crash), in this case a single variable TXK. $AUXILIARY: TXK ! Endogenous capital tax from equal yield constraint. This variable appears in the production block for capital supply as follows. $PROD:TK O:PKS I:PK Q:100 Q:100 P:1.2 A:CONS N:TXK
N: is a new field in a production block, standing for eNdogenous tax rate followed by the auxiliary variable. This is read in words as assign to consumer CONS the revenue from an endogenous tax rate TXK. TXK is in turn associated with a constraint equation, which is written in GAMS syntax but inside the MPS/GE block. Here is how we write it in this model. $CONSTRAINT:TXK TXL*PL*TL*100 + TXK*PK*TK*100 =E= 40*(PX + PY)/2;
The left-hand side is tax revenue from the two taxes, one an exogenous parameter (TXL) and the other an endogenous variable (TXK). Each term is (tax rate) x (factor price) x (activity level for factor supply) x (the reference quantity supplied at an activity level equal to one). The right-hand side of the constraint specifies the target revenue. With prices changing in general equilibrium, the modeler has to think carefully about what is meant by constant revenue: that is, constant in terms of what? Here we assume that the government wants the taxes to yield an amount equal to the cost of purchasing given and equal amounts of X and Y, so for
15 example the initial tax revenue of 40 is spend (at prices for X and Y equal to one) on 20 X and 20 Y. The right-hand side of the constraint equation will continue to allow the purchase of X = Y = 20 as the prices of the goods change in general equilibrium. Of course, the government is not actually buying anything in this simple model, it is just redistributing the revenue back to the consumer. But the point is that the modeler must specify what the revenue target is in real terms, and then allow the nominal value of that to adjust with prices. For historical reasons, the default values of auxiliary variables in MPS/GE are zero, not one. So the modeler should set the initial values of these variables for the replication check even if they should happen to be one. In our case, the initial value of TXK = 0.20, so we set this along with the values of PLS and PKS which are equal to 1.2 initially, along with the initial value of the parameter TXL (the latter is a parameter and so does not use the .L syntax). TXL = TXK.L PLS.L PKS.L 0.20; = 0.20; = 1.2; = 1.2;
After the replication check, we loop over values of TXL, and each solve statement finds the new value of TXK as one variable in the new general-equilibrium solution. In each iteration, we store the values of key variables so that they can be conveniently presented together at the end of the listing file. We include the real value of commodity consumption as discussed in Chapter 2, model M26, to show the difference between the effects of the reform on real commodity consumption (REALCONS) and true welfare (WELFARE), the latter accounting for changes in the value of leisure. Note from the results in the present case, that measuring only the change in real commodity consumption significantly overstates the true welfare gain of the tax reform (which is tiny) because of the fall in leisure (increase in labor supply). Finally, although the difference is small, note that the capital tax that needs to be associated with TXL = 0 is TXK = 0.476, not the 0.50 value we assumed in the previous model adjusting the capital and labor taxes one for one in opposite directions.
16 $TITLE $ONTEXT Production Sectors Consumers Model M32: Closed 2x2 Economy -Equal Yield Tax Reform
Markets | A B W TL TK CONS ---------------------------------------------------------PX | 120 -120 PY | 120 -120 PW | 340 -340 PLS | -48 -72 120 PKS | -72 -48 120 100 PL | -100 -100 200 PK | -100 TAX | -20 -20 40 --------------------------------------------------------$OFFTEXT SETS S /1*5/; PARAMETERS TXL WELFARE(S) REALCONS(S) LABSUP(S) CAPTAX(S) $ONTEXT $MODEL:M32 $SECTORS: X Y W TL TK $COMMODITIES: PX PY PL PK PLS PKS ! ! ! ! ! ! ! ! ! ! ! Activity level for sector X Activity level for sector Y Activity level for sector W (Hicksian welfare index) Supply activity for L Supply activity for K Price Price Price Price Price Price index index index index index index for for for for for for commodity X commodity Y primary factor primary factor primary factor primary factor Labor income tax rate, Welfare, Real consumption of goods, Labor supply, Capital tax rate;
L K L K
17 PW $CONSUMERS: CONS $AUXILIARY: TXK $PROD:X s:1 O:PX I:PLS I:PKS $PROD:Y s:1 O:PY I:PLS I:PKS $PROD:TL O:PLS I:PL $PROD:TK O:PKS I:PK $PROD:W s:0.7 O:PW I:PX I:PY I:PL $DEMAND:CONS D:PW E:PL E:PK Q:100 Q:100 a:1 Q:340 Q:120 Q:120 Q:100 Q:340 Q:200 Q:100 P:1.2 A:CONS N:TXK Q:100 Q:100 P:1.2 A:CONS T:TXL ! Price index for welfare (expenditure function) ! Income level for consumer CONS ! Endogenous capital tax from equal yield constraint. Q:120 Q: 40 Q: 60 Q:120 Q: 60 Q: 40
P:1.2 P:1.2
P:1.2 P:1.2
a: a:
$CONSTRAINT:TXK TXL*PL*TL*100 + TXK*PK*TK*100 $OFFTEXT $SYSINCLUDE mpsgeset M32 TXL = 0.20; TXK.L = 0.20;
18 PLS.L = 1.2; PKS.L = 1.2; M32.ITERLIM = 0; $INCLUDE M32.GEN SOLVE M32 USING MCP; M32.ITERLIM = 2000; LOOP(S, TXL = 0.25 - 0.05*ORD(S); $INCLUDE M32.GEN SOLVE M32 USING MCP; WELFARE(S) = W.L; REALCONS(S) = (PX.L*X.L*120 + PY.L*Y.L*120) /(PX.L**0.5*PY.L**0.5*240); LABSUP(S) = TL.L; CAPTAX(S) = TXK.L; ); DISPLAY WELFARE, REALCONS, LABSUP, CAPTAX;
19 Model 34 The assumption of lump-sum redistribution is a convenient trick which simplifies tax policy analysis. In practice, governments often use money to purchase things which private markets do not provide. People value the public provision, but for some reason it is not easy to collect money from beneficiaries. In this model, we first explicitly introduce government as an agent or consumer (GOVT). The tax revenue collected in the economy is assigned to the government. The government spends this on purchasing a good called G (price PG), which is produced from capital and labor like the other goods X and Y. Here is the production block for G (all inputs in all sectors are taxed at 25%) and the demand block for the consumer GOVT. $PROD:G s:1 O:PG I:PL I:PK Q: 50 Q: 20 Q: 20
P:1.25 P:1.25
A:GOVT A:GOVT
T:TAX T:TAX
$DEMAND:GOVT D:PG The government is the only agent demanding PG in the model. As we noted back in Chapter 1, MPS/GE transfers the tax revenue to the government in the background, this being the governments only source of income. Now comes the tricky part. Each consumer receives the full benefit of the public good without actually purchasing or paying for it. The community park is just there, free for the consumer. How do we model this free transfer from the government to the consumer? To do this, we introduce another feature of MPS/GE, the rationing variable and rationing constraint. The rationing variable is declared as an auxiliary variable, denoted here LGP It appears as a multiplier on an endowment field in a consumers demand equation. Here is the correct syntax for the demand blocks for the two consumers. $DEMAND:CONS1 D:PW1 E:PL E:PK E:PG1 $DEMAND:CONS2 D:PW2 E:PL E:PK E:PG2 Q:125 Q: 50 Q: 50 Q: 50 Q:125 Q: 50 Q: 50 Q: 50
R:LGP
R:LGP
20 MPS/GE just multiplies the quantity in the Q field by the value of the variable in the R field, so in this case CONS1 has an endowment of PG1 equal to 50*LGP. The value of LGP, like any auxiliary variable is set by a constraint equation. In our case, LGP takes on the value of G, the activity level for production of the public good. Note that 50 is the reference quantity for the G activity at G = 1, so the auxiliary rationing variable LGP transfers the full amount of the public good to each consumer. $CONSTRAINT:LGP LGP =E= G; Note that we have defined and used two different commodities for the public good endowments of the two consumers, PG1 and PG2 respectively, even though each consumer is getting the full (and therefore equal) amount of the public good. The reason that we do this is to prevent the consumers from being able to trade the goods in the event that they have different valuations of public good. One cannot sell his or her endowment of the public park to the other consumer. These personalized endowments of the public good are then inputs to each consumers welfare. Here are the two utility functions. $PROD:W1 s:1 O:PW1 I:PX I:PY I:PG1 s:1 O:PW2 I:PX I:PY I:PG2 Q:125 Q: 70 Q: 30 Q: 50 Q:125 Q: 30 Q: 70 Q: 50
P:0.5
$PROD:W2
P:0.5
Only consumer 1 is endowed wit PG1 and only consumer 1 demands PG1. Similar comments apply to consumer 2 and PG2. What about the valuations of the public goods at a price PG1 = PG2 = 0.5? We are going to assume that the initial data represent an optimal initial provision of the public good. According to the Samuelson rule, discussed in connection with the next model, the public good is optimally provided with non-distortionary taxation if the cost of providing one unit equals the sum of the demand prices, since each consumer consumes the full amount. This is satisfied here if each consumer has a demand price of 0.5 in the initial benchmark situation. Now we will give the full micro-consistent data matrix for this problem. Factor supplies are taxes at 25% to all sectors.
Markets| X Y G W1 W2 CONS1 CONS2 GOVT --------------------------------------------------------------PX | 100 -70 -30 PY | 100 -30 -70 PG | 50 -50 PL | -50 -30 -20 50 50 PK | -30 -50 -20 50 50 TAX | -20 -20 -10 50
PW1 | 125 -125 PW2 | 125 -125 PG1 | -25 25 PG2 | -25 25 --------------------------------------------------------------The government is treated as another consumer, with an income balance condition that the GOVT column sum is zero. Taxes are treated like a market subject to a zero-row-sum, market-clearing condition: all tax revenues generated must be assigned to something. The personalized public goods are endowments of the consumers and inputs into consumers welfare functions. Take some time working through the rows and columns of this matrix. Note the zero row and column sums, and make sure that you understand each one. Note finally that this data matrix is somewhat different from those used previous in that some of these entries are valuations are not observed in the market data (this was also true of the labor/leisure models, where the endowment of leisure and its valuation is not directly observed). The last four rows of the matrix are not observed in market data. We have constructed them under the assumptions that (a) the consumers have identical preferences for the public good, (b) the benchmark data represents a optimal provision of the public good. Now we present the full model using these data. Note the specification of the initial values of variables not equal to one and the value of the auxiliary variable (default is zero, not 1) prior to the replication check (iterlim = 0).
22 $TITLE $ONTEXT Production Sectors Consumers Model M34: Closed 2x2 Economy -Public Provision
Markets| X Y G W1 W2 CONS1 CONS2 GOVT --------------------------------------------------------------PX | 100 -70 -30 PY | 100 -30 -70 PG | 50 -50 PL | -50 -30 -20 50 50 PK | -30 -50 -20 50 50 TAX | -20 -20 -10 50
PW1 | 125 -125 PW2 | 125 -125 PG1 | -25 25 PG2 | -25 25 --------------------------------------------------------------$OFFTEXT PARAMETERS TAX Tax rate on factor inputs to all sectors; $ONTEXT $MODEL:M34 $SECTORS: X Y G W1 W2 ! ! ! ! ! Activity Activity Activity Activity Activity level level level level level for for for for for sector sector sector sector sector X Y G (public provision) W1 (consumer 1 welfare index) W2 (consumer 2 welfare index)
Price index for commodity X Price index for commodity Y Price index for commodity G(marginal cost of public output) Price index for primary factor L (net of tax) Price index for primary factor K Price index for welfare (consumer 1) Price index for welfare (consumer 2) Private valuation of the public good (consumer 1)
23 PG2 $CONSUMERS: CONS1 CONS2 GOVT $AUXILIARY: LGP $PROD:X s:1 O:PX I:PL I:PK s:1 O:PY I:PL I:PK s:1 O:PG I:PL I:PK ! Private valuation of the public good (consumer 2) ! Consumer 1 ! Consumer 2 ! Government ! Level of government provision
P:1.25 P:1.25
A:GOVT A:GOVT
T:TAX T:TAX
$PROD:Y
P:1.25 P:1.25
A:GOVT A:GOVT
T:TAX T:TAX
$PROD:G
P:1.25 P:1.25
A:GOVT A:GOVT
T:TAX T:TAX
$PROD:W1 s:1 O:PW1 I:PX I:PY I:PG1 $PROD:W2 s:1 O:PW2 I:PX I:PY I:PG2 $DEMAND:GOVT D:PG $DEMAND:CONS1 D:PW1 E:PL E:PK E:PG1 $DEMAND:CONS2
P:0.5
P:0.5
Q:125 Q: 50 Q: 50 Q: 50
R:LGP
R:LGP
$CONSTRAINT:LGP LGP =E= G; $OFFTEXT $SYSINCLUDE mpsgeset M34 TAX = LGP.L PG1.L PG2.L 0.25; = 1; = 0.5; = 0.5;
M34.ITERLIM = 0; $INCLUDE M34.GEN SOLVE M34 USING MCP; M34.ITERLIM = 2000; * * The following counterfactuals check that the original benchmark is indeed an optimum by raising/lowering the tax
TAX = 0.20; $INCLUDE M34.GEN SOLVE M34 USING MCP; TAX = 0.30; $INCLUDE M34.GEN SOLVE M34 USING MCP;
Exercises: (1) Define a set, parameters, and write a loop statement over finer values of the tax rate (e.g., 1% steps) storing the welfare of each consumer for each tax rate. See if the tax of 25% is optimal. Change one consumers valuation of the public good. The first run of the model should reproduce the benchmark data, but one consumer will prefer a different tax rate. Conduct the same experiment as in (1) with the new valuation and see what happens from the point of view of each consumer.
(2)
25 Model 35 This model is exactly the same as the previous one, except that the tax used to finance the public good is endogenous. Thus we will not repeat the data matrix here, and most other elements of the model are already familiar. Instead of TAX being a parameter, it is now an auxiliary variable. Its value is set by the constraint equation: $CONSTRAINT:TAX PG =E= PG1 + PG2; This is a condition noted by Samuelson many years ago. Since each consumer gets the full amount of the public good (the good is non-rivaled), the marginal benefit of another unit of the good is the sum of the demand prices for all the consumers. Efficiency is achieved when this sum of benefits is equal to the marginal cost of producing another unit. This is given by the above equation. Note that the auxiliary variable itself need not appear in the constraint equation associated with it. The solution algorithm will adjust TAX in order to satisfy this condition. Strictly speaking, the Samuelson rule is valid only if the tax needed to pay for the public good can be raised in a non-distortionary way. If distortionary taxes must be used, the sum of marginal benefits must be weighed against the marginal cost of production plus the marginal burden of taxation. It is beyond the scope of this chapter to discuss this problem further here. When we run this model, we will get back a value of TAX = 0.25, because we calibrated the prefences assuming that the initial data was optimal. As a counterfactual experiment, we change one consumers valuation of the public good, using a parameter VG1 which is a multiplier on consumer 1's initial valuation of the good. $PROD:W1 s:1 O:PW1 I:PX I:PY I:PG1 Q:125 Q: 70 Q: 30 Q: 50
P:(0.5*VG1)
In the counterfactual experiment we double consumer 1's willingness to pay, setting VG1 = 2. Here are some results from the counterfactual.
26 ------------------VAR VAR VAR VAR VAR VAR X Y G W1 W2 TAX . . . . . . 0.909 0.909 1.364 1.041 0.986 0.375 +INF +INF +INF +INF +INF +INF . . . . . .
With consumer 1's increased valuation of the public good, it is optimal to raise the tax from 0.25 to 0.375 as shown. Resources are transferred out of producing final goods X and Y and into producing G. The activity for G rises from 1.0 in the benchmark to 1.364. Note that, although the high tax is efficient according to the Samuelson rule, it nevertheless results in a redistribution of welfare from the low valuation consumer to the high valuation consumer. There are many uses for the type of modeling in public and environmental economics. Environmental economists in particular devote large amounts of effort to soliciting individuals preferences for non-market goods. The results of such surveys and studies can serve as inputs into calibrating the preferences for models such as this one. When calibrated, it is unlikely that the initial level of public goods (or environmental quality) is optimal. The following program can then be used to find what the optimum level and optimal taxes are.
27 $TITLE * * Model M35: Closed 2x2 Economy - Public Output with Samuelson Rule
This model is the same as M34 except that the tax to finance the public good is set endogenously
PARAMETER VG1 Preference index for public goods for consumer 1; VG1 = 1; $ONTEXT $MODEL:M35 $SECTORS: X Y G W1 W2 ! ! ! ! ! Activity Activity Activity Activity Activity level level level level level for for for for for sector sector sector sector sector X Y G (public provision) W1 (consumer 1 welfare index) W2 (consumer 2 welfare index)
$COMMODITIES: PX ! PY ! PG ! PL ! PK ! PW1 ! PW2 ! PG1 ! PG2 ! $CONSUMERS: CONS1 CONS2 GOVT $AUXILIARY: LGP TAX $PROD:X s:1 O:PX I:PL I:PK
Price index for commodity X Price index for commodity Y Price index for commodity G (marg cost of public output) Price index for primary factor L (net of tax) Price index for primary factor K Price index for welfare (consumer 1) Price index for welfare (consumer 2) Private valuation of the public good (consumer 1) Private valuation of the public good (consumer 2)
! Consumer 1 ! Consumer 2 ! Government ! Level of government provision ! Uniform value-added tax rate Q:100 Q: 50 Q: 30
P:1.25 P:1.25
A:GOVT A:GOVT
N:TAX N:TAX
28 $PROD:Y s:1 O:PY I:PL I:PK s:1 O:PG I:PL I:PK Q:100 Q: 30 Q: 50 Q: 50 Q: 20 Q: 20
P:1.25 P:1.25
A:GOVT A:GOVT
N:TAX N:TAX
$PROD:G
P:1.25 P:1.25
A:GOVT A:GOVT
N:TAX N:TAX
$PROD:W1 s:1 O:PW1 I:PX I:PY I:PG1 $PROD:W2 s:1 O:PW2 I:PX I:PY I:PG2 $DEMAND:GOVT D:PG $DEMAND:CONS1 D:PW1 E:PL E:PK E:PG1 $DEMAND:CONS2 D:PW2 E:PL E:PK E:PG2
P:0.5
P:0.5
Q:125 Q: 50 Q: 50 Q: 50 Q:125 Q: 50 Q: 50 Q: 50
R:LGP
R:LGP
$CONSTRAINT:LGP LGP =E= G; $CONSTRAINT:TAX PG =E= PG1 + PG2; $OFFTEXT $SYSINCLUDE mpsgeset M35
M35.ITERLIM = 0; $INCLUDE M35.GEN SOLVE M35 USING MCP; M35.ITERLIM = 2000; * * VG1 = 2; $INCLUDE M35.GEN SOLVE M35 USING MCP; What happens to consumer 2 welfare if consumer 1 decides she would like more public output:
30 Model 36 In many situations, initial data or the questions that a modeler may wish to analyze do not correspond to an equilibrium with all markets clearing. Unemployment is an obvious situation. While MPS/GE is designed to compute equilibria with markets clearing, there are some simple tricks to incorporate a rich set of situations and policy options into a model. This model considers classical unemployment, by which we will simply mean that there is a wage which is rigid downward, perhaps a legal minimum wage. This constraint may or may not be binding in equilibrium, and the complementarity features of GAMS and MPS/GE make this easy to compute. Other situations that the technique applies to include the analysis of quotas, which we will examine in the next chapter. The model we use here is essentially the same as the one we used in M21, where we considered tax reform as a counterfactual experiment. The data matrix shown below is the same one used in M21, except here we specify the total endowment of labor as 100 units, but an initial unemployment rate of 20% limits the amount of labor used in X and Y to 80 units. The parameter U0 is thus set at 0.20 initially. As was the case in M21, we assume that there is initially a tax of 100% on the labor used in the production of X. The consumer (supply) price of labor is chosen to be one, so the producer price (user cost) is 2, and this must appear in the price field for the X production block. We model unemployment with the use of an auxiliary variable and a constraint equation. The auxiliary variable is the unemployment rate, and is a rationing multiplier on the consumers endowment of labor. $DEMAND:CONS D:PW Q:200 E:PL Q:(80/(1-U0)) E:PL Q:(-80/(1-U0)) R:U E:PK Q:100 MPS/GE does not permit an arithmetic operation in an R field, so we specify a second row giving an negative endowment of labor, which will work unless the overall endowment becomes negative. Incidentally, any arithmetic operation in a Q or P field must be enclosed in parentheses. We include U0 in the Q field here rather than just put 100 so that the modeler can change this parameter if desired. Note that at the initial unemployment rate of 20% the values of the two E fields sum to 80, the amount used in production in the benchmark. In setting the minimum wage constraint, the modeler must decide on what defines the minimum level. Minimum in terms of what? Here we are going to chose PW, the price of buying one unit of utility, or in other words the real consumer price index. If PW is chosen as the numeraire which we have been doing in these exercises, then the nominal value of PL is fixed, but this will not be the case if something else is chosen as numeraire. In any case, the point is
31 that the modeler should make a conscious choice of the numeraire for the minimum wage rate. In many countries it is periodically adjusted to reflect changes in the consumer price index, and PW is of course the theoretically ideal consumer price index. Since units are chosen such that the prices PL and PW are initially equal to one, the constraint equation setting the value of the auxiliary variable U is given by: $CONSTRAINT:U PL =G= PW; Running the model verifies that we have benchmarked it correctly, and that the initial unemployment rate is 20%. For a counterfactual experiment, we introduce a tax reform as in Model 21, and replace the 100% tax on labor in X with equal tax rates of 25% on both factors (although this is still a distortionary tax. Now run the model. Some of the results are as follows: LOWER ------------------------------VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR X Y W PX PY PL PK PW CONS U . . . . . . . 1.000 . . LEVEL 1.178 1.106 1.142 0.969 1.032 1.051 1.005 1.000 228.374 . UPPER +INF +INF +INF +INF +INF +INF +INF 1.000 +INF +INF MARGINAL . . . . . . . EPS . 0.051
The minimum wage ceases to be binding (PL = 1.051) and unemployment falls to zero (note that the marginal on U is the excess of PL over PW). There is a very large increase in welfare, which goes to 1.142 as the increases in employment reinforces the tax reform. There are some very interesting policy economics in this example. Initially, we have two distortions that are reinforcing one another. If we reform the tax structure, the second distortion is automatically removed by making it non-binding. To see this effect, we do one final counterfactual in the model, which is to fix the unemployment rate at its initial value of 20%, but allow the tax reform. If you look at the listing file, you will see that welfare rises to only 1.021. Most of the effect of the tax reform shown above is its indirect effect in eliminating the binding minimum wage constraint.
32 $TITLE $ONTEXT Production Sectors Consumers Model M36: Closed 2x2 Economy - Taxes and Classical Unemployment
Markets | X Y W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -20 -60 | 100*(1-U) PK | -60 -40 | 100 TAX | -20 0 | 20 -----------------------------------------------------$OFFTEXT PARAMETERS TX Proportional output tax on sector X, TY Proportional output tax on sector Y, TLX Ad-valorem tax on labor inputs to X, TKX Ad-valorem tax on capital inputs to X, U0 Initial unemployment rate; U0 = 0.20; $ONTEXT $MODEL:M36 $SECTORS: X Y W $COMMODITIES: PX PY PL PK PW $CONSUMERS: CONS ! Activity level for sector X ! Activity level for sector Y ! Activity level for sector W (Hicksian welfare index) ! ! ! ! ! Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L (net of tax) primary factor K welfare (expenditure function)
33 $PROD:X s:1 O:PX I:PL I:PK $PROD:Y s:1 O:PY I:PL I:PK $PROD:W s:1 O:PW I:PX I:PY $DEMAND:CONS D:PW E:PL E:PL E:PK $CONSTRAINT:U PL =G= PW; $OFFTEXT $SYSINCLUDE mpsgeset M36 PW.FX = 1; TX TY TLX TKX U.L = = = = = 0; 0; 1; 0; U0; Q:100 Q: 20 Q: 60 Q:100 Q: 60 Q: 40 Q:200 Q:100 Q:100 Q:200 Q:(80/(1-U0)) Q:(-80/(1-U0)) Q:100 A:CONS T:TX A:CONS T:TLX A:CONS T:TKX
P:2
T:TY
R:U
M36.ITERLIM = 0; $INCLUDE M36.GEN SOLVE M36 USING MCP; M36.ITERLIM = 2000; * * TLX TKX TX TY = = = = As in M31, we replace the tax on labor inputs by a uniform tax on both factors: 0.25; 0.25; 0; 0;
34 $INCLUDE M36.GEN SOLVE M36 USING MCP; U.FX = 0.20; $INCLUDE M36.GEN SOLVE M36 USING MCP;
Exercises: (1) (2) Try a different numeraire for defining the minimum wage and see what happens. If you want to be a little bit more ambitious, try adding a labor-leisure decision to the problem.
35 Model 37 As in the case of labor supply, we would like to have models in which the stock of capital is endogenous. This requires dynamic modeling, a significant complication of what we have done to this point. This chapter will not consider true dynamic modeling. However, we will present a shortcut that is very valuable in many situations. In models for which there exists a steady state, it is possible to represent this steady state as a complementarity problem not that different from our static models. We can then at least perform comparative steady-state experiments, in which a parameter change moves us from one steady state to another. But actually solving for the transition path requires a more complicated analysis that is postponed until later in the book. Model 37 incorporates optimal capital accumulation via the use of a rationing constraint and endogenous taxes to create a model for comparative steady state analysis when the capital stock is endogenously adjusted to its steady-state value. The labor force is assumed fixed in this model. Let r denote the rental price (for one period) of a unit of capital and let pk denote the price of a new unit of capital. will denote the rate of depreciation of capital per period, and will denote the discount rate between periods. The steady-state optimal capital accumulation condition is a relationship between the price and rental rate on capital. The rental rate must be given by: r 1 1 p 1 k
The rental price (r) is equal to the price of creating a new unit of capital (pk) minus the present value of what the capital could be sold for next period. In the steady state, the price of a new unit next period is the same, so an old unit can be sold for its original value minus one periods depreciation (1 - ). The present value of the undepreciated portion is thus (1 - )/(1+ ). The dynamic steady-state problem is represented as a static problem using two tricks. First, the use of capital is subsidized to create the desired wedge (denoted TAU) between the rental price and the price of new capital. Following the declaration of the parameters DELTA, RHO, and TAU you will see: TAU = - (1 - DELTA) / (1 + RHO); This then appears as a subsidy to capital use, creating the wedge between the rental price and the price of producing a new unit of capital (PK). $PROD:X s:1 O:PX I:PL Q:100 Q: 40
36 I:PK $PROD:Y s:1 O:PY I:PL I:PK Q:120 Q:100 Q: 60 Q: 80 P:0.5 A:CONS T:TAU
P:0.5
A:CONS
T:TAU
One unit of new capital is produced using one unit of labor, as you will see in the production block for activity K. Second, since in the steady state newly produced capital is equal to depreciation and depreciation is equal to a share DELTA of total capital, a rationing constraint is specified to "endow" consumers with the carryforward from the previous period. Let Ks denote the capital stock and Kn the production of new capital. In the steady state, these are related by: Kn K s Ks Kn 1
The carryforward from the previous period is the steady state stock minus new production. It is is called KFORWD and given by: carry forward = KFORWD = Ks K n Kn Kn ( 1 ) Kn
So in the model below, we will give the consumer an endowment, via the rationing multiplier KFORWD, the quantity of capital on the right-hand side of the above equation. $DEMAND:CONS D:PW E:PL E:PK
Q:160 Q:1
R:KFORWRD
$CONSTRAINT:KFORWRD KFORWRD =E= K * (1-DELTA) / DELTA; That completes the model description. As has been our practice, we include the initial micro-consistent data matrix in the program. Study this carefully in going through the program. Note that in the data matrix, the consumer is endowed with 140 units of capital. In the program, this is the carry forward and is subject to change in counterfactual experiments. Two counterfactuals are run in the program. First the rate of time preference is raised. In the second, is set back to its initial value, and there is a tax on new capital production. See if you can guess what the effects of these changes should be, and then look at the results.
37 $TITLE $ONTEXT Production Sectors Consumers Model M38: Closed 2x2 Economy - Steady State Capital Stock
Markets | X Y K W | CONS -----------------------------------------------------PX | 100 -100 | PY | 100 -100 | PW | 200 | -200 PL | -40 -60 -60 | 160 PK | -120 -80 60 | 140 SUB | 60 40 | -100 -----------------------------------------------------$OFFTEXT PARAMETERS RHO DELTA TAU KTAX NEWCAP RHO DELTA TAU KTAX = = = = Time preference parameter, Depreciation rate, Effective capital use tax (it is a subsidy, its < 0), Tax on new capital production New capital stock after counterfactual (= 1 initially);
$ONTEXT $MODEL:M37 $SECTORS: X Y W K $COMMODITIES: PX PY PL PK PW ! ! ! ! ! ! ! ! ! Activity level for sector X Activity level for sector Y Activity level for sector W (Hicksian welfare index) Capital stock index Price Price Price Price Price index index index index index for for for for for commodity X commodity Y primary factor L (net of tax) primary factor K welfare (expenditure function)
38 $CONSUMERS: CONS $AUXILIARY: KFORWRD $PROD:X s:1 O:PX I:PL I:PK s:1 O:PY I:PL I:PK O:PK I:PL $PROD:W s:1 O:PW I:PX I:PY ! Income level for consumer CONS ! Capital stock from previous period Q:100 Q: 40 Q:120 Q:100 Q: 60 Q: 80 Q:1 Q:1 Q:200 Q:100 Q:100
P:0.5
A:CONS
T:TAU
$PROD:Y
P:0.5 A:CONS
A:CONS T:KTAX
T:TAU
$PROD:K
Q:160 Q:1
R:KFORWRD
$CONSTRAINT:KFORWRD KFORWRD =E= K * (1-DELTA) / DELTA; $OFFTEXT $SYSINCLUDE mpsgeset M37 K.L = 60; KFORWRD.L = 140; PW.FX = 1; $INCLUDE M37.GEN SOLVE M37 USING MCP;
RHO = 0.6; TAU = - (1 - DELTA) / (1 + RHO); $INCLUDE M37.GEN SOLVE M37 USING MCP; NEWCAP = K.L/60; DISPLAY NEWCAP; * Set rho back to 0.4, tax new capital at 0.20
RHO = 0.4; TAU = - (1 - DELTA) / (1 + RHO); KTAX = 0.20; $INCLUDE M37.GEN SOLVE M37 USING MCP; NEWCAP = K.L/60; DISPLAY NEWCAP;
Exercises: (1) Make sure you understand the economic intuition behind the results in the counterfactuals. If you are ambitious, write a new model combining endogenous labor supply and an equal yield tax constraint with this model. Do some experiments to see if the capital tax or the labor tax is more distortionary. This is an important use of applied modeling: theory can never tell you which of two distortionary taxes is more distortionary.
(2)
Model 41 This is a very simple 2-good, 2-factor model in which the rest of the world is not explicitly modeled. Trading opportunities are summarized by simple functions which allow the economy to transform one good (an export) into another (an import). The technology of these functions represents world prices. If good X1 exchanges for two units of X2, then the world price ratio is implicitly given by p1/p2 = 2. We will assume that these technologies or price ratios are fixed in this model and the first few models to follow. This is commonly know as the smallcountry assumption: the country can trade as much or as little as it wants at fixed prices. We assume in the benchmark data that the country exports X1 in exchange for X2, but we will allow for the fact that some policy or endowment change could actually reverse the direction
2 of trade by specifying (initially inactive) functions that transform goods in the opposite direction. Here is the initial data, in which 50 units of good X1 are exchanged for 50 units of good X2 at an implicit price ratio of p1/p2 = 1. Production Sectors Consumer
Markets | X1 X2 E1 M2 W CONS ---------------------------------------------------------------P1 | 150 -50 -100 P2 | 50 50 -100 PL | -100 -20 120 PK | -50 -30 80 PW | 200 -200 PFX | 50 -50 ---------------------------------------------------------------Technology parameters are specified in these functions that allow the modeler to change the terms of trade. These are given by: PARAMETERS PE2 PM1 PE1 PM2 TM2 PE1 PM2 PE2 PM1 = = = = 1; 1; 0.99; 1.01; Export Import Export Import Import price of good 2, price of good 1, price of good 1, price of good 2, tariff for god 2;
E1 and M2 production activities that are the initially active trade links. E1 stands for exports of good X1 . While we could specify this activity as directly transforming X1 into X2 , in more complicated models with many goods it proves useful to define another good which we will call foreign exchange and whose price is denoted PFX. All trade is mediated through the foreign exchange market. Thus activity E1 transforms X1 into foreign exchange and M2, the import activity for good 2, transforms foreign exchange into imports of good 2. These activities are given as follows: $PROD:E1 O:PFX I:P1 Q:(50*PE1) Q:50
TM2 is an import tariff on good 2, which is initially set to zero. We also specify trade links in the opposite direction, which are initially inactive as noted above. At this point, we have an opportunity to make an important technical remark which may save the modeler some misery later on. Suppose that good 1 can be transformed into good 2 at a price of one, and good 2 can be transformed into good 1 at a price of 1. Then if the export of 50 units of good 1 and imports of 50 units of good 2 is an equilibrium, then so is the export of 100 units of good 1 followed by the imports of 50 units of good 2 plus 50 units of good 1. In technical terms the model is degenerate, it has infinitely many solutions. In such a situation, the solver will either fail to converge, or converge to an arbitrary solution. The latter will have net exports (exports minus imports) of X1 equal to 50 and net imports of X2 equal to 50, but may involve any amount of gross trade. This is why we specify the prices or terms of trade differently for the activities M1 and E2, so that it is never profitable to export and import the same good. Here is the model. In the first counterfacual we impose a tariff and 5% and then a tariff of 10%. When you look at the listing files, you will see that the tariff of 10% is prohibitive, all trade ceases. The last experiment returns the tariff to zero, and improves the terms of trade (relative prices of the export good) to 1.2.
4 $TITLE $ONTEXT Production Sectors Consumer Model M41: Small open economy model. Two goods, two factors.
Markets | X1 X2 E1 M2 W CONS ----------------------------------------------------------------P1 | 150 -50 -100 P2 | 50 50 -100 PL | -100 -20 120 PK | -50 -30 80 PW | 200 -200 PFX | 50 -50 -----------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 PE1 PM2 PE2 PM1 TM2 = = = = = 1; 1; 0.99; 1.01; 0; Export Import Export Import Import price of good 2, price of good 1, price of good 1, price of good 2, tariff for god 2;
$ONTEXT $MODEL:M41 $SECTORS: X1 X2 E1 E2 M1 M2 W $COMMODITIES: P1 P2 PFX ! ! ! ! ! ! ! Production index for good 1 Production index good 2 Export level of good 1 Export level of good 2 Import level of good 1 Import level of good 2 Welfare index
! Price index for good 1 ! Price index for good 1 ! Read exchange rate index
5 PW PL PK $CONSUMERS: CONS $PROD:X1 s:1 O:P1 I:PL I:PK s:1 O:P2 I:PL I:PK O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:W s:1 O:PW I:P1 I:P2 Q:50 Q:(50*PM1) Q:200 Q:100 Q:100 Q:200 Q:120 Q: 80 Q:(50*PE2) Q:50 Q:50 Q:(50*PM2) A:CONS T:TM2 ! Welfare price index ! Wage index ! Capital rental index ! Income level for representative agent Q:150 Q:100 Q: 50 Q:50 Q:20 Q:30 Q:(50*PE1) Q:50
$PROD:X2
$PROD:E1
M41.ITERLIM = 0; $INCLUDE M41.GEN SOLVE M41 USING MCP; M41.ITERLIM = 2000; TM2 = 0.05; $INCLUDE M41.GEN SOLVE M41 USING MCP; TM2 = 0.10; $INCLUDE M41.GEN SOLVE M41 USING MCP; TM2 = 0.; PE1 = 1.2; PM1 = 1.21; $INCLUDE M41.GEN SOLVE M41 USING MCP;
Exercises: (1) If you have an international trade textbook, review the Stopler-Samuelson theorem. Examine the effects of the tariff and the terms-of-trade improvement and see that the results validate the theorem. From a policy point of view, the redistribution effects of tariffs are very important and help explain their existence. Set the tariff to zero and specify an export subsidy on the initially inactive link E2, exports of good 2. How high does this subsidy have to be in order to reverse the direction of trade? Work out the export tax on X1 that should be equivalent to the import tariff on X2 and verify this numerically (hint: the two tax rates are not same, since the base is different, an issue discussed in the previous chapter).
(2)
(3)
7 Model 42 This model has a 20% tariff in the benchmark data. It is important to keep track of prices and trade balance in this situation. Here is the data matrix. Production Sectors Consumer
Markets | X1 X2 E1 M2 W CONS ---------------------------------------------------------------P1 | 150 -50 -100 P2 | 40 60 -100 PL | -100 -20 120 PK | -50 -20 70 PW | 200 -200 PFX | 50 -50 T (tar rev)| -10 10 ---------------------------------------------------------------Trade balance holds, since exports of good 1 generate 50 units of foreign exchange and those 50 units are spent on imports. Consumers spend 60 on imports of which 10 is the tariff, or 20% of the value of imports (10/50). This tariff revenue is returned to consumers. All row and column sums equal zero in this matrix. In open economy models, the modeler must chose units or prices. The convention we adopt here is that all domestic prices are equal to 1 initially. Since the export good X1 is freely traded, then the international price of X1 is also equal to 1. However, the import good has a domestic price equal to (1 + TM2) times the world price, so if the domestic price is equal to 1 then the world price must equal 1/ (1 + TM2) = 1/1.2. Thus the -50 in the column M2 of the matrix is interpreted as 60 units at a price of 1/1.2. This is the way the program is formulated below. The rest of the model should be straight forward at this point. The counterfactual experiment is free trade.
8 $TITLE $ONTEXT In this example, units are chosen such that all DOMESTIC prices equal one initially. Implied world prices are then P1/P2 = 1.2 Production Sectors Consumer Model M42: Small open economy model with a benchmark tariff.
Markets | X1 X2 E1 M2 W CONS -----------------------------------------------------------------P1 | 150 -50 -100 P2 | 40 60 -100 PL | -100 -20 120 PK | -50 -20 70 PW | 200 -200 PFX | 50 -50 T (tar rev)| -10 10 -----------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 PE1 PM2 PE2 PM1 TM2 = = = = = Export Import Export Import Import 1; 1/(1.2); PM2*0.99; 1.01; 0.20; price of good 2, price of good 1, price of good 1, price of good 2, tariff for good 2;
$ONTEXT $MODEL:M42 $SECTORS: X1 X2 E1 E2 M1 ! ! ! ! ! Production index for good 1 Production index good 2 Export level of good 1 Export level of good 2 Import level of good 1
9 M2 W $COMMODITIES: P1 P2 PFX PW PL PK $CONSUMERS: CONS $PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK $PROD:E1 O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:W s:1 O:PW I:P1 I:P2 Q:50 Q:(50*PM1) Q:200 Q:100 Q:100 Q:200 Q:120 Q:(60*PE2) Q:60 Q:60 Q:(60*PM2) A:CONS T:TM2 Q:(50*PE1) Q:50 ! Import level of good 2 ! Welfare index ! ! ! ! ! ! Price index for good 1 Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index
! Income level for representative agent Q:150 Q:100 Q: 50 Q:40 Q:20 Q:20
10 E:PK Q: 70
M42.ITERLIM = 0; $INCLUDE M42.GEN SOLVE M42 USING MCP; M42.ITERLIM = 2000; * TM2 = 0; $INCLUDE M42.GEN SOLVE M42 USING MCP; Counterfactual experiment is free trade
Model M43 In models with many countries, the modeler may wish to choose world prices as all equaling 1. Model M43 is exactly the same as model M42 except that we choose world prices as 1. This only affects the calibration via the choice of units for X2 . Since the world price of good 2 is equal to 1, then the domestic price is P2 = 1.2. But if this is the case, then the value of X2 production (40) and consumption (100) must imply benchmark quantities of 40 = 1.2*(quantity) quantity = 33.3333 100 = 1.2*(quantity) quantity = 83.3333 You will see these numbers in the quantity fields of the program. W for example, is calibrated as: $PROD:W s:1 O:PW I:P1 I:P2 Q:200 Q:100 Q:83.33333
P:1.2
Other features of the model are identical to M42 as noted, so here is the program.
11 $TITLE Model M43: Small open economy model with a benchmark tariff. * alternaive price normalization from M42 $ONTEXT This model is equivalent to M42 except that units are chosen such that all WORLD prices equal one initially. The benchmark domestic price ratio is then P2 = 1.2. Note that this changes the units of measurement in good 2. There are now 83.3333 units of good 2 consumed instead of 100, but this is simply a change in units of measure and has no welfare consequences. Production Sectors Consumer
Markets | X1 X2 E1 M2 W CONS -----------------------------------------------------------------P1 | 150 -50 -100 P2 | 40 60 -100 PL | -100 -20 120 PK | -50 -20 70 PW | 200 -200 PFX | 50 -50 T | -10 10 -----------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 PE1 PM2 PE2 PM1 TM2 = = = = = 1; 1; 0.99; 1.01; 0.20; Export Import Export Import Import price of good 2, price of good 1, price of good 1, price of good 2, tariff for good 2;
$ONTEXT $MODEL:M43
12 $SECTORS: X1 X2 E1 E2 M1 M2 W $COMMODITIES: P1 P2 PFX PW PL PK $CONSUMERS: CONS * ! ! ! ! ! ! ! ! ! ! ! ! ! Production index for good 1 Production index good 2 Export level of good 1 Export level of good 2 Import level of good 1 Import level of good 2 Welfare index Price index for good 1 Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index
Cobb-Douglas production in both sectors: Q:150 Q:100 Q: 50 Q:33.33333 Q:20 Q:20 Q:(50*PE1) Q:50 Q:50 Q:(50*PM2) Q:(50*PE2) Q:(50) Q:50 Q:(50*PM1) P:1.2
$PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX
$PROD:E1
A:CONS
T:TM2
13 $PROD:W s:1 O:PW I:P1 I:P2 Q:200 Q:100 Q:83.33333 Q:200 Q:120 Q: 70
P:1.2
$OFFTEXT $SYSINCLUDE mpsgeset M43 PW.FX = 1; * E1.L M2.L E2.L M1.L P2.L = = = = = Benchmark replication 1; 1; 0; 0; 1.2;
M43.ITERLIM = 0; $INCLUDE M43.GEN SOLVE M43 USING MCP; M43.ITERLIM = 2000; * TM2 = 0; $INCLUDE M43.GEN SOLVE M43 USING MCP; Counterfactual experiment is free trade
Exercise: Choices of units with which to interpret the data is a dull, but important step. Many calibration problems (failure to replicate the data as an initial equilibrium) can be traced to mistakes over price and quantity units when there are taxes or quotas in the initial data. So spend some time comparing this file to M42. Run the models and verify that all results on activity levels and welfare are the same.
14 Model 44 This model assumes the same benchmark data as the previous two models, but it assumes that there is a quota limiting imports. A quota is a quantitative restriction on imports, generally a maximum restriction although there could conceivably be a minimum quota. The former generates a gap between the foreign or world supply price and the domestic demand price for the rationed good. This difference, often referred to as a quota rent (it is a form of Ricardian rent), must go to some agent. In this model, we assume that the government implements the quota via the creation of licenses. These licenses may be auctioned off, sometimes referred to as an auction quota. Or they may simply be given out to some agents inside the economy. Since we have only a single representative household in this model, the model cannot really distinguish between these two. But in a model with several households it can produce an important difference. Indeed, quota licenses are sometimes a source of corruption in real economies, generating rents for favored individuals (the license owners) without them having to produce anything at all. Using a trick that may now seem familiar from earlier models, we use an auxiliary variable, Q, for an endogenous tax rate and a constraint equation to set the value of this tax. The revenue from this tax is assigned to the representative consumer in the block for the import demand for M2. $PROD:M2 O:P2 I:PFX Q:60 Q:(60*PM2) A:CONS N:Q
The constraint equation says to set the value of the tax Q such that the activity level for imports (calibrated to be 1 initially) is equal to 1. $CONSTRAINT:Q 1 =G= M2; Other aspects of the model should be familiar. We return here to the convention of model 42 that units are chosen such that all domestic prices equal 1. The counterfactual experiment is to set the quota equal to zero. This is done with the statement Q.FX = 0; since Q is a variable, not a parameter. An alternative way to do this is to declare a parameter and use it in place of the 1 on the left-hand side of the constraint equation. Then the quota can be set at any level. The value of Q can be thought of as the tariff equivalent of the quota or the shadow tariff. In one exercise following the model, you are asked to increase the size of the economy and see what happens to this shadow tariff. To free up a variable when it has been fixed, use: Q.L = 0; Q.UP = +INF.
15 $TITLE $ONTEXT In this example, units are chosen such that all DOMESTIC prices equal one initially. Implied world prices are then P1/P2 = 1.2 Production Sectors Consumer Model M44: Small open economy model with a (auction) quota
Markets | X1 X2 E1 M2 W CONS -----------------------------------------------------------------P1 | 150 -50 -100 P2 | 40 60 -100 PL | -100 -20 120 PK | -50 -20 70 PW | 200 -200 PFX | 50 -50 Q (quota rent)| -10 10 -----------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 PE1 PM2 PE2 PM1 TM2 = = = = = Export Import Export Import Import 1; 1/(1.2); PM2*0.99; 1.01; 0.20; price of good 2, price of good 1, price of good 1, price of good 2, tariff for good 2;
$ONTEXT $MODEL:M42 $SECTORS: X1 X2 E1 E2 M1 M2 ! ! ! ! ! ! Production index for good 1 Production index good 2 Export level of good 1 Export level of good 2 Import level of good 1 Import level of good 2
16 W $COMMODITIES: P1 P2 PFX PW PL PK $CONSUMERS: CONS $AUXILIARY: Q $PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK $PROD:E1 O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:W s:1 O:PW I:P1 I:P2 Q:50 Q:(50*PM1) Q:200 Q:100 Q:100 Q:(60*PE2) Q:60 Q:60 Q:(60*PM2) A:CONS N:Q Q:(50*PE1) Q:50 Q:150 Q:100 Q: 50 Q:40 Q:20 Q:20 ! Welfare index ! ! ! ! ! ! Price index for good 1 Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index
$CONSTRAINT:Q 1 =G= M2; $OFFTEXT $SYSINCLUDE mpsgeset M42 PW.FX = 1; E1.L = 1; M2.L = 1; E2.L = 0; M1.L = 0; Q.L = 0.20; M42.ITERLIM = 0; $INCLUDE M42.GEN SOLVE M42 USING MCP; M42.ITERLIM = 2000; * Counterfactual experiment is free trade
Exercises: (1) Free up the quota again (begin with the statements Q.L0 = 0; Q.UP = +INF; where LO stands for lower bound and UP stands for upper bound). Double factor endowments. (You can declare a parameter that is multiplied by the factor endowments as in model M1_MPS.) See what happens to the shadow tariff, the value of Q. Can you explain why? Following this experiment, fix Q at Q = 0.20, its initial value so that it is in fact a tariff. Again double the size of the economy and compare the results of this tariff experiment to the quota experiment.
(2)
18 Model M45 In some cases, countries impose a so-called voluntary export restraint (VER), which asks a foreign country or foreign firms to limit their exports to a certain quota level. The effect of this is to transfer the quota rents to the foreign country. It is like having a tariff and giving the tariff revenue to the foreign government. In order to model this, we introduce a second consumer, denoted CONSF where F is for foreign and label the domestic consumer as CONSH. CONSF receives the quota rent (shadow tariff revenue) and demands some of the countrys export good, X1. Here the numbers we use: Production Sectors Consumer
Markets | X1 X2 E1 M2 W CONSH CONSF ---------------------------------------------------------------P1 | 150 -50 -90 -10 P2 | 40 60 -100 PL | -100 -20 120 PK | -50 -20 70 PW | 190 -190 PFX | 50 -50 Q (ver) | -10 10 ---------------------------------------------------------------This data is implemented in exactly the manner used in the previous example. We declare an auxiliary variable V, which appears in an N (endogenous tax) field on the import activity, and a constraint equation setting the value of V. In order to compare this to the auction quota of the previous example, we also declare an auxiliary quota variable Q which is an endogenous tax paid to the domestic consumer, and set by a second constraint equation. In the initial benchmark run of the model, we set Q to zero, Q.FX = 0; and replicate the bechmark. For our first counterfactual, we replace the VER with the quota using the syntax noted in the previous model: Q.LO = 0; Q.UP = +INF; V.FX = 0; Run the model and examine the results. The equilibria are quite different and the shadow values (Q and V) are not the same. The switch to the auction quota creates an income effect which leads the domestic consumer to demand more goods and more imports at initial prices. But more imports cannot occur under the quota, so in effect the quota becomes more restrictive and the shadow tariff increases (Q is larger than V). Note that the welfare effect of switching from the VER to the quota is quite large.
19 $TITLE $ONTEXT In this example, units are chosen such that all DOMESTIC prices equal one initially. Production Sectors Consumer Model M44: Small open economy model with a VER quota
Markets | X1 X2 E1 M2 W CONSH CONSF -----------------------------------------------------------------P1 | 150 -50 -90 -10 P2 | 40 60 -100 PL | -100 -20 120 PK | -50 -20 70 PW | 190 -190 PFX | 50 -50 Q (ver rent)| -10 10 -----------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 PE1 PM2 PE2 PM1 TM2 = = = = = Export Import Export Import Import 1; 1/(1.2); PM2*0.99; 1.01; 0.20; price of good 2, price of good 1, price of good 1, price of good 2, tariff for good 2;
$ONTEXT $MODEL:M42 $SECTORS: X1 X2 E1 E2 M1 M2 ! ! ! ! ! ! Production index for good 1 Production index good 2 Export level of good 1 Export level of good 2 Import level of good 1 Import level of good 2
20 W $COMMODITIES: P1 P2 PFX PW PL PK $CONSUMERS: CONSH CONSF $AUXILIARY: V Q $PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK $PROD:E1 O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:W s:1 O:PW I:P1 I:P2 Q:50 Q:(50*PM1) Q:190 Q: 90 Q:100 Q:(60*PE2) Q:60 Q:60 Q:(60*PM2) A:CONSF N:V A:CONSH N:Q Q:(50*PE1) Q:50 ! Welfare index ! ! ! ! ! ! Price index for good 1 Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index
! Income level for domestic consumer ! Income level for foreign consumer (quota holder) ! Endogenous tax, shadow tax for VER ! Endogenous tax, shadow tax for quota Q:150 Q:100 Q: 50 Q:40 Q:20 Q:20
$CONSTRAINT:V 1 =G= M2; $CONSTRAINT:Q 1 =G= M2; $OFFTEXT $SYSINCLUDE mpsgeset M42 PW.FX = 1; E1.L = 1; M2.L = 1; E2.L = 0; M1.L = 0; V.L = 0.20; Q.FX = 0; M42.ITERLIM = 0; $INCLUDE M42.GEN SOLVE M42 USING MCP; M42.ITERLIM = 2000; * Counterfactual: replace the VER with an auction quota
Q.LO = 0; Q.UP = +INF; V.FX = 0; $INCLUDE M42.GEN SOLVE M42 USING MCP;
Exercise: Replace the initial VER with a tariff of 0.20 on the import good. Assign the tariff revenue to agent CONSF. Show that this replicates the benchmark data. Show that a tariff of 0.20 assigned to CONSH does not replicated the auction quota calculated in the counterfactual. Why not?
22 Model M46 Real economies are dynamic and therefore real economies can run trade imbalances in any period by buying or selling assets. Any real data that a modeler is likely to encounter will almost surely have a current account surplus or deficit in any one period. Yet static models are useful for policy analysis and dynamic models are costly to construct in terms of time and data. When a modeler wants to construct a static model starting with data characterized by a trade imbalance, the model has several choices. These are sometime referred to as closure rules. Some closure rules allow the trade balance to vary when doing counterfactuals. The problem with this practice is that it makes welfare effects difficult to interpret. If a policy experiment leads to an increase in the deficit, welfare will increase due, in fact, to foreign borrowing. This is misleading, since at some point that borrowing will have to be paid back. In general, we prefer to hold the deficit fixed when doing counterfactuals in static models, so as to produce more easily interpreted welfare results. Model M46 shows how to do this. The simplest trick is to just assume that the representative consumer has an initial endowment of foreign exchange equal to the deficit. We can think of this as the amount of foreign borrowing in the initial benchmark equilibrium. This is then held constant in any counterfactual experiments. An initial surplus can be represented by a negative endowment of PFX in the benchmark, denoting foreign lending. This is what we do below. Benchmark exports are 40, imports are 60, and the deficit is financed by selling the initial benchmark endowment of 20 units of PFX. The latter is specified by the parameter BOPDEF which we can change in counterfactual experiments. $DEMAND:CONS D:PW E:PL E:PK E:PFX Q:220 Q:120 Q: 80 Q:BOPDEF
For a counterfactual, we eliminate the deficit, setting BOPDEF = 0. Obviously, welfare is going to fall. This leads us to a short discussion about another modeling technique. Sometimes, modelers have good reason to believe that the benchmark data is not an equilibrium, or wish to conduct experiments starting from some other benchmark situation. In such situations, the modeler can compute a revised benchmark by eliminating the source of disequilibrium to generate a new benchmark data set. In the present case, if the modeler wanted to start with a situation of a zero balance of trade, the model can then benchmark the model as we have done, and then run the model with BOPDEF = 0. The new equilibrium values of activities, prices, and income then become the new data set or revised benchmark for policy analysis.
23 $TITLE Model M46: Small open economy model with a benchmark trade * imbalance. $ONTEXT Production Sectors Consumer
Markets | X1 X2 E1 M2 W CONS -----------------------------------------------------------------P1 | 150 -40 -110 P2 | 50 60 -110 PL | -100 -20 120 PK | -50 -30 80 PW | 220 -220 PFX | 40 -60 20 -----------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 BOPDEF PE1 PM2 PE2 PM1 TM2 = = = = = 1; 1; 0.99; 1.01; 0; Export price of good 2, Import price of good 1, Export price of good 1, Import price of good 2, Import tariff for good 2, Balance of payments net deficit;
$ONTEXT $MODEL:M46 $SECTORS: X1 X2 E1 E2 M1 M2 W $COMMODITIES: P1 ! ! ! ! ! ! ! Production index for good 1 Production index good 2 Export level of good 1 Export level of good 2 Import level of good 1 Import level of good 2 Welfare index
24 P2 PFX PW PL PK $CONSUMERS: CONS $PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK $PROD:E1 O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:W s:1 O:PW I:P1 I:P2 Q:40 Q:(40*PM1) Q:220 Q:110 Q:110 Q:220 Q:120 Q: 80 Q:BOPDEF Q:(60*PE2) Q:60 Q:60 Q:(60*PM2) A:CONS T:TM2 Q:(40*PE1) Q:40 ! ! ! ! ! Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index
! Income level for representative agent Q:150 Q:100 Q: 50 Q:50 Q:20 Q:30
M46.ITERLIM = 0; $INCLUDE M46.GEN SOLVE M46 USING MCP; M46.ITERLIM = 2000; * Compute a counterfactual experiment setting the deficit to zero.
Exercise: Set BOPDEF to a negative value (a surplus) and see what happens. Interpret the results.
26 Model 47 Another feature of real data that confronts modelers is that there is generally two-way trade in any good in the data; that is, each good is both imported and exported. This is often attributed to the fact that data is actually classified by industries and any industry is actually an aggregation of many goods. Yet two-way trade or cross hauling will persist in the data even at an extremely fine level of disaggregation. No research will ever get data that is free of cross hauling so the question is what to do about it. Model 47 is calibrated to the following data: Production Sectors Consumer
Markets | X1 X2 E M W CONS --------------------------------------------------------------P1 | 150 -100 50 -100 P2 | 50 -25 75 -100 PL | -100 -20 120 PK | -50 -30 80 PW | 200 -200 PFX | 125 -125 --------------------------------------------------------------Each good (industry) is both imported and exported. One way to handle this is to simply net out the two way trade from the gross flows and replace the data with net trade only. If we do this in the present model, we arrive exactly at model M41. We can then proceed as before. The other alternative in competitive models is to assume that the domestic and foreign goods are not really identical. This is the so-called Armington assumption: domestic and foreign goods in the same industrial classification are imperfect substitutes. This is really quite simple for us in MPS/GE. We do not have to do anything on the production side or in the demand blocks. Indeed, all that we have to do is to change the preferences to define four distinct goods and a nesting structure for the utility function. In our case we write this as: $PROD:W s:1 G1:ESUB O:PW Q:200 I:P1 Q: 50 I:PF1 Q: 50 I:P2 Q: 25 I:PF2 Q: 75 G2:ESUB G1: G1: G2: G2:
The modeler is completely free to choose any nesting structure of course, but this is a common thing to do. The domestic (P1) and foreign good (PF1) in industry 1 are in a nest as are the domestic and foreign goods in industry 2 and these nest have the same elasticity of substitution: a domestic and foreign good in the same industry have the same substitution
27 elasticity regardless of industry. The composite industry 1 good and the composite industry 2 good are then combined in an upper level nest. This is generally assumed to have a lower elasticity of substitution: two industries are poor substitutes than a domestic and foreign good in the same industry. Here we specify the upper nest with an elasticity of substitution of 1, while the domestic-foreign goods have an elasticity of substitution of ESUB = 4. Other assumptions are possible, such as grouping all foreign goods together in a nest and all domestic goods in another. But the procedure just outlined seems reasonable to many modelers. The rest of the program is rather familiar, except that the four trade activities are now defined for four distinct goods. There is no need now to worry about a domestic good being both imported and exported. It cannot, by definition, be imported. After the replication check, we run the same counterfactuals that we did for model M41, a tariff of 5% and then 10% on (foreign) good 2.
28 $TITLE Model M47: Small open economy model with an Armington * formulation. $ONTEXT Production Sectors Consumer
Markets | X1 X2 E M W CONS --------------------------------------------------------------P1 | 150 -100 50 -100 P2 | 50 -25 75 -100 PL | -100 -20 120 PK | -50 -30 80 PW | 200 -200 PFX | 125 -125 --------------------------------------------------------------$OFFTEXT PARAMETERS PE2 PM1 PE1 PM2 TM2 ESUB PE1 = 1; PM2 = 1; PE2 = 1; PM1 = 1; TM2 = 0; ESUB = 4; $ONTEXT $MODEL:M47 $SECTORS: X1 X2 E1 E2 M1 M2 W ! ! ! ! ! ! ! Production index Production index Export index for Export index for Import index for Import index for Welfare index for good 1 good 2 good 1 good 2 good 1 good 2 Export price of good 2, Import price of good 1, Export price of good 1, Import price of good 2, Import tariff for good 2, Armington elasticity of substitution;
29 $COMMODITIES: P1 P2 PF1 PF2 PFX PW PL PK $CONSUMERS: CONS * ! ! ! ! ! ! ! ! Price index for good 1 Price index for good 1 Price index for imported good 1 Price index for imported good 2 Read exchange rate index Welfare price index Wage index Capital rental index
$PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK * * $PROD:E1 O:PFX I:P1 $PROD:E2 O:PFX I:P2 $PROD:M1 O:PF1 I:PFX $PROD:M2 O:PF2 I:PFX $PROD:W
We scale the export price for good 1 and the import price for good 2 to both be unity: Q:(PE1*100) Q:100 Q:(PE2*25) Q:25 Q:50 Q:(PM1*50) Q:75 Q:(PM2*75)
A:CONS
T:TM2
30 I:P2 I:PF2 $DEMAND:CONS D:PW E:PL E:PK Q: 25 Q: 75 Q:200 Q:120 Q: 80 G2: G2:
$OFFTEXT $SYSINCLUDE mpsgeset M47 PW.FX = 1; M47.ITERLIM = 0; $INCLUDE M47.GEN SOLVE M47 USING MCP; M47.ITERLIM = 2000; TM2 = 0.05; $INCLUDE M47.GEN SOLVE M47 USING MCP; TM2 = 0.10; $INCLUDE M47.GEN SOLVE M47 USING MCP;
31 Model 48 For many countries, or for a small number of commodities for one country, the smallcountry assumption of fixed world prices may not be appropriate. One alternative is of course to model the whole world. But it may be convenient and appropriate for the modeler to stick with the country and question and continue to represent the rest of the world with trade transformation functions. The purpose of this model is to show how to do this, allowing for prices to change with quantities supplied and demanded. The powerful features of MPS/GE come with a few costs. One is that production blocks (which are actually cost functions in the background) must be specified with constant returns to scale. Yet having one fixed factor can allow output as a function of one or more variable factors to mimic decreasing returns as we showed in model M25. We will show how to incorporate increasing returns to scale in the next chapter. We will use a specific factor trick to make the foreign exchange received for exports of X1 a strictly concave function of export volume. We will create a ficticious factor called R (price PR) which is a second input into the export function. This factor is owned by a foreign consumer called CONSF and this consumer demands foreign exchange (price PFX). In the benchmarking procedure, we scale up the output of export activity E1 so that when the ficticious factor is paid the value of its marginal product, the same amount of foreign exchange is left for the domestic economy as in the original small-economy benchmarking. Here is the data matrix, which is just a revision of M41, adding the ficticious factor and scaling up the output of E1 to pay for the factor. Production Sectors Consumer
Markets | X1 X2 E1 M2 W CONSH CONSF ---------------------------------------------------------------P1 | 150 -50 -100 P2 | 50 50 -100 PL | -100 -20 120 PK | -50 -30 80 PW | 200 -200 PFX | 100 -50 -50 PR | -50 50 ---------------------------------------------------------------Consumer CONSF owns the ficticious factor (price PR) but the amount of foreign exchange left over from exports of good 1, equal to 50, leaves 50 units of FX for the domestic consumer. Here is the production block for activity E1. $PROD:E1 s:1 O:PFX I:P1 I:PR Q:100 Q: 50 Q: 50
32 We have specified this as a Cobb-Douglas function, so we are assuming that it is of the form: FX X1 R 0.5
0.5
X1 FX 0.5 FX X1
The elasticity of foreign exchange revenues with respect to export quantity is 0.5. Think of FX as revenue: FX = p1(X1)X1. Then if you do the algebra, you get: dp FX p1 X1 1 d X1 X1 X1 d FX X d p1 1 1 1 1 FX d X1 p1 d X1
where is the elasticity of demand. If the elasticity of foreign exchange with respect to export quantity is 0.5, then we are implicitly calibrating the elasticity of foreign demand for our exports to be - 2. Notice that an infinite elasticity of demand for our exports means that the elasticity of foreign exchange with respect to export quantity is 1, the small country assumption. Note that by choosing the share parameter on the Cobb-Douglas function E1, we can calibrate to any foreign elasticity of export demand that we like. This is done by varying the amount of R relative to X1 in the benchmarking, remembering to scale output so that there is always 50 units left over for the domestic consumer. Now run the model. For a counterfactual, we have imposed an import tariff of 0.20. Note from the listing file that this increases welfare in the domestic economy. This is the usual optimal tariff argument for a large economy.
33 $TITLE $ONTEXT Production Sectors Consumer Model M48: Large open economy model: large open economy
Markets | X1 X2 E1 M2 W CONSH CONSF ---------------------------------------------------------------P1 | 150 -50 -100 P2 | 50 50 -100 PL | -100 -20 120 PK | -50 -30 80 PW | 200 -200 PFX | 100 -50 -50 PR | -50 50 ---------------------------------------------------------------$OFFTEXT PARAMETER TM2 Import tariff for good; TM2 = 0; $ONTEXT $MODEL:M48 $SECTORS: X1 X2 E1 E2 M1 M2 W $COMMODITIES: P1 P2 PFX PW PL PK PR $CONSUMERS: CONSH ! ! ! ! ! ! ! ! ! ! ! ! ! ! Production index for good 1 Production index good 2 Export index of good 1 Export index of good 2 Import level of good 1 Import level of good 2 Welfare index Price index for good 1 Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index Rent which generates the export demand function
34 CONSF $PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK $PROD:E1 s:1 O:PFX I:P1 I:PR $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:W s:1 O:PW I:P1 I:P2 Q:50 Q:(100*1.01) Q:200 Q:100 Q:100 Q:200 Q:120 Q: 80 Q:50 Q:50 Q:(50*0.99) Q:50 Q:50 Q:50 A:CONSH T:TM2 ! Income level for representative foreign agent Q:150 Q:100 Q: 50 Q:50 Q:20 Q:30 Q:100 Q: 50 Q: 50
35 M48.ITERLIM = 0; $INCLUDE M48.GEN SOLVE M48 USING MCP; M48.ITERLIM = 2000; * * Apply a tariff which improves the terms of trade and home welfare:
Exercises: (1) Compute the relationship between welfare and tariff rate for different benchmark export demand functions, where the value share of PR in E1 takes on values 0.25 and 0.75. Do this by changing the amount of R in the benchmark, remembering to change output accordingly to leave the return to the domestic consumer equal to 50. Replace the tariff on good 2 imports with a tax on good 1 exports, and show that you can obtain identical equilibrium values (i.e., demonstrate Lerner symmetry).
(2)
36 Model M39 In some cases, the modeler wants to have a world model, or at least a full two-country general-equilibrium model. That is what we present here. It is a textbook, 2x2x2 HeckscherOhlin model: two counties, two goods, two factors. The X and Y goods, as they are labeled here, are identical across countries. The factors are labor (L) and capital (K), and the countries are called H (home) and F (foreign). You now have most of the building blocks necessary for some quite complicated and realistic models. In the present case, there is really nothing new, we are just increasing the dimensions of the problems. Here are the data: XHH PXH 150 PYH PXF PYF PWH PWF PLH -120 PKH -30 PLF PKF YHH XHF -50 50 50 50 150 -10 -40 -40 -30 -10 -120 -50 200 200 130 70 70 130 YHF XFF YFF XFH YFH WH WF CONSH CONSF
The notation here for the production activities is (industry or good)(country of production)(country of sale). Thus YFH, for example, is good Y produced in country F and sold in country H (exported to country H). The notation for markets and prices should be fairly obvious: PXF for example is the price of good X in country F. There is free trade, and so there is factor-price equalization. All prices can be set to one. Country H is labor abundant and good X is labor intensive. Country F is capital abundant and good Y is capital intensive. In our counterfactual experiments, we first allow country H to impose a tariff of 25% and then both countries impose symmetric tariffs of 25%.
37 $TITLE: Model M49: 2X2X2 HECKSCHER-OHLIN MODEL * This is a full two-country HO model $ONTEXT XHH PXH 150 PYH PXF PYF PWH PWF PLH -120 PKH -30 PLF PKF $OFFTEXT PARAMETERS TARH TARF; TARH = 0; TARF = 0; $ONTEXT $MODEL:M49 $SECTORS: WH WF XHH YHH XHF YHF XFF YFF XFH YFH $COMMODITIES: PWH PWF PXH PXF YHH 50 50 50 150 -10 -40 -40 -30 -10 -120 -50 200 200 130 70 70 130 XHF -50 YHF XFF YFF XFH YFH WH WF CONSH CONSF
38 PYH PYF PLH PLF PKH PKF $CONSUMERS: CONSH CONSF $PROD:XHH s:1 O:PXH I:PLH I:PKH $PROD:YHH s:1 O:PYH I:PLH I:PKH $PROD:XFF s:1 O:PXF I:PLF I:PKF $PROD:YFF s:1 O:PYF I:PLF I:PKF $PROD:XHF O:PXF I:PXH $PROD:YHF O:PYF I:PYH $PROD:XFH O:PXH I:PXF $PROD:YFH O:PYH I:PYF Q:150 Q:120 Q: 30 Q:50 Q:10 Q:40 Q:50 Q:40 Q:10 Q:150 Q: 30 Q:120 Q:50 Q:50 Q:50 Q:50.1 Q:50 Q:50.1 Q:50 Q:50
A:CONSF
T:TARF
A:CONSH
T:TARH
39 $PROD:WH s:1 O:PWH I:PXH I:PYH s:1 O:PWF I:PXF I:PYF Q:200 Q:100 Q:100 Q:200 Q:100 Q:100 Q:200 Q:130 Q: 70 Q:200 Q: 70 Q:130
$PROD:WF
$OFFTEXT $SYSINCLUDE mpsgeset M49 YHF.L = 0.; XFH.L = 0.; $INCLUDE M49.GEN SOLVE M49 USING MCP; * TARIFFS
TARH = .25; $INCLUDE M49.GEN SOLVE M49 USING MCP; TARH = .25; TARF = .25; $INCLUDE M49.GEN SOLVE M49 USING MCP;
Exercise: Verify the Stolper-Samuelson theorem by comparing factor prices in free trade versus when one or both countries have tariffs.
40 Model 410 Another important feature of economies and also an important policy issue is capital flows or trade in capital. This can be captured in a static model by adding a market for a factor which is simply rented from or to foreigners so as to ignore the dynamic and durability issues connected with capital. This model incorporates a simple extension of our earlier work, particularly M48. We are going to assume that the country is a price taker in goods markets, but there is a less-than-perfectly-elastic supply of capital to the country. Once again, we create a fictitious factor R (price PR) which is a fixed factor in a function (KM) transforming foreign exchange into capital and that fictitious factor is owned by a foreign consumer. All in all, the model is very similar to M48, except that now we have three things traded in the benchmark: good 1 is exported, good 2 is imported, and capital is imported. Here is the benchmark data, in which 20 units of capital are imported initially. Production Sectors Consumer
Markets | X1 X2 E1 M2 KM W CONSH CONSF ---------------------------------------------------------------P1 | 170 -70 -100 P2 | 50 50 -100 PL | -120 -20 140 PK | -50 -30 20 60 PW | 200 -200 PFX | 70 -50 -10 -10 PR | -10 10 ---------------------------------------------------------------Here is the production block for KM: $PROD:KM s:1 O:PK I:PFX I:PR Q:20 Q:10 Q:10
The counterfactual experiment is to impose a 5% tariff. You will see that this generates an increase in capital imports, because good 2, the protected import sector is capital intensive and protection thus raises the return to capital (the Stolper-Samuleson theorem). Welfare of course decreases. In order to make a simple economics point, we run a second experiment in which we impose the tariff but fix capital imports at their benchmark level of KM = 1 (20 units of capital imported are the reference quantity for activity level KM = 1). Note that welfare decreases less under this constraint. This is an old result from a paper by Brecher and Alejandro, that capital imports generated by a tariff protecting a capital intensive sector have a secondary, negative welfare effect. Added capital imports allow more costly domestic production of good 2 to displace additional cheap imports, thus creating an added welfare loss.
41 $TITLE $ONTEXT Production Sectors Consumer Model M410: Capital imports (less than perfect elastic)
Markets | X1 X2 E1 M2 KM W CONSH CONSF ---------------------------------------------------------------P1 | 170 -70 -100 P2 | 50 50 -100 PL | -120 -20 140 PK | -50 -30 20 60 PW | 200 -200 PFX | 70 -50 -10 -10 PR | -10 10 ---------------------------------------------------------------$OFFTEXT PARAMETER TM2 Import tariff for good X2; TM2 = 0; $ONTEXT $MODEL:M410 $SECTORS: X1 X2 E1 E2 M1 M2 KM W $COMMODITIES: P1 P2 PFX PW PL PK PR $CONSUMERS: ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Production index for good 1 Production index good 2 Export index of good 1 Export index of good 2 Import level of good 1 Import level of good 2 Capital imports Welfare index Price index for good 1 Price index for good 1 Read exchange rate index Welfare price index Wage index Capital rental index Rent which generates concavity in capital supply
42 CONSH CONSF $PROD:X1 s:1 O:P1 I:PL I:PK $PROD:X2 s:1 O:P2 I:PL I:PK $PROD:E1 s:1 O:PFX I:P1 $PROD:M2 O:P2 I:PFX $PROD:E2 O:PFX I:P2 $PROD:M1 O:P1 I:PFX $PROD:KM s:1 O:PK I:PFX I:PR $PROD:W s:1 O:PW I:P1 I:P2 Q:50 Q:(100*1.01) Q:20 Q:10 Q:10 Q:200 Q:100 Q:100 Q:200 Q:140 Q:60 Q:10 Q:10 Q:(50*0.99) Q:50 Q:50 Q:50 A:CONSH T:TM2 ! Income level for representative home agent ! Income level for representative foreign agent Q:170 Q:120 Q: 50 Q:50 Q:20 Q:30 Q:70 Q:70
43 $OFFTEXT $SYSINCLUDE mpsgeset M410 E2.L = 0; M1.L = 0; PW.FX = 1; M410.ITERLIM = 0; $INCLUDE M410.GEN SOLVE M410 USING MCP; M410.ITERLIM = 2000; TM2 = 0.05; $INCLUDE M410.GEN SOLVE M410 USING MCP; KM.FX = 1; $INCLUDE M410.GEN SOLVE M410 USING MCP;
M52-MPS.GMS
2 M53-MCP.GMS Closed economy model with monopoly, increasing returns and free entry/exit in the X sector, MCP version Closed economy model with monopoly, increasing returns and free entry/exit in the X sector, MPS/GE version Two country trade model with monopoly, increasing returns and free entry/exit in the X sector, MCP version Two country trade model with monopoly, increasing returns and free entry/exit in the X sector, MPS/GE version
M53-MPS.GMS
M54-MCP.GMS
M54-MPS.GMS
3 Model M51-MCP This is a standard two-good, two-factor, closed-economy general-equilibrium model that is very similar to those used in earlier chapters. Indeed, we start with a data matrix that is very similar to those used in earlier chapters. Activities are X, Y and W (welfare or utility). Factors of production in this and in the next chapter are called unskilled and skilled labor. Unskilled labor is typically called L with a price of PW or just W, and skilled labor is called S with a price of PZ or just Z. PU is the price of a unit of utility (the value of the unit expenditure function). The monopoly or oligopoly markup will be denoted MK or MARKUP. There are two agents, the representative consumer who receives all the factor incomes and tax revenue (if any) and pays subsidies (if any). Then there may be an agent called ENTRE who receives markup revenue and pays fixed costs (if any). Here is the data matrix for our first monopoly model. Production Sectors Consumers Markets | X Y W | CONS ENTRE ------------------------------------------------PX ! 100 -100 | PY | 100 -100 | PU | 200 | -180 -20 PW | -32 -60 | 92 PZ | -48 -40 | 88 MK | -20 | 20 We assume that 20% of the value of the X output accrues to the agent ENTRE as a monopoly profit. For reasons connected with theory, we specify the markup as a deduction from the consumer price, not as an addition to marginal cost. Denoting marginal cost by mc, the markup is given by the formula px ( 1 mk ) mc 100 ( 1 mk ) 80 > mk 0.20
Written in this form, the markup implied by the data matrix is 20%. It is desirable that the markup have some basis in theory. Therefore, I will take a short digression into economic theory to derive a marginal revenue function and see how a monopoly markup relates to the underlying elasticity of substitution in preferences and demand. Suppose demand for good X is just written in inverse form p(X) so the monopolists revenue is R = p(X)X. Marginal revenue is then given by:
(1)