Sunteți pe pagina 1din 42

MINIMAL

A Simplified General Equilibrium Model

Mark Horridge (with sections by Alan Powell)

March 2001

Centre of Policy Studies and the Impact Project 11th Floor, Menzies Building, Monash University, Wellington Road, Clayton, Victoria, 3800, Australia Phone: 03 9905 2398 or 03 9905 5112 Fax: 09 9905 2426 or 03 9905 5486

http://www.monash.edu.au/policy

Contents
1. Introduction 2. Model database 3. The equations of MINIMAL 3.1. Why MINIMAL uses percent-change equations 3.2. How to derive percent-change equations 3.3. The TABLO language 3.4. Dimensions of the model and flows data 3.5. Database aggregates 3.6. The equation system 3.7. Market-clearing for commodities 3.8. Substitution between imported and domestic commodities 3.9. Deriving the CES demand equations 3.10. Structure of production 3.11. Demands for primary factors 3.12. Top level industry demands 3.13. Household Demands 3.14. Export demands 3.15. Domestic market clearing and prices 3.16. Prices of imports 3.17. GDP from income side 3.18. GDP from expenditure side 3.19. More macro variables 3.20. Factor market variables 3.21. Updating the flows data 3.22. Creating a data summary file 4. Accurate solutions from linearized equations 5. Closing the model 6. Overview of computing using GEMPACK 7. Illustrative simulation 7.1. A comparative-static interpretation of model results 8. Towards more complicated CGE models 1 2 5 5 5 7 8 9 9 10 11 12 15 16 17 18 22 22 23 23 24 25 25 26 26 27 30 34 36 39 40

Software and documentation for the MINIMAL model may be downloaded from the web page

http://www.monash.edu.au/policy/minimal.htm
after September 2001

MINIMAL: A Simplified General Equilibrium Model

1. Introduction
This document describes MINIMAL, a small and simple CGE model. We describe the database, the theory, the computational method and the results of a simulation. MINIMAL is designed for teaching purposes. It leaves out some of the features found in larger CGE models, but retains intact their main ideas. We hope that MINIMAL gives readers a rapid understanding of: the way in which standard microeconomic theory (cost minimizing, utility maximizing, etc.) underlies the structural equations; the use of nested production and utility functions: how input-output data are used in model equations; the computational procedures and the advantages and disadvantages of linearization; MINIMAL is also designed to introduce readers to the practical business of building and using a CGE model with the GEMPACK set of computer programs. GEMPACK automates the process of translating the model specification into a model solution program. The GEMPACK user needs no programming skills. Instead, he/she creates a text file, listing the equations of the model. The syntax of this file resembles ordinary algebraic notation. The GEMPACK program TABLO then translates this text file into a model-specific program that solves the model. This document could serve as an entry point for researchers who may wish to use GEMPACK to run and modify more sophisticated models than MINIMAL. It includes both an overview of the GEMPACK system and a complete description of the theoretical specification of the model framed around the TABLO Input file that implements the model in GEMPACK. An optional companion to this document is the Computing Guide for MINIMAL. The Guide explains how to use the RunGEM program and other GEMPACK software to run simulations, and contains various practical exercises. The necessary software and documentation will be freely downloadable (see box underneath contents list). The entire package could well be used as the nucleus of a 3rd-year undergraduate semester course. The remainder of this document is organized as follows. Section 2 describes the input-output database of MINIMAL. Section 3 sets out the theoretical structure. Section 4 explains the solution algorithm. In section 5 we discuss closure: the selection of endogenous and exogenous variables. Section 6 gives an overview of the GEMPACK software system. Section 7 works through a computed solution. The results are interpreted and used to highlight some of the implications of the models underlying theory. The final section contains brief concluding remarks.

MINIMAL: A Simplified General Equilibrium Model

2. Model database
Figure 1 is a schematic representation of the model's input-output database. It reveals the basic structure of the model. The column headings in the main part of the figure (an absorption matrix) identify the following demanders: (1) domestic producers divided into I industries; (2) an aggregate purchaser of investment goods; (3) a single representative household; (4) an aggregate foreign purchaser of exports; and (5) the government.
Absorption Matrix 1 Producers Size Domestic Flows C C 1 1 1 I 2 Investors 1 3 Household 1 4 Export 1 5 Government Total Sales 1

USE(commodity,"dom",user)

Imported Flows Labour

USE(commodity,"imp",user) FACTOR (labour) FACTOR (capital) V1PTX C = Number of Commodities = 7 I = Number of Industries = 7

Capital Output tax

Tax on Imports Size 1 C V0MTX Figure 1. MINIMAL Flows Database

The entries in each column show the structure of the purchases made by the agents identified in the column heading. Each of the C commodity types identified in the model can be obtained locally or imported from overseas. The source-specific commodities are used by industries as inputs to current production and capital formation, are consumed by households and governments, or are exported. Only domestically produced goods appear in the export column. As well as intermediate inputs, current production requires inputs of two primary factors: labour and fixed capital. There are taxes on both domestic and imported goods. Each cell in the illustrative absorption matrix in Figure 1 contains the name of the corresponding data matrix. For example, FACTOR is a matrix with 2 rows (Labour and Capital) and 7 columns showing each industry's expenditure on primary factors.

MINIMAL: A Simplified General Equilibrium Model

Table 1. MINIMAL Flows Database (million $ Australian, 1986-87) All Users Industries Construction TradeTranspt FinanProprty 689 12486 176 0 3353 1886 290 49 2518 0 0 34 29 55 15008 2160 1468 40201 0 143 10200 979 438 8892 9623 1316 7 2322 1 3 703 328 117 35532 10409 7780 88793 0 52 3061 2814 1708 3052 9819 1586 3 832 3 0 142 274 66 17095 28873 5140 74520 27 Final Demands Investment Households Exports 210 10150 0 33809 4563 2412 18 9 9491 0 68 41 39 29 2316 38537 3573 0 38211 33641 28653 340 9792 3 0 1011 176 706 18975 10587 21 29 9269 886 345

AgricMining Manufacture Domestic AgricMining Manufacture Utilities Construction TradeTranspt FinanProprty Services Imported AgricMining Manufacture Utilities Construction TradeTranspt FinanProprty Services Labour Capital Production tax Total Cost Tax on imports 5502 4587 1345 89 2958 1754 403 233 1305 1 0 104 90 26 10779 11337 5217 45730 497 14658 30009 2045 55 11539 6545 1595 1677 12411 2 1 259 302 451 22512 6359 16844 127264 5787

Utilities 1839 643 3261 13 694 622 92 1 184 2 0 11 19 7 3594 4293 1126 16401 0

Services 641 6947 2037 381 5680 6111 2210 145 3232 2 8 258 209 774 43346 4612 4208 80801 52

Government 705 57 150 3679 582 1221 44293 6 0 0 2 36 4 81

Total 45730 127264 16401 40201 88793 74520 80801 2470 42087 14 82 2599 1470 2312 147866 68043 41783

60839

156959

40112

50816

782436

MINIMAL: A Simplified General Equilibrium Model

Numerical values for these matrices are shown in Table 1, which is derived from the 1986-87 Australian Input-Output Tables. Data of this type (normally with between 50 and 200 sectors) are available for most countries. Different input-output tables are arranged in different ways. The distinctive features of Table 1 are: Commodity flows are valued at "producer prices". Take the usage of Manufacture by AgricMining: 4587. This includes the value of any indirect taxes applied to this flow, but does not include the value of trade or transport margins which must also be paid for by the user. The latter flows appear in their own row, as direct sales of TradeTranspt to each user. Some databases include margin matrices, showing how much margins are used on every flow. For each imported good and for each domestic good, there is just one number showing how much tax is levied on usage on that good. For example 16844 million dollars is levied from usage of domestically-produced manufactures, 5787 from imported manufactures. Without more information we must assume that the different users of each good all pay the same rate of tax. For some CGE models, the database includes tax matrices, showing how tax rates on commodities differ between users. Often we find that lower rates of tax are applied to exports or to investment usage. For each sector the total cost of production (including tax) is equal to the total value of domestic sales. This suggests that each commodity is produced by just one industry. In real-world data, we often find, for example, that the Shoe industry produces a little Clothing, and that the Clothing industry produces some Shoes. This information would be recorded in another matrix, called the MAKE matrix, which shows production of each commodity by each industry. There is no data regarding direct taxes or transfers. For example, although household spending is described in detail, there is little information about household income. To compute the latter we would need more data, including: the size of direct taxes; the amount of profits sent to foreign owners of local firms; wages received from overseas (migrant workers); and so on. For some countries, this information is available in the form of a social accounting matrix (SAM). The database for a more complex CGE model might also have more rows and columns than the MINIMAL database. More primary factors might be distinguished, such as land, or multiple types of labour. There could be several household columns, corresponding to different income groups, or a different investment column for each industry.

Percent-Change Numerical Example


Levels form Ordinary Change form multiply by 100: define x = % change in X, so: divide by Z=X*Y to get: Percent Change form Z = X*Y Z = Y*X + X*Y [+ X Y] 100*Z = 100*Y*X+ 100*X*Y so X*x = 100X Z*z = X*Y*x + X*Y*y z=x+y drop 2ndorder term

Initially X=4, Y=5, so Z=20 Suppose x=25%, y=20% [ie, X:45, Y:56] Linear approximation z = x + y gives z = 45% True answer: 30 = 5*6 = 50% more than original 20 Error of 5% is 2nd order term: z = x+y + [ x*y/100] Note: reduce shocks by a factor of 10, error by factor of 100

MINIMAL: A Simplified General Equilibrium Model

3. The equations of MINIMAL


Each flow in the model database is the product of a price and a quantity. The model consists of equations explaining each of these. The theory underlying these equations is typical of a static AGE model. They describe: market-clearing conditions for commodities and primary factors; producers' demands for produced inputs and primary factors; final demands (investment, household, export and government); the relationship of prices to supply costs and taxes; and a few macroeconomic variables and price indices. Demand and supply equations for private-sector agents are derived from the solutions to the optimisation problems (cost minimisation, utility maximisation, etc.) which are assumed to underlie the behaviour of the agents in conventional neoclassical microeconomics. The agents are assumed to be price takers, with producers operating in competitive markets which prevent the earning of pure profits. 3.1. Why MINIMAL uses percent-change equations For computational reasons we prefer to write the model equations in small change form, that is instead of A=B+C or Z = X*Y we write A*a = B*b + C*c or z = x+y The notational convention here is that lower-case lettersa, b, c, x, y and zrepresent small percent changes in the levels (original) values A, B, C, X, Y and Z. Thus: A*a = 100A = 100 times the ordinary change in A Notice that the second of the above levels equations, Z=X.Y, is non-linear, while both small-change equations are linear in percent changes. Efficient computer techniques exist to solve systems of linear equations, while non-linear systems can be hard to solve. We can represent a system of linear equations in matrix notation as: A.y + B.x = 0 (1) Here y is the vector of endogenous variables (those variables explained by the model) and x is the vector of exogenous variables (the values are set outside the model). A and B are matrices of coefficients: each row of these matrices corresponds to a model equation; each column to a single variable. We can express y in terms of x by: y = - A-1B.x (2) where A-1 is the inverse of A (A must be square, so the number of endogenous variable must equal the number of equations). Since a CGE model may have thousands or even millions of variables, the computation of A-1B is non-trivial; GEMPACK speeds the task by exploiting the fact that nearly all of the elements of A and B are zero (because each single equation involves only a few variables). The linearized (or percent-change) form of an equation is of course only a local approximation to the underlying levels equationit will be accurate only for small changes. Surprisingly, by solving the linear system a number of times, GEMPACK is able to deduce an exact solution to the levels equations. This is explained further in a later section. 3.2. How to derive percent-change equations Using first principles, a levels equation, for example, Y = X2 + Z, is turned into percent-change form by first taking total differentials: dY = 2XdX + dZ. Percent changes x, y, and z are defined via: dY Yy Xx Zz y = 100 Y or dY = 100, similarly dX = 100 and dZ = 100. Thus our sample equation becomes:

MINIMAL: A Simplified General Equilibrium Model

Xx Zz Yy = 2X 100 + 100, 100

or

Yy = 2X2x + Zz.

In practice such formal derivations are rarely necessary. Most percent-change equations follow standard patterns which the modeller soon recognizes. Some of these patterns are shown in Table 2.
Table 2 Patterns for Percent-Change Equations Pattern (A) Original or Levels Form 1 2 3 4 Y=4 Y=X Y = 3X Y = XZ (B) Intermediate Form Yy = 4*0 Yy = Xx Yy = 3Xx Yy = XZx + XZz (C) Percent-Change Form y=0 y=x y=x y=x+z or

y = x +100(X/Y) 5 Y = X/Z Yy = (X/Z)x - (X/Z)z y=x-z or

100(Z)Y = Xx - Xz or 100Y = Y(x - z) 6 7 8 9 X1 = M/4P1 Y = X3 Y = X Y=X+Z X1x1 = (M/4P1)m - (M/4P1)p1 Yy = X33x Yy = Xx Yy = Xx + Zz y = x x1 = m - p1 y = 3x ( assumed constant) y = Sxx + Szz where Sx = X/Y, etc 10 Y=X-Z Yy = Xx - Zz y = Sxx - Szz or

100(Y) = Xx - Zz 11 PY = PX + PZ Z = Xi XP = XiPi (adding up values) 14 X = Xi where all Xi have same price P XP = XiPi (price and quantity indices) PY(y+p) = PX(x+p) + PZ(z+p) PYy = PXx + PZz 12 13 Zz = Xixi or 0 = Xi(xi-z) or or y = Sxx + Szz where Sx = PX/PY, etc z = Sixi where Si = Xi/Z x+p = Si(xi+pi) where Si = Vi/V

XP(x+p) = XiPi(xi+pi)

V(x+p) = Vi(xi+pi) where Vi = PiXi and V = Vi Xx = Xixi or PXx = PXixi or where

Vi = PXi and V = Vi V(x+p) = Vi(xi+pi) where Vi = PiXi and V = Vi

Vx = Vixi

x = Sixi where Si = Vi/V Vx = Vixi or 0 = Vi(x-xi)

15

Vp = Vipi or 0 = Vi(p-pi)

Column (B) in Table 2 corresponds closely to the total differential form of column (A), and may be thought of as a step on the way to column (C). Alternatively, we may use column (B) directly, either because it is simpler, or to avoid computing shares. The 2nd alternate form in column (C) for pattern 10 shows how ordinary and percent changes may be mixed. It is based on the identity Yy 100Y. See also pattern 5.

MINIMAL: A Simplified General Equilibrium Model

Variables can only be added or subtracted (as in patterns 9 and 12) where they share the same units. In adding quantities, we can normally identify a common price. By multiplying through additive expressions by a common price, we can express the coefficients of percent-change equations as functions of flows, rather than quantities, so obviating the need to define physical units (compare patterns 9, 11 and 14). 3.3. The TABLO language Our description of the MINIMAL model is organised around the TABLO file which implements it in GEMPACK. We present the complete text of the TABLO Input file divided into a sequence of excerpts and supplemented by tables, figures and explanatory text. The TABLO language in which the file is written is essentially conventional algebra, with names for variables and coefficients chosen to be suggestive of their economic interpretations. Some practice is required for readers to become familiar with the TABLO notation but it is no more complex than ordinary algebraic notation. Acquiring the familiarity allows ready access to the GEMPACK programs used to conduct simulations with the model and to convert the results to human-readable form. Both the input and the output of these programs employ the TABLO notation. Moreover, familiarity with the TABLO format is essential for users who may wish to make modifications to the model's structure. We continue this section with a short introduction to the TABLO languageother details may be picked up later, as they are encountered. The TABLO model description defines the percent-change equations of the model. For example, in MINIMAL the following equation defines the average price, to each industry, of primary factors:
Equation E_p1prim (all,i,IND) V1PRIM(i)*p1prim(i) = FACTOR("Labour",i)*p1lab + FACTOR("Capital",i)*p1cap(i);

The first word, 'Equation', is a keyword which defines the statement type. Then follows the identifier for the equation, which must be unique. The descriptive text between '#' symbols is optionalit appears in certain report files. The expression '(all, i, IND)' signifies that the equation is a matrix equation, containing one scalar equation for each element of the set IND. Within the equation, the convention is followed of using lower-case letters for the percent-change variables (p1prim, p1lab and p1cap), and upper case for coefficients (VIPRIM and FACTOR). The '(i)' suffix indicates that variables and coefficients are vectors, with elements corresponding to the set IND. A semicolon signals the end of the TABLO statement. The TABLO character set is quite restrictedonly digits, Roman letters and a few punctuation marks may be used. Greek letters and subscripts are not allowed, and the asterisk, '*', must replace the multiplication symbol ''. Sets, coefficients and variables must be explicitly declared, via statements such as:
Set IND # Industries # (AgricMining, Manufacture, Utilities, Construction, TradeTranspt, FinanProprty, Services); ! subscript i ! FAC # Primary factors # (Labour, Capital);! subscript f ! Coefficient (all,f,FAC)(all,i,IND) FACTOR(f,i) # Wages and profits #; (all,i,IND) V1PRIM(i) # Wages plus profits #; Variable (all,i,IND) p1prim(i) # Price of primary factor composite #; p1lab # Wage rate #; (all,i,IND) p1cap(i) # Rental price of capital #;

As the last two statements in the 'Coefficient' block and the last three in the 'Variable' block illustrate, initial keywords (such as 'Set', 'Coefficient' and 'Variable') may be omitted if the previous statement was of the same type. Some of the statements above contain a comment, i.e., text between exclamation marks (!). TABLO ignores comments. Coefficients must be assigned values, either by reading from file:
Read FACTOR from file BASEDATA header "1FAC";

or in terms of other coefficients, using formulae:

MINIMAL: A Simplified General Equilibrium Model


Formula (all,i,IND) V1PRIM(i) = sum{f,FAC,FACTOR(f,i)};

The right hand side of the last statement employs the TABLO summation notation, equivalent to the notation used in standard algebra. It defines the sum over an index f running over the set FAC of the input-cost coefficients, V(f). The sample statements listed above introduce most of the types of statement required for the model. But since all sets, variables and coefficients must be defined before they are used, and since coefficients must be assigned values before appearing in equations, it is necessary for the order of the TABLO statements to be almost the reverse of the order in which they appear above. The MINIMAL TABLO Input file is ordered as follows: definition of sets; declarations of often-used coefficients which are read from files, with associated Read statements; declarations of other often-used coefficients which are computed from the data, using associated Formulae; and groups of topically-related equations, which introduce new variables and coefficients as they are needed. Update statementswhich will be explained later;
! Excerpt 1 of TABLO input file: ! ! Sets and flows data! Set ! User categories: IO table columns ! IND # Industries # (AgricMining, Manufacture, Utilities, Construction, TradeTranspt, FinanProprty, Services); ! subscript i ! FINALUSER # Final demanders # (Investment, Households, Government, Exports); USER # All users #= IND union FINALUSER; ! subscript u ! IMPUSER # Non-export demanders: users of imports # (AgricMining, Manufacture, Utilities, Construction, TradeTranspt, FinanProprty, Services, Investment, Households, Government); Subset IMPUSER is subset of USER; IND is subset of IMPUSER; Set ! Input categories: IO table rows ! COM # Commodities # (AgricMining, Manufacture, Utilities, Construction, TradeTranspt, FinanProprty, Services); ! subscript c ! SRC # Source of commodities # (dom,imp); ! subscript s ! FAC # Primary factors # (Labour, Capital); ! subscript f ! Coefficient (all,c,COM)(all,s,SRC)(all,u,USER) USE(c,s,u) (all,f,FAC)(all,i,IND) FACTOR(f,i) (all,i,IND) V1PTX(i) (all,c,COM) V0MTX(c) File BASEDATA # Flows Read USE from file FACTOR from file V0MTX from file V1PTX from file Data File #; BASEDATA BASEDATA BASEDATA BASEDATA header header header header "USE"; "1FAC"; "0TAR"; "1PTX";

# # # #

USE matrix #; Wages and profits #; Production tax revenue #; import tax revenue #;

3.4. Dimensions of the model and flows data Excerpt 1 of the TABLO Input file defines sets of descriptors for the components of vector variables. Set names appear in upper-case characters. For example, the first statement is to be read as defining a set named 'IND' which contains sector descriptors. For MINIMAL, the industry and commodity classifications are the same 7 sectors. MINIMAL does not allow multiproduction: the production of several commodities by one industry, or the production of the same commodity by several industries. However, although the sets COM and IND have the same members, we find it useful to maintain the logical distinction between them.

MINIMAL: A Simplified General Equilibrium Model

TABLO does not prevent two elements of different sets from sharing the same name; nor, in such a case, does it infer any connection between the two elements. The 'Subset' statements which follows the list of IMPUSER elements is required for TABLO to realize that the elements of IMPUSER are the same as the first few elements of the set USER. The second part of Excerpt 1 defines coefficients for the flows (values) data which constitute the bulk of the MINIMAL database. These matrices (USE, FACTOR, etc) are all depicted in Figure 1. The USE matrix is 3-dimensional. The qualifier (all,c,COM) means that the 'c' subscript runs over the 7 commodities listed in Table 1. Similarly, (all,s,SRC) means that the 's' subscript takes the values 'dom' and 'imp', corresponding to domestically-produced and imported goods. Finally, (all,u,USER) means that the 'u' subscript runs over all users: the column headings in Table 1. So USE contains the expenditures on each good from each source by each user. The values of the data matrices are read from the input file called (in the TABLO input files) BASEDATA. "BASEDATA" is a logical name. The actual name of the data file (including folder and drive information) is specified later, when it is time to run a simulation. Each data item is associated with a particular header. These headers are keys, up to 4 letters long, which identify the location of each item within the BASEDATA file. 3.5. Database aggregates The next part of the TABLO Input file defines a number of coefficients which are add-ups of the flows read from the base data file. These are mostly row and column totals of the numbers shown in Figure 1 and Table 1. We define them early, as they are used in a number of different equations.
! Excerpt 2 of TABLO input file: ! ! Useful aggregates of the base data ! Coefficient (all,c,COM)(all,u,USER) (all,u,USER) (all,c,COM)(all,s,SRC) (all,i,IND) (all,i,IND) (all,c,COM) Formula (all,c,COM)(all,u,USER) (all,u,USER) (all,c,COM)(all,s,SRC) (all,i,IND) (all,i,IND) (all,c,COM)

USE_S(c,u) USE_CS(u) SALES(c,s) V1PRIM(i) V1TOT(i) V0CIF(c) USE_S(c,u) USE_CS(u) SALES(c,s) V1PRIM(i) V1TOT(i) V0CIF(c)

# # # # # # = = = = = =

USE matrix, dom+imp together#; Total user expenditure on goods #; Total value of sales #; Wages plus profits #; Industry Costs #; Aggregate imports at border prices #; sum{s,SRC,USE(c,s,u)}; sum{c,COM,USE_S(c,u)}; sum{u,USER,USE(c,s,u)}; sum{f,FAC,FACTOR(f,i)}; V1PRIM(i) + sum{c,COM,USE_S(c,i)}; SALES(c,"imp") - V0MTX(c);

Consider the formula above for USE_S(c,u). It is found by adding together domestic and imported components of the original data matrix USE(c,s,u). The addition of the "_S" at the end reminds us that we are summing over the s subscript of USE. That is: USE_S(c,u) =
sSRC

USE(c,s,u) = USE(c,"dom",u) + USE(c,"imp",u)

The notation is not available on the computer: in TABLO language we write:


(all,c,COM)(all,u,USER) USE_S(c,u) = sum{s,SRC,USE(c,s,u)};

The qualifier (all,c,COM) means that the 'c' subscript runs over all 7 commodities, while (all,u,USER) means that the 'u' subscript runs over all users. Sum{s,SRC, means, add together 'dom' and 'imp' (the 2 elements of SRC). 3.6. The equation system The rest of the TABLO Input file is an algebraic specification of the linear form of the model, with the equations organised into a number of blocks. Each Equation statement begins with a name which generally refers to the left-hand-side variable. Except where indicated, the variables are percent changes. Variables are in lower-case characters and coefficients in upper case. Most of the coefficients have been defined in Excerpts 1 and 2. Readers who have followed the TABLO file so far should have no difficulty

10

MINIMAL: A Simplified General Equilibrium Model

in reading the equations in the TABLO notation. We provide some commentary on the theory underlying each of the equation blocks. 3.7. Market-clearing for commodities Excerpt 3 of the TABLO Input file contains the equations that add up demands across users for both sources of each commodity. When c = "manufacture", it identifies the second commodity (see Table 1) while if s = "dom", it identifies the locally made (i.e., domestic) source of manufactured goods. With these settings of c and s, the Equation E_x0 computes the total demand for domestically produced manufactures by adding up the demands by each of the users. From Table 1 we see that these users are the seven industries which use domestically-sourced manufactures as an intermediate input to production, plus the final demands made by investors, by consumers (= "household"), by the government and by foreign countries (= "export").
! Excerpt 3 of TABLO input file: ! ! Total demands for commodities ! Variable (all,c,COM)(all,s,SRC)(all,u,USER) x(c,s,u) # Demand by user u for good c, source s #; (all,c,COM)(all,s,SRC) x0(c,s) # Total demand for good c, source s #; Equation E_x0 (all,c,COM)(all,s,SRC) SALES(c,s)*x0(c,s)= sum{u,USER,USE(c,s,u)*x(c,s,u)};

Equation E_x0 involves variables in percent-change form. In the levels this equation would be written X0(c,s) =
uUSER

X(c,s,u)

(3)

where upper-case letters correspond to levels of corresponding lower-case letters. Thus X0(c,s) is the total quantity of commodity c from source s that is demanded, while x0(c,s) is the percent change in the total demand for commodity c from source s. X(c,s,u) is the level of quantity demanded by user u of commodity c from source s while x(c,s,u) is the corresponding percent change. The notational convention of using upper-case letters for levels, and lower-case letters for percent changes, is very useful for exposition and will be used in this role throughout. Moreover, we will follow the convention of using lower-case letter to represent percent-change variables in our TABLO code. But notice that this convention cannot be understood by the computer program which implements the model as specified in our TABLO file: as far as the computer is concerned, all of the following are identical: X(c,s,u), x(c,s,u), X(C,S,U) and x(C,S,U). This will not prove a limitation since in our TABLO file we will never need to refer to the levels values of variables directly. This will become clearer as we explain the TABLO excerpts. To derive equation E_x0 from (3) the first step is to find an appropriate pattern in Table 2 with which to linearize (3). Using the first option in pattern 14B we obtain: X0(c,s) x0(c,s) =
uUSER

X(c,s,u) x(c,s,u)

(4)

We now relate the terms in equation (4) to the value flows in the database. Here it is important to note that all users pay the same price; thus P(c,s), the user price of good c sourced from s, does not need an identifier for the user. Multiplying both sides of equation (4) by P(c,s) we obtain: P(c,s) X0(c,s) x0(c,s) =
uUSER

P(c,s) X(c,s,u) x(c,s,u)

(5)

From Figure 1 we see that the value flow USE(c,s,u) corresponds to the term P(c,s) X(c,s,u) on the righthand side of (5). USE(c,s,u) is also the notation used for this flow in the TABLO input file . When s = "dom", we are in the domestic flows block of the database, and when s = "imp", we are in the imported flows block. Corresponding to the term P(c,s) X0(c,s) on the left of equation (5) is the sum across users of USE(c,s,u). This sum is called SALES(c,s) in the TABLO file and corresponds to Total Sales in Figure 1. Replacing the upper-case entities in (5) by their TABLO names we obtain:

MINIMAL: A Simplified General Equilibrium Model

11

SALES(c,s).x0(c,s) =

uUSER

USE(c,s,u).x(c,s,u)

(6)

Equation E_x0 below is just equation (6) written in TABLO language. Recall that COM is the entire set of commodities and that SRC is the set of both sources. The commands (all, c, COM) and (all,s,SRC) in Equation E_x0 tell the software to evaluate the left-hand side of (6) for all commodities and both sources. Since the notation is not available on the computer, the right-hand side of (6) is replaced by the TABLO-language expression sum{u,USER,USE(c,s,u)*x(c,s,u)} . 3.8. Substitution between imported and domestic commodities Each industry and each final demander substitutes between imported and domestically-produced versions of each commodity. For each good and user, the ratio of imported and domestic purchases is a function only of the relative prices of goods from the two sources. The same functional form applies in all cases: derived from the Constant-Elasticity-of-Substitution (CES) production function, which is very widely used in CGE modelling. For a particular good and userfor example, household use of Manufacturesthe following 3 percent change equations determine the import/domestic ratio: p = Sdpd + Smpm average price of domestic and imported Manufactures (7) xd = x - (pd - p) xm = x - (pm - p) demand for domestic Manufactures demand for imported Manufactures (8a) (8b)

All 6 variables (x, xd, xm, p, pd, pm) are percent changes. xd and xm are the demands for domestic and imported Manufactures, with pd and pm the corresponding prices. x is the overall demand for Manufactures, and p is an average of domestic and imported prices; x and p are sometimes also called the demand and price for the Manufactures composite. Sd and Sm are the shares for each source of total spending (by this user) on Manufactures. Finally is the elasticity of substitution between domestic and imported Manufactures, also known as the Armington1 elasticity, a number usually between 0.5 and 3.0. The 3 equations above determine the variables [p, xd, xm]; the remaining variables [x, pd, pm] are determined elsewhere in the model. We relate the equations to the CES production function in the next section. The effect of the 3 equations is that: if the ratio of domestic and imported prices do not change, xd and xm will both follow demand for the composite, x. if the import price, pm, rises relative to the domestic price, pd, the ratio of imported to domestic input will fall (and vice versa if the domestic price rises more). As a numerical example, suppose that the imported price pm falls by 10% with x and pd unchanged (ie, x=pd=0). Let Sm=0.3 and =2. This gives: p = -0.3*10 = -3 (7') xd = - 2(- -3) = -6 xm = -2(-10 - - 3) = 14 (8a') (8b')

In other words, cheaper imports have led to a 14% increase in import volumes and a 6% fall in domestic demand. The effect on domestic sales is proportional to both Sm and .

Paul Armington, an economist with the IMF, in 1969 proposed that goods from different sources be modelled as a CES

aggregate.

12

MINIMAL: A Simplified General Equilibrium Model


! Excerpt 4 of TABLO input file: ! ! Import/Domestic sourcing decision for all non-export users! Variable (all,c,COM)(all,s,SRC) p(c,s) # User price of good c, source s #; (all,c,COM)(all,u,IMPUSER) p_s(c,u) # User price of composite good c #; (all,c,COM)(all,u,IMPUSER) x_s(c,u) # Use of composite good c #; Coefficient (all,c,COM) SIGMA(c) # elasticity of substitution: domestic/imported #; (all,c,COM)(all,s,SRC)(all,u,IMPUSER) SRCSHR(c,s,u) # imp/dom shares #; Read SIGMA from file BASEDATA header "ARM"; Formula (all,c,COM)(all,s,SRC)(all,u,IMPUSER) SRCSHR(c,s,u) = USE(c,s,u)/USE_S(c,u); Equation E_x (all,c,COM)(all,s,SRC)(all,u,IMPUSER) x(c,s,u) = x_s(c,u) - SIGMA(c)*[p(c,s) - p_s(c,u)]; Equation E_p_s (all,c,COM)(all,u,IMPUSER) p_s(c,u) = sum{s,SRC, SRCSHR(c,s,u)*p(c,s)};

Excerpt 4 represents equations (7), (8a) and (8b) in the TABLO language for each good and user. For example, equation (7) above: p = Sdpd + Smpm is written as:
(all,c,COM)(all,u,IMPUSER) p_s(c,u) = sum{s,SRC, SRCSHR(c,s,u)*p(c,s)};

The (all,s,SRC) qualifier in Equation E_x runs over 'dom' and 'imp', so that this equation implements both (8a) and (8b). We could use equation (7) above to substitute out the variable p from equations (8a) and (8b), so the CES demand equations became: xd = x - Sm(pd - pm) xm = x - Sd(pm - pd) (8a'') (8b'')

This way of writing them allows us to see own- and cross-price elasticities directly. We could also derive the following 2 useful equations: x = Sdxd + Smxm xd - xm = -(pd- pm) The first is a form of the production function (assuming cost-minimization: this is why the coefficients are cost shares). The second shows that the elasticity of substitution, , may be thought of as the proportional change in input ratios per change in relative input prices. 3.9. Deriving the CES demand equations In the previous section we simply stated the percent change form of the CES demand equations. In this section we derive these equations from the CES aggregator (production) function. Each user combines imported and domestically-produced versions of each commodity to produce a "composite". For example, households combine imported and domestic Manufactures to produce a Manufactures composite. Each of the curved lines in Figure 2, called isoquants, shows the different combinations of domestic and imported input which would yield the same amount of composite. For example, the lower curve shows all the import-domestic combinations which produce 10 units of composite. Similarly the upper curve shows combinations yielding 15 units. We assume that these curves may be represented by the CES equation: X = [Xd/Ad] + [Xm/Am] Here, Xd and Xm are quantities of domestic and imported, and X is the output of composite. Ad, Am and are parameters, with <1. Different isoquants correspond to different values of X. The CES function has the constant-returns-to-scale property: double (or triple) both inputs, and the output, X, will also be doubled (or tripled). This means that the X=15 isoquant has just the same shape as

MINIMAL: A Simplified General Equilibrium Model

13

the X=10 isoquant; it is simply 50% larger and 50% further from the origin. Therefore, if we draw a ray R from the origin it will cut each isoquant at the same angle.
Import Xm

X = [Xd/Ad] + [Xm/Am]

A X=15 X=10 Domestic Xd

B Cost=$6 Cost=$9

Figure 2. Isoquants of CES aggregator function

The downward-sloping straight lines in Figure 2 are isocost lines: they show the different combinations of domestic and imported input which would add up to the same cost. For example, the lower line shows all the import-domestic combinations which in total cost $6. Similarly the upper line shows combinations costing $9. The equations of the isocost lines are: C = XdPd + XmPm where C is total cost, and Pd and Pm are the domestic and imported prices. We assume that the user treats these prices as given: he is a price-taker, who cannot affect input prices. Each price ratio, Pd/Pm, gives rise to a unique set of parallel isocost lines. If both prices doubled, the cost associated with each line would double, but the slope (= - Pd/Pm) would not change. It is clear from the lower isoquant in Figure 2 that not all ways to produce 10 units of composite are equally cost-effective. For example, at point B we get 10 units of outputs at a cost of $9 (unit cost 90 cents). At point A the same output costs only $6 (unit cost 60 cents). Indeed, with the isocost lines shown, A, where the price line is tangent to the isoquant X=10, is the minimum cost combination. We assume that each user always will choose the minimum cost combination corresponding to his or her X. At given prices, all these combinations will lie along the ray R. We may deduce that: demand for each input is proportional to the composite quantity X. demand for each input is a function of the price ratio [Pm/Pd]. the minimum unit cost depends on Pm and Pd but not on X (unit costs at A and C = 60 cents). if Pm and Pd double, so will the minimum unit cost of X.
Unit cost of Output P

Minimum cost Input ratio Xd/Xm

Figure 3. Unit cost as function of input ratio

14

MINIMAL: A Simplified General Equilibrium Model

It is also clear that moving a little way from A along the isoquant will not increase unit cost much. This is illustrated in Figure 3, which shows unit cost (for given input prices) as a function of the ratio of inputs. Indeed, at the minimum cost combination, small changes in inputs will not affect the unit cost of output at all. Up to now we have assumed that input prices Pd and Pm were fixed. Figure 4 shows the effect of a change in these prices. The line PR1 corresponds to the minimum cost of 10 units of output at the initial price ratio. PR2 corresponds to the (probably different) minimum cost of a new price ratio. The change in the ratio of input prices causes the cost-minimizing combination to move from A to B. The size of the change depends on the curvature of the isoquant: if it were flatter ( nearer to 1) the change would be greater.
Xm

X = [Xd/Ad] + [Xm/Am]

A B X=10 Xd

PR1

PR2

Figure 4. Effect of a price change

Now we show how input proportions depend on input prices for the CES aggregator. We assume that each user has chosen a cost-minimizing combination. We define a unit cost of output, P, such that: X.P = XdPd + XmPm or P = [XdPd + XmPm]/X Recall that near the cost-minimizing optimum, small changes in input quantities do not affect P: at the optimum P is a function only of input prices Pd and Pm. This means that increasing Xd by $1 worth will increase the value of output by $1 worth. That is, a small increase in Xd, dXd, will give rise to a small increase in output, dX, such that: P.dX = Pd.dXd Another way to find dX is to totally differentiate the CES production function: X = [Xd/Ad] + [Xm/Am] Assuming that Xm does not change, we get2:
dX dXd X X = [Xd/Ad] X d

so adding 1$ worth of Xd (dXd=1/Pd) adds 1$ to minimum cost (dX=1/P)


1 1 X X.P = [Xd/Ad] X P d d

Rearranging: XdPd [Xd/Ad] = = Sd = share of Xd in total cost X.P X

If your calculus is rusty, we remind you that: d(X ) = X and d([Xd/Ad] ) = [Xd/Ad]
1

dX = [X /X].dX

(1/Ad).dXd = [Xd/Ad] [Ad/Xd](1/Ad).dXd = [Xd/Ad] (1/Xd).dXd

MINIMAL: A Simplified General Equilibrium Model

15

Into % change form: xd + pd - (x + p) = (xd - x) so pd - p = (-1)(xd - x) so xd = x - (pd - p) where = 1/(1-) We can repeat all the same steps for Xm to get: xm = x - (pm - p) (8b) Many CGE models (but not MINIMAL) use CES forms with more than 2 inputs. In this case the percent change equations are: xi = x - (pi - p) p = i = 1..N, demand for good i
n

(8a)

Si p i.
i=1

average price of inputs

Two special cases arise: if = 0, then demand for each input simply follows output: we call this the Leontief3 demand structure. If = 1, then expenditure on each input follows total cost: x i + pi = x + p i = 1..N, This is the Cobb-Douglas4 demand structure, where cost shares do not change. 3.10. Structure of production In MINIMAL, the output of each industry is a function of the inputs used: outputs = F(inputs) = F(Labour, Capital, domestic goods 1-7, imported goods 1-7) (9)

We use a series of separability assumptions to simplify the production structure as follows. We assume the F function may be written: outputs = F(primary factor composite, composite goods 1-7) (10) where, for each industry, the "primary factor composite" is itself a CES (constant elasticity of substitution) aggregation of capital and labour: primary factor composite = CES(Labour, Capital) (11) and, as we saw above, the composite goods are CES aggregates of imported and domestically produced equivalents: composite good (i) = CES(domestic good (i), imported good (i)) (12) These assumptions allow us to depict industry input demands as a series of nests, shown in Figure 5. At the top level, commodity composites and a primary-factor composite are combined using a Leontief production function. Consequently, they are all demanded in direct proportion to output, X1TOT. Although all industries share this common production structure, input proportions and behavioural parameters may vary between industries. One way to think about nesting is to imagine that the producer divides input decisions into different stages. First the shoe-maker decides how much leather to usebased on shoe output. Then the import/domestic proportions of the leather are decided, depending on the relative prices of leather from local or foreign sources. The nested structure is mirrored in the TABLO equationseach nest requiring 2 or 3 equations. We begin at the bottom of Figure 5 and work upwards. Equations to determine import/domestic ratios of material inputs have already been explained (for all users) in previous sections. Hence we begin with the capital-labour nest.

Wassily Leontief (1906-1999), the father of Input-Output analysis, was a Russian economist who came to Harvard in 1932 and Paul Douglas (1892-1976) was a religious pacifist, labour economist, war hero, and US senator. In 1927 he asked a maths

remained there for many years.


4

professor, Charles Cobb, to help him devise a production function with the constant-cost-shares property.

16

MINIMAL: A Simplified General Equilibrium Model


KEY Functional Form Inputs or Outputs

Output

Leontief

Good 1

up to

Good C

Primary Factors

CES

CES

CES

Domestic Good 1

Imported Good 1

Domestic Good C

Imported Good C

Labour

Capital

Figure 5. Nested Structure of Production

3.11. Demands for primary factors Excerpt 5 shows the equations determining capital and labour demands. For each industry i, the equations are derived from the following optimisation problem. Choose inputs of labour and capital, X1LAB(i) and X1CAP(i), to minimize total primary factor cost, P1LAB*X1LAB(i) + P1CAP(i)*X1CAP(i) where X1PRIM(i) = CES[ X1LAB(i), X1CAP(i) ], regarding as exogenous to the problem P1LAB and P1CAP(i) and X1PRIM(i). Note that the problem is formulated in the levels of the variables. Hence, we have written the variable names in upper case. The notation CES[ ] represents a CES function defined over the set of variables enclosed in the square brackets. Note also that the price of labour does not vary by industry. This reflects our assumption that labour is mobile between industries. The solution of the cost-minimizing problem, in percent-change form, is given by equations E_x1lab, E_x1cap, and E_p1prim. We do not provide a derivation, since the capital-labour CES nest is algebraically the same as the import/domestic CES nest which has already been explained. Therefore, similar percent-change demand equations apply. Equation E_x1lab indicates that demand for labour is proportional to overall primary factor use, X1PRIM(i), and to a price term. In change form, the price term is composed of an elasticity of substitution, SIGMA1PRIM(i), multiplied by the percent change in a price ratio [p1lab-p1cap(i)] representing the price of labour relative to the average cost of primary factors. Higher wages would induce substitution towards capital. Equation E_x1cap has a similar form and interpretation. The percent change in the average cost of primary factors, p1prim(i), is given by equation E_p1prim. This could be rewritten: p1prim(i) = S1LAB(i)*p1lab + S1CAP(i)*p1cap(i), if S1LAB(i) and S1CAP(i) were respectively the value shares of labour and capital in primary factor cost. In other words, p1prim(i) is a cost-share-weighted average of the prices of labour and capital. It is worth noting that if we multiplied both sides of equation E_x1lab by S1LAB(i), and also multiplied both sides of equation E_x1cap by S1CAP(i), and added the two equations together, all price terms would disappear, giving:

MINIMAL: A Simplified General Equilibrium Model

17

x1prim(i) = S1LAB(i)*x1lab(i) + S1CAP(i)*x1cap(i). This is the percent-change form of the CES production function.
! Excerpt 5 of TABLO input file: ! ! Demands for capital and labour ! Variable (all,i,IND) x1prim(i) # Industry demand for primary-factor composite #; (all,i,IND) p1prim(i) # Price of primary factor composite #; (all,i,IND) x1lab(i) # Employment by industry #; p1lab # Economy-wide wage rate #; (all,i,IND) x1cap(i) # Current capital stock #; (all,i,IND) p1cap(i) # Rental price of capital #; Coefficient (all,i,IND) SIGMA1PRIM(i) # CES substitution, primary factors #; Read SIGMA1PRIM from file BASEDATA header "P028"; Equation E_x1lab (all,i,IND) x1lab(i) = x1prim(i) - SIGMA1PRIM(i)*[p1lab-p1prim(i)]; Equation E_x1cap (all,i,IND) x1cap(i) = x1prim(i) - SIGMA1PRIM(i)*[p1cap(i)-p1prim(i)]; Equation E_p1prim (all,i,IND) V1PRIM(i)*p1prim(i) = FACTOR("Labour",i)*p1lab + FACTOR("Capital",i)*p1cap(i);

3.12. Top level industry demands Excerpt 6 covers the topmost input-demand nest of Figure 5. Commodity composites and the primaryfactor composite are combined using a Leontief production function, given by: X1PRIM(i) X1TOT(i) = MIN[ A1PRIM(i) , All,c,COM: X_S(c,i)/A_S(c,i) ]. iIND (13) Since we assume that industries are cost-minimizers, we can be sure that they will use no more of each input than is necessary. In that case we can write: X_S(c,i) = A_S(c,i).X1TOT(i), X1PRIM(i) = A1PRIM(i).X1TOT(i), iIND, cCOM iIND (14) (15)

that is, both categories of inputs identified at the top level are demanded in direct proportion to X1TOT(i). In Excerpt 6 the corresponding equations are E_x1 and E_x1prim. A1PRIM(i) may be interpreted as an input-output coefficient: the amount of primary-factor composite needed to produce a unit of output. Similarly A_S(c,i) is the amount of composite good c used per unit of output. However, to keep MINIMAL simple we assume that the A_S(c,i) do not changeso there is no corresponding percent-change variable in equation E_x1 (see pattern 3 in Table 2). By contrast, MINIMAL allows A1PRIM(i) to changeso it appears as a variable in equation E_x1prim (see pattern 4 in Table 2). Note that a 1% decrease in A1PRIM(i) implies a 1% increase in factor productivity.

18

MINIMAL: A Simplified General Equilibrium Model


! Excerpt 6 of TABLO input file: ! ! Demands for composite inputs to production ! Variable (all,i,IND) x1tot(i) # Industry output #; (all,i,IND) a1prim(i) # All primary-factor augmenting technical change #; (all,i,IND) p1tot(i) # Unit cost of production #; Equation E_x1 # demand for commodity composites # (all,c,COM)(all,i,IND) x_s(c,i)= x1tot(i); Equation E_x1prim # demand for primary-factor composites # (all,i,IND) x1prim(i) = a1prim(i) + x1tot(i); Equation E_p1tot # cost of production = cost of all inputs # (all,i,IND) V1TOT(i)*[p1tot(i)+ x1tot(i)] = sum{c,COM,sum{s,SRC, USE(c,s,i)*[p(c,s) + x(c,s,i)]}} + FACTOR("Labour",i)*[p1lab + x1lab(i)] + FACTOR("Capital",i)*[p1cap(i)+ x1cap(i)];

The final equation above just states that the change in the value of output, V1TOT(i), is equal to the sum of the changes in expenditure on materials and primary factors. It follows patterns 11 and 13 in Table 1. Each term on the right hand side is equal to 100 times the change in expenditure on some input. The left hand side is equal to 100 times the change in total costs. This equation is often called the "Zero Pure Profits" equation. "Pure Profits" are profits which are not attributable to any inputfor example, monopoly profits, which derive from market power. Like most CGE models, MINIMAL assumes that markets are competitive, so that output prices reflect only input costs. Again like most CGE models, MINIMAL assumes that production technology displays constant returns to scale. This implies that output prices can be expressed as functions of input prices only, if there is no technical change. We could deduce from the above equations (if we ignored the a1prim term):
V1TOT(i)*p1tot(i) = sum{c,COM,sum{s,SRC, USE(c,s,i)*p(c,s)}} + FACTOR("Labour",i)*p1lab + FACTOR("Capital",i)*p1cap(i)

and
V1TOT(i)*x1tot(i) = sum{c,COM,sum{s,SRC, USE(c,s,i)*x(c,s,i)}} + FACTOR("Labour",i)*x1lab(i) + FACTOR("Capital",i)*x1cap(i)

The first of these two equations is an alternative way to write the Zero Pure Profits condition. 3.13. Household Demands Households are assumed to maximize utility by selecting an optimal bundle of goods to consume, within a given budget. In MINIMAL and in many larger models there is only one representative consuming household. Utility is assumed to be generated by a nested utility function in which the outer nest combines composite commodities (= composite goods) using a Cobb-Douglas aggregator function, and the inner nest forms composite commodities from imported and domestic variants using a CES aggregator function for each composite. This set-up is illustrated in Figure 6. The C goods consumed by households are just the seven composite commodities distinguished in Table 1. To maximise utility with a given budget, it is necessary that each composite commodity consumed is composed at minimum cost. With CES preferences prevailing between the domestic and the imported variety, this part of the consumer's problem has already been covered in the explanation of Excerpt 3. There, the consumer is identified as the user for which u = "Households". Equation E_x in Excerpt 4 is preceded by the indexing instruction (all,c,COM) (all,s,SRC) (all,u,IMPUSER). The set IMPUSER includes all demanders except exports. Thus the Armington composition of each composite commodity used by consumers has already been determined in Excerpt 4.

MINIMAL: A Simplified General Equilibrium Model

19

KEY Functional Form Inputs or Outputs

Utility

Cobb-Douglas

Good 1

up to

Good C

CES

CES

Domestic Good 1

Imported Good 1

Domestic Good C

Imported Good C

Figure 6. Nested Structure of Consumer Demand

The budget constraint states that the total value of consumers' purchases is exogenous to Households. In this simple model there is no link between household spending and spending. This means that there is no savings/consumption decision, nor is there any labour/leisure choice: the households consume all of their income. The budget available for consumption in nominal terms is W3TOT. The Cobb-Douglas specification of the outer nest of the utility function is extremely simple: it states that: UTILITY =
cCOM

[X_S(c,"Households")]c ,

(16)

where is the product operator, X_S(c,"Households") is consumption of composite commodity c and the cs are constant parameters. Households wish to maximize UTILITY in (16). Since taking the logarithm of a variable does not disturb the ordering of its values (that is, if a > b, then log a > log b), replacing the maximand in (16) by its logarithm yields a problem with exactly the same solution. We do this to make the algebra somewhat easier. log (UTILITY) =
cCOM

c log [X_S(c,"Households")] ,

(17)

Requiring the cs to add over c to unity does not change the nature of the maximization problem, and so we will require that
cCOM

c =

(18)

because (as will be seen below) this makes the interpretation of the cs more straightforward. The levels form of the budget constraint is: W3TOT =
cCOM

{X_S(c,"Households")

P_S(c,"Households")} ,

(19)

in which X_S(c,"Households") and P_S(c,"Households") are the quantity and price indexes for the Armington aggregates (i.e., for the composite commodities c; cCOM). A formal statement of the households' utility maximization problem may now be stated: given exogenous prices for the composite

20
5

MINIMAL: A Simplified General Equilibrium Model

commodities , choose a bundle of composite commodities {X_S(c,"Households"); cCOM} to maximize (17) subject to (19). The formal method of solution involves: (i) setting up a Lagrangean function:

L = c log [X_S(c,"Households")]
cCOM

+ {W3TOT

cCOM

X_S(c,"Households") P_S(c,"Households")};

(20)

(ii) differentiating L with respect to the choice variables6 {log X_S(c,"Households") (cCOM)} and with respect to the Lagrange multiplier ; (iii) setting these derivatives to zero; and (iv) solving the resulting equations for the values of X_S(c,"Households") (cCOM). We obtain: L = log X_S(c,"Households") c X_S(c,"Households") P_S(c,"Households") = 0 and L = W3TOT X_S(c,"Households") P_S(c,"Households") = 0 . cCOM (cCOM) (21)

(22)

The last of these equations is just the budget constraint again. Next it is convenient to solve for ; to do this we add (21) over all cCOM, obtaining:
cCOM

cCOM

{X_S(c,"Households") P_S(c,"Households")}
.

(23)

Keeping in mind that the cs add across composite commodities to unity [see (18)], and that the last summation in (23) yields total expenditure [see (19)], on solving (23) for , we find: = 1/W3TOT (24) Making this substitution for into (21), and solving for {X_S(c,"Households") P_S(c,"Households")}, we obtain: X_S(c,"Households") P_S(c,"Households") = c W3TOT. (cCOM) (25) This is the famous Cobb-Douglas result which says that the share of any commodity in the budget remains constant irrespective of movements in total expenditure and prices. The interpretation of the parameters c is now clear; they are the shares of the household budget devoted to commodity c. Transferring P_S(c,"Households") to the right-hand side of (25) yields Households' demand function for composite commodity c: c W3TOT X_S(c,"Households") = P_S(c,"Households") . (cCOM) (26)

From (26) we note immediately the following results for the composite commodities: the marginal budget share of composite c is c, which is the same as its overall (or average) budget share;

It is true that given the prices of the imported and the domestically sourced components of composite commodity c, the

"Households" user does determine the composition of Armington aggregate c, and therefore in some sense also the Armington price index; note, though, that households take the prices of the components as given. Because a necessary condition for utility maximization is that all Armington composites must be composed at minimum cost (no matter what mix of composites is chosen), we can treat the two stages of the consumer optimization separately. Thus the optimization in the outer nest can take the prices of the Armington composites as given by the pre-optimization (cost minimization) of the inner nest.
6

In looking for the stationary points of any function y(x), it is immaterial whether we differentiate with respect to x itself or

instead with respect to any 1:1 function of x. Logarithm is such a 1:1 function. In the text we use this transformation because it simplifies the algebra of the problem we are working on.

MINIMAL: A Simplified General Equilibrium Model

21

the elasticity of demand by households with respect to total (nominal) expenditure is +1 for all composites; all composites have an own elasticity of demand equal to 1; all composites have cross price elasticities equal to zero. The linearized from of (26) is x_s(c,"Households") + p_s(c,"Households") = w3tot (27) This is equation E_x3 of Excerpt 7 from the TABLO file. Aggregate real consumption X3TOT is defined to be such that percent changes in it are equal to the percent changes in UTILITY; i.e. x3tot = 100 d log (UTILITY) From (17), d log (UTILITY) = so that x3tot = =
cCOM cCOM

(28)

c d log [X_S(c,"Households")]
;

(23)

c 100 d log [X_S(c,"Households")]


.

(29) (30)

cCOM

c x _s(c,"Households")

From the benchmark data base (see Figure 1) we can read off the values of the shares c; they are: USE_S(c,"Households") (31) c = USE_CS("Households"). Given that the cs are true parameters (rather than coefficients that must be updated from solution to solution), (31) is true not only of the benchmark solution data, but universally so. Substituting from (31) into (30) and rearranging we obtain: USE_CS("Households") x3tot =
cCOM

USE_S(c,"Households") x_s(c,"Households") .

(32)

This is Equation E_x3tot of Excerpt 7. Given the definition of X3TOT, the consumer price index, P3TOT must satisfy the value preservation property. Thus we require that X3TOT P3TOT =
cCOM

X_S(c,"Households") P_S(c,"Households") .

(33)

The linearized form of this is: x3tot + p3tot = [from (30)] Hence p3tot =
cCOM cCOM

c x _s(c,"Households") + c p_s(c,"Households") .
cCOM

(34) . (35)

x3tot

cCOM

c p_s(c,"Households")

c p_s(c,"Households")

(36)

Substituting for the shares c from (31) into (36), and rearranging, we obtain: USE_CS("Households") p3tot =
cCOM

USE_S(c,"Households") p_s(c,"Households") .

This is Equation E_p3tot from excerpt 7 of the TABLO file.

22

MINIMAL: A Simplified General Equilibrium Model


! Excerpt 7 of TABLO input file: ! ! Household demands ! Variable p3tot # Consumer price index #; x3tot # Real household consumption #; w3tot # Nominal total household consumption #; Equation E_x3 (all,c,COM) x_s(c,"Households") +

p_s(c,"Households") = w3tot;

Equation E_x3tot USE_CS("Households")*x3tot = sum{c,COM, USE_S(c,"Households")*x_s(c,"Households")}; Equation E_p3tot USE_CS("Households")*p3tot = sum{c,COM, USE_S(c,"Households")*p_s(c,"Households")};

3.14. Export demands MINIMAL allows foreign demand for locally-produced goods to be price-sensitive. If the local price of a good rises, relative to the world price, export demand will fall. Thus, equation E_x4a in Excerpt 8 specifies downward-sloping foreign demand schedules for exports. In the levels, the equation would read: P(c,"dom") X(c,"dom","Exports") = F4Q(c) PHI*PWORLD(c)

-EXP_ELAST(c)

(37)

where EXP_ELAST(c) is the elasticity of demand. That is, exports of good c are a declining function of the price in foreign currency, (P(c,"dom")/PHI) relative to the world price PWORLD(c). The exchange rate PHI converts local to foreign currency units. If, for some commodity, EXP_ELAST = 5, a 1% increase in price would cause a 5% fall in foreign demand. Changes in the shift variable F4Q could be used to simulate exogenous shifts in foreign demands. Equation E_x4b has a boring but necessary task. It holds at zero the change in exports of imported goods. In the MINIMAL database, there are no re-exports. If we constructed a similar model of HongKong or the Netherlands, re-exports might be quite large. In that case we would have to devise some theory to model themby replacing E_x4b with a more interesting equation.
! Excerpt 8 of TABLO input file: ! ! Export demands ! Variable (all,c,COM) pworld(c) # World prices, measured in foreign currency #; (all,c,COM) f4q(c) # Quantity shift in foreign demand #; phi # Exchange rate, (local $)/(foreign $) #; Coefficient (all,c,COM) EXP_ELAST(c) # Export demand elasticities #; Read EXP_ELAST from file BASEDATA header "P018"; Equation E_x4a (all,c,COM) x(c,"dom","Exports") = f4q(c)-EXP_ELAST(c)*[{p(c,"dom")-phi}- pworld(c)]; Equation E_x4b (all,c,COM) x(c,"imp","Exports") = 0;

3.15. Domestic market clearing and prices The first equation in Excerpt 9, E_x1tot, is the market-clearing equation for domestic commodities. It simply states that output of each industry, X1TOT(i) is equal to total demand for the domestically produced commodity, X0(c,"dom").

MINIMAL: A Simplified General Equilibrium Model

23

GEMPACK is rather fussy about comparing elements from different setseven when, as is the case with COM and IND, they have the same elements. In this case, TABLO requires a subset statement to indicate that the sets COM and IND really do have the same members. Equation E_pA relates the user price of domestic goods, P(c,"dom") to the cost of production P1TOT(c) and to the rate of output tax PTXRATE(c). In the levels we have: P(c,"dom") = P1TOT(c)*[1+ PTXRATE(c)] (38) Since PTXRATE(c) has no units and could change sign (tax might become subsidy), it is appropriate to tranform it into an ordinary (rather than percent) change variable. We apply pattern 4C in Table 1: Y = XZ implies Yy = XZx + XZz implies y = x +100(X/Y)Z (39) (40) This gives: p(c,"dom") = p1tot(c) + 100*[P1TOT(c)/P(c,"dom")]*Delptxrate(c);

To get Equation E_pA we replace the price ratio in square brackets (share of production cost in user price) with the equivalent share [V1TOT(c)/(V1TOT(c)+V1PTX(c)].
! Excerpt 9 of TABLO input file: ! ! Market clearing and prices for domestic commodities ! Subset COM is subset of IND; Equation E_x1tot (all,c,COM) x1tot(c) = x0(c,"dom"); Variable (change)(all,c,COM) Delptxrate(c)

# Ordinary change in rate of domestic tax #;

Equation E_pA (all,c,COM) p(c,"dom") = p1tot(c) + 100*[V1TOT(c)/(V1TOT(c)+V1PTX(c))]*Delptxrate(c);

3.16. Prices of imports Equation E_pB relates the user price of imported goods, P(c,"imp") to the local-currency border price, PHI*PWORLD(c) and to the rate of import tax MTXRATE(c). In the levels we have: P(c,"imp") = PHI*PWORLD(c)*[1+ MTXRATE(c)] (41) The linearized form follows the same pattern as Equation E_pA. This time the price ratio in square brackets [V0CIF(c)/SALES(c,"imp")] may be interpreted as the share of border cost in user price.
! Excerpt 10 of TABLO input file: ! ! Prices for imported commodities ! Variable (change)(all,c,COM) Delmtxrate(c)

# Ordinary change in rate of import tax #;

Equation E_pB (all,c,COM) p(c,"imp") = pworld(c)+phi + 100*[V0CIF(c)/SALES(c,"imp")]*Delmtxrate(c);

3.17. GDP from income side The formula for the coefficient V0GDPINC expresses GDP as the sum of primary factor costs and indirect taxes. Equation E_w0gdpinc is just a translation into linearized form of that formula. The left hand side: V0GDPINC*w0gdpinc is just 100 times the change in nominal GDP. Each term on the right hand side is also 100 times the change in some value. To understand the contributions made by indirect taxes, note that the expression for production tax revenue: 100*V1TOT(c)*Delptxrate(c) + V1PTX(c)*[x1tot(c)+ p1tot(c)]

24

MINIMAL: A Simplified General Equilibrium Model

may be broken into two terms. The first term is due to the change in the tax rate; it is 100 *(the original tax base)*(the change in tax rate). The second term is due to the change in the tax base; it is proportional both to the original tax revenue, V1PTX(i), and to the percent change in the tax base. Because the TABLO language is insensitive to case, we cannot follow our normal practice of using lower case for the percent changes in nominal GDP. GEMPACK would not distinguish between "V0GDPINC" and "v0gdpinc". To avoid this problem we use "w0gdpinc" for the percent-change variable.
! Excerpt 11 of TABLO input file: ! ! GDP from income side ! Variable w0gdpinc # Nominal GDP from income side #; Coefficient V0GDPINC # GDP from income side #; Formula V0GDPINC = sum{i,IND, sum{f,FAC, FACTOR(f,i)}} + sum{c,COM, V1PTX(c) + V0MTX(c)}; Equation E_w0gdpinc V0GDPINC*w0gdpinc = sum{i,IND, FACTOR( "Labour",i)*[p1lab + x1lab(i)]} +sum{i,IND, FACTOR("Capital",i)*[p1cap(i) + x1cap(i)]} +sum{c,COM, 100*V1TOT(c)*Delptxrate(c) + V1PTX(c)*[x1tot(c)+ p1tot(c)]} +sum{c,COM, 100*V0CIF(c)*Delmtxrate(c) + V0MTX(c)*[x0(c,"imp")+pworld(c)+phi]};

3.18. GDP from expenditure side Excerpt 12 computes the percent change in nominal GDP from the expenditure side, and divides the change into price and quantity components. The formula for V0GDPEXP gives GDP as the sum of final demands (valued at user prices) less the value of imports at border prices (C+I+G+X-M). Equation E_w0gdpexp is the change form of this formula. It is an accounting identity that GDP from the expenditure and income sides must be equal, both in the levels and in percent changes. That is: V0GDPEXP V0GDPINC, and w0gdpexp w0gdpinc. Nonetheless, we find it useful to compute these values separately as a check on the model's accounting relations.
! Excerpt 12 of TABLO input file: ! ! Expenditure-side GDP measures ! Variable w0gdpexp p0gdpexp x0gdpexp

# Nominal GDP from expenditure side #; # GDP price index, expenditure side #; # Real GDP from expenditure side #;

Coefficient V0GDPEXP # GDP from expenditure side #; Formula V0GDPEXP = sum{c,COM, sum{s,SRC,sum{u,FINALUSER, USE(c,s,u)}} - V0CIF(c)}; Equation E_w0gdpexp V0GDPEXP*w0gdpexp = sum{c,COM, sum{s,SRC,sum{u,FINALUSER, USE(c,s,u)*[p(c,s)+x(c,s,u)]}} - V0CIF(c)*[x0(c,"imp")+ pworld(c)+phi]}; Equation E_p0gdpexp V0GDPEXP*p0gdpexp = sum{c,COM, sum{s,SRC,sum{u,FINALUSER, USE(c,s,u)*p(c,s)}}

- V0CIF(c)*[pworld(c)+phi]};

Equation E_x0gdpexp x0gdpexp = w0gdpexp - p0gdpexp;

MINIMAL: A Simplified General Equilibrium Model

25

Equation E_p0gdpexp is the same as equation E_w0gdpexp, except that only price terms are included. It defines p0gdpexp as a final-demand-weighted average of local prices less the average change in the border price of imports. Equation E_x0gdpexp uses p0gdpexp as a GDP price deflator to obtain a measure of the change in real GDP. The underlying levels equation is: V0GDPEXP = P0GDPEXP*X0GDPEXP 3.19. More macro variables The next 5 equations define 5 useful macro variables.
! Excerpt 13 of TABLO input file: ! ! More macro variables ! Variable x4tot # p4tot # p2tot # x0cif_c (change)

Export volume index #; Export price index #; Investment price index #; # Import volume index, CIF prices #; delB # (Balance of trade)/GDP #;

Equation E_x4tot sum{c,COM, USE(c,"dom","Exports")*[x4tot - x(c,"dom","Exports")]} = 0; Equation E_p4tot sum{c,COM, USE(c,"dom","Exports")*[p4tot - p(c,"dom")]} = 0; Equation E_p2tot sum{c,COM, sum{s,SRC, USE(c,s,"Investment")*[p2tot - p(c,s)]}} = 0; Equation E_x0cif_c sum{c,COM, V0CIF(c)*[x0cif_c

- x0(c,"imp")]}=0;

Equation E_delB 100*V0GDPEXP*delB= sum{c,COM, USE(c,"dom","Exports")*[p(c,"dom")+x(c,"dom","Exports")-w0gdpexp] - V0CIF(c)*[x0(c,"imp")+ pworld(c)+phi-w0gdpexp]};

The first 4 equations define various price and volume indices; following pattern 15C in Table 2. Equation E_x4tot might have been written:
sum{c,COM,USE(c,"dom","Exports")}*x4tot = sum{c,COM,USE(c,"dom","Exports")*x(c,"dom","Exports")};

ie, x4tot is a weighted average of changes in export volumes, using export values as the weights. The actual equation in the excerpt is written more compactly, but means the same. The final equation measures the trade balance. Because it may change sign, the balance of trade is computed as an ordinary change, not a percent change. We avoid choosing units by expressing this change as a fraction of GDP. The equation follows pattern 5C of Table 2. 3.20. Factor market variables This section defines some variables which are useful in modelling factor markets. The first equation, defines the real wage as the nominal wage deflated by the consumer price index, p3tot. In the levels this equation would be: REALWAGE = P1LAB/P3TOT One way to model "sticky" labour markets is to hold real wages constant. The next equation defines a percent-change index of the aggregate employment of labour, using pattern 15 of Table 2. In computing this measure, we use wage-bill weights, reflecting the relative marginal products of workers in different industries. Therefore, if wage rates varied widely between sectors, the "employ" variable might not accurately represent the change in the number of hours worked (or persons employed).

26

MINIMAL: A Simplified General Equilibrium Model

The final equation is derived from the levels form: GRET(i) = P1CAP(i)/P2TOT That is, the gross rate of return on a unit of new capital is the annual revenue it yields (P1CAP) divided by the cost of creating it (P2TOT). In a long-run equilibrium we would expect arbitrage behaviour by investors to stabilize these ratios. For short-run simulations we must remember that GRET is a myopic rate of return, ie, it assumes that the future earnings of a new unit of capital in some industry will be the same as today's earnings.
! Excerpt 14 of TABLO input file: ! ! Variables to assist factor market closure ! Variable realwage # Wage rate deflated by CPI #; employ # Aggregate employment #; (all,i,IND) gret(i) # Gross rate of return #; realwage = p1lab - p3tot;

Equation E_realwage Equation E_employ Equation E_gret

sum{i,IND, FACTOR("Labour",i)*[employ - x1lab(i)]}=0; (all,i,IND) gret(i) = p1cap(i) - p2tot;

3.21. Updating the flows data Part of the GEMPACK solution procedure requires that we can use simulation results (ie, percent changes in variables) to produce a post-simulation or updated database. The purpose of the update statements in Excerpt 14 is to tell the computer how to do this. Two types of update statement are shown. The first 3 are of the default type, also called "product updates". The first one simply tells GEMPACK that each cell in the USE flows matrix is the product of a price and a quantity, that is: USE(c,s,u) = P(c,s)*X(c,s,u) cCOM, sSRC, uUSER GEMPACK then updates USE as follows: USE(c,s,u) USE(c,s,u)*[1+0.01*p(c,s)+0.01*x(c,s,u)] The last two Update statements are "change updates". In this case the modeller supplies an explicit formula, containing coefficient and variable values, for the ordinary change in the database value. The change in import tax revenue, V0MTX, is divided into two parts. The first, V0CIF(c)*Delmtxrate(c), is the ordinary change in the tax rate times the original tax base (the border value of imports). The second part, 0.01*V0MTX(c)*[x0(c,"imp")+ pworld(c)+phi], is the original tax revenue times the proportional change (=%/100) in the value of the tax base.
! Excerpt 15 of TABLO input file: ! ! Updating rules ! Update (all,c,COM)(all,s,SRC)(all,u,USER) USE(c,s,u) = p(c,s)*x(c,s,u); (all,i,IND) FACTOR("Labour",i) = p1lab*x1lab(i); (all,i,IND) FACTOR("Capital",i) = p1cap(i)*x1cap(i); (change)(all,c,COM) V0MTX(c) = V0CIF(c)*Delmtxrate(c) + 0.01*V0MTX(c)*[x0(c,"imp")+ pworld(c)+phi]; (change)(all,c,COM) V1PTX(c) = V1TOT(c)*Delptxrate(c) + 0.01*V1PTX(c)*[x1tot(c)+ p1tot(c)];

3.22. Creating a data summary file The last two sections of the TABLO input file create a file containing summary data. This is used to check that the input data adds up properly and to assist in explaining results.

MINIMAL: A Simplified General Equilibrium Model


! Excerpt 16 of TABLO input file: ! ! Summarize and check data ! File (new) SUMMARY # output file for summary data #; Coefficient (all,c,COM) CHECK(c) # (costs + tax) - sales : should = 0 #; Formula (all,c,COM) CHECK(c) = V1TOT(c) + V1PTX(c) - SALES(c,"dom"); Set COSTCAT # cost categories # = SRC union FAC; Coefficient (all,c,COSTCAT)(all,i,IND) COSTMAT(c,i) # Summary of industry costs #; Formula (all,i,IND)(all,s,SRC) COSTMAT(s,i) = sum{c,COM,USE(c,s,i)}; (all,i,IND)(all,f,FAC) COSTMAT(f,i) = FACTOR(f,i); Write CHECK COSTMAT SALES V1PRIM V1TOT V0CIF V0GDPEXP V0GDPINC to to to to to to to to file file file file file file file file SUMMARY SUMMARY SUMMARY SUMMARY SUMMARY SUMMARY SUMMARY SUMMARY header header header header header header header header "CHEK"; "COST"; "SALE"; "1PRM"; "1TOT"; "0CIF"; "GDPE"; "GDPI";

27

The capital shares computed in Excerpt 17 are inversely related to shortrun supply elasticities. High import shares indicate that local industries face significant import competition.
! Excerpt 17 of TABLO input file: ! ! More summary data ! Set MAINUSER # broad user groups # (Intermediate, Investment, Households, Government, Exports); Subset FinalUser is subset of MAINUSER; Coefficient (all,c,COM)(all,u,MAINUSER) MAINSALES(c,u) # Summary of sales #; Formula (all,c,COM) MAINSALES(c,"Intermediate") = sum{i,IND,USE(c,"dom",i)}; (all,c,COM)(all,u,FINALUSER) MAINSALES(c,u) = USE(c,"dom",u); Coefficient (all,i,IND) CAPSHR(i) # Share of capital in primary factor costs #; Formula (all,i,IND) CAPSHR(i) = FACTOR("capital",i)/V1PRIM(i); Coefficient (all,c,COM) IMPSHR(c) # Share imports in local purchases #; Formula (all,c,COM) IMPSHR(c) = sum{u,IMPUSER,USE(c,"imp",u)}/sum{u,IMPUSER,USE_S(c,u)}; Write MAINSALES to file SUMMARY header "MSAL"; CAPSHR to file SUMMARY header "KSHR"; IMPSHR to file SUMMARY header "MSHR";

4. Accurate solutions from linearized equations


The linearized (or percent-change) equations described in preceding sections are local approximations to the underlying levels equation; that is, they are accurate only for small changes. For example, supposing we had the equation: Y= X with initial solution X=4 and Y = 2. The percent-change form of this equation is: y=x (42) (43)

Imagine that we wish to compute the effect of increasing X from 4 to 16, a rise of 300%. The linearized equation then suggests that Y will increase by 150%, ie, from 2 to 5. The true answer should be 4 (4*4=16). Our estimate of the change in Y,3 (=5-2), is 50% larger than the true answer 2 (=4-2).

28

MINIMAL: A Simplified General Equilibrium Model

YJ

1 step

dY Y
exact

Exact

Y0 X0 dX
Figure 7. Linearisation error

XF

This inaccuracy is depicted in Figure 7. There, the levels equation is represented by a curve, and the linearized equation corresponds to a line tangent to the curve at the initial values of X and Y, X0 and Y0. X increases by dX, moving from X0 to XF. The change in Y, dY, is estimated from the straight line approximation. Clearly, the estimated change, dY, is larger than the true change, Yexact - Y0. We call this linearization error. The linear estimate of the final value of Y, YJ, is called the Johansen estimate7. The error would be proportionately less for smaller changes. For example, suppose we increased X by 125% (from 4 to 9). The linear equation then suggests that the percent change in Y would be 62.5% (ie, from 2 to 3.25). That is a change of 1.25. The true change should be 1 (from 2 to 3, since 3*3=9). Our estimate of the change in Y (1.25) is 25% larger than the true answer (1). Comparing this to the previous example, we see that the smaller percent change produced a linearization error that is smaller in both absolute and relative terms (25% instead of 50%). As Figure 7 suggests, the smaller is x, the smaller is the proportional error in y.
YJ Y 1 step

Y2 Y1

Y3 Y
exact

3 step Exact

Y0 X X0 X1 X2

X3

Figure 8. Multistep process to reduce linearisation error

This observation leads to the idea of breaking large changes in X into a number of steps, as shown in Figure 8. For each sub-change in X, we use the linear approximation to derive the consequent subchange in Y. Then, using the new values of X and Y, we recompute the slope of the tangent line at the
7

Named after Leif Johansen, 1930-82, a Norwegian who used the small-change approach to build the first practical CGE

model.

MINIMAL: A Simplified General Equilibrium Model

29

new position. The process is repeated for each step. If we use 3 steps (see Figure 8), the final value of Y, Y3, is closer to Yexact than was the Johansen estimate YJ. Returning to our numerical example, we could break the 300% change in X into 2 equal steps of 100% (from 4 to 8, then from 8 to 16). For each step, the linearized form suggests that the percent change in Y would be 50% (=100/2). Compounding the 2 changes of 50% suggests that the final value of Y will be 2.25 (=1.5*1.5) times the initial value, that is, an increase of 125%. We call this a 2-step Euler calculation8. The 2-step Euler approximation is more accurate than the 1-step Johansen appproximation.
Table 3 Johansen and Euler approximations

Method Johansen (1-step) Euler 2-step Euler 4-step Euler -step (exact)

y 150% 125% 112.3% 100%

Error 50% 25% 12.3% 0

Next we try breaking the change in X into 4 equal steps. Each step should be of size 41.42% (because 1.4142^4=4, and we wish to increase X by a factor of 4). So according to the linear equation the change in Y at each step will be 20.71% (=41.42/2). Accumulating these 4 changes (1.2071^4) means that Y will grow by a factor of 2.123an increase of 112.3%. This is a still more accurate approximation to the true answer, 100%.
Observed Historical Data X(0) Calculate Derivative Matrices

Changes in Endogenous Variables

Solve Linear System

1/3 of Changes in Exogenous Variables

New Updated Data X(1)

Calculate Derivative Matrices

Changes in Endogenous Variables

Solve Linear System

1/3 of Changes in Exogenous Variables

New Updated Data X(2)

Calculate Derivative Matrices

Changes in Endogenous Variables

Solve Linear System

1/3 of Changes in Exogenous Variables

Final Updated Data X(3)

Total Changes in Endogenous Variables

Figure 9. 3-step Euler computation in GEMPACK

For many purposes a 4-step Euler calculation will be accurate enough. However, it can be proved mathematically that we can get as accurate an estimate for y as we wish, if we break our shock (change
8

Named after Leonhard Euler, 1707-83, the prolific Swiss mathematician.

30

MINIMAL: A Simplified General Equilibrium Model

in X) into sufficiently many steps. In particular, as indicated in Table 3, we could get the exact answer by breaking the shock into infinitely many tiny parts. That would take forever, so it is not a practical strategy. But Table 3 suggests a way to get high accuracy without lengthy computations. Notice from the first three rows that by doubling the number of steps we seem to halve the error. Therefore, without actually doing the computation, we can predict that an 8-step Euler calculation would give a percent change in Y of just over 106%. By the same logic, we could predict the result of a 1000-step calculation. GEMPACK uses this process, called extrapolation, to produce highly accurate estimates of the exact solution of large systems of non-linear equations. In our example, the extrapolated result requires 7 (= 1 + 2 + 4) steps to compute but is more accurate than that given by a single 7-step computation. Alternatively, extrapolation enables us to obtain given accuracy with fewer steps. Each step of a multi-step solution requires: computation from data of the coefficients of the linearized equation systemcorresponding to the Read and Formula statements in the TABLO input file; solution of the large linear equation system (1); and updating of the database using the computed changes in variables. These steps are depicted in Figure 9. The Euler method is the simplest of several related techniques of numerical integrationthe process of using differential equations (change formulae) to move from one solution to another. GEMPACK offers a choice of several such techniques. The Gragg methoda variation on Euleris the most efficient.

5. Closing the model


Like every CGE model, MINIMAL has more variables than equations. The variables may be divided into two groups: endogenous variableswhich are explained by the model; and exogenous variables their values must be set by the model user. A particular choice of which variables are to be exogenous is called a closure. We are freewithin certain limitsto choose which closure we prefer, but we must obey the following mathematical rule:

Number of endogenous variables = Number of equations


That is, each equation explains just one variable. This suggests the following strategy for devising a sensible closure: (a) Identify the variable that each equation explains: it will be endogenous. (b) Remaining variables, not explained by any equation, will be exogenous. Table 4 applies that strategy. The left-hand columns show the name and dimensions of each variable. The corresponding right hand columns show the name and dimensions of the equation that seems to explain that variable. In most cases equations have been named after the variable which appears on the LHS, so the matching is easy. Sometimes we need several different equations to explain all parts of a matrix variable. For example, the equation E_x (dimensioned COM*SRC*IMPUSER) explains all except the export user parts of the variable x (dimensioned COM*SRC*USER). Equations E_x4a and E_x4b explain the export user parts. Some variables are only partially explained. For example, the variable x_s (demand for composite goods) is dimensioned COM*IMPUSER. Equations E_x1 and E_x3 explain the industry and household parts of IMPUSER, but MINIMAL has no equations that explain investment and government demands. The last rows of Table 4 show variables not explained by any equation: most of these are naturally exogenous. They include: the exchange rate, investment and government demands, technical change, world prices and taxes.

MINIMAL: A Simplified General Equilibrium Model


Table 4: Matching Variables to Equations

31

Variables fully explained by a matching equation: Variable Size x0 COM*SRC p_s COM*IMPUSER delB 1 p1tot IND p2tot 1 p3tot 1 p4tot 1 x4tot 1 x1cap IND x1lab IND x1tot IND x3tot 1 employ 1 p1prim IND x1prim IND gret IND p0gdpexp 1 realwage 1 w0gdpexp 1 w0gdpinc 1 x0gdpexp 1 x0cif_c 1 Variables fully explained by several equations: Variable Size x COM*SRC*USER

Equation E_x0 E_p_s E_delB E_p1tot E_p2tot E_p3tot E_p4tot E_x4tot E_x1cap E_x1lab E_x1tot E_x3tot E_employ E_p1prim E_x1prim E_gret E_p0gdpexp E_realwage E_w0gdpexp E_w0gdpinc E_x0gdpexp E_x0cif_c Equation E_x E_x4a E_x4b E_pA E_pB Equation E_x1 E_x3

Size COM*SRC COM*IMPUSER 1 IND 1 1 1 1 IND IND COM 1 1 IND IND IND 1 1 1 1 1 1 Size COM*SRC*IMPUSER COM COM COM COM Size COM*IND COM

COM*SRC

Variables partly explained by several equations: Variable Size x_s(COM,IND) COM*IND x_s(COM,"Household") COM

Variables not explained by any equation: possible exogenous list Variable Size Description Swap with phi 1 Exchange rate x_s(COM,"Investment") COM Investment demands x_s(COM,"Government") COM Government demands p1cap IND Rental price of capital x1cap p1lab 1 Wage realwage w3tot 1 Household budget x3tot a1prim IND Factor-using technical change pworld COM World prices f4q COM Export demand shift Delmtxrate COM Tax rate on imports Delptxrate COM Tax rate on production

32

MINIMAL: A Simplified General Equilibrium Model

Although the last rows of Table 4 define a valid closure of MINIMAL, we in fact choose a slightly different closure. Starting from the mechanically derived closure of Table 3, we swap 3 pairs of variables between the exogenous and endogenous lists: Instead of p1cap (rental prices of capital) we exogenize x1cap (current capital stocks). Instead of p1lab (the nominal wage) we exogenize realwage (the real wage). Instead of w3tot (the household budget) we exogenize x3tot (real household consumption) The resulting (rather famous) closure is shown in Table 5. It is the closure originally devised for shortrun applications of the ORANI model9.
Table 5: The ORANI short-run closure

Variable phi x_s(COM,"Investment") x_s(COM,"Government") x1cap realwage x3tot a1prim pworld f4q Delmtxrate Delptxrate

Size 1 COM COM IND 1 1 IND COM COM COM COM

Description Exchange rate $A/$US Investment demands Government demands Current capital stocks Real wage Real household consumption Factor-using technical change World prices $US Export demand shift Tax rate on imports Tax rate on production

A choice of closure reflects two different types of consideration. First, the closure is associated with our idea of the simulation timescale, that is, the period of time which would be needed for economic variables to adjust to a new equilibrium. The timescale assumption affects the way we model factor markets. For example, in a shortrun simulation we normally hold capital stocks fixed, as in Table 5. The idea is that capital stocks take some time to installtoo long for them to be affected, in the short run, by the shocks. Shortrun closures often also allow for rigidities in the labour market: in this case by holding real wages fixed. The length of the 'short' run is not explicit, but is usually thought to be between 1 and 3 years. Second, the choice of closure is affected by the needs of a particular simulation and by our view of the most appropriate assumption for those variables that the model does not explain. For example, MINIMAL provides no theory to explain the aggregate level of household demand, x3tot. In Table 4 it is simply held fixed. Individual investment and government demands are also fixed. Therefore, if some shock reduced GDP, the balance of trade (which is endogenous) might move towards deficit, reflecting national dis-saving. We might wish to prevent this by fixing the balance of trade, DelB, instead of x3tot. This would allow us to use the endogenous x3tot as a simple index of welfare. Table 6 shows a possible longrun closure. Here: Capital stocks are free to adjust in such a way that fixed rates of return (gret) are maintained. An open capital market is implicitly assumed, since there is no link between capital formation and domestic saving. Aggregate employment is fixed and the real wage adjusts. This would be consistent with the idea that both the labour force and the rate of unemployment (NAIRU) are, in the long run, determined by mechanisms outside of the model. Instead of x3tot (real household consumption) we exogenize DelB, the balance of trade as a fraction of GDP. The idea here is that, in the long run the rest of the world might be reluctant to fund an increased trade deficit.

The ORANI model of the Australian economy was created in the early 1980s by Peter Dixon and others; it now has

descendants in many other countries.

MINIMAL: A Simplified General Equilibrium Model


Table 6: A possible long-run closure

33

Variable phi x_s(COM,"Investment") x_s(COM,"Government") gret employ DelB a1prim pworld f4q Delmtxrate Delptxrate

Size 1 COM COM IND 1 1 IND COM COM COM COM

Description Exchange rate $A/$US Investment demands Government demands Rates of return on capital Aggregate employment Balance of trade/GDP Factor-using technical change World prices, $US Export demand shift Tax rate on imports Tax rate on production

It should be emphasized that, particularly in a more complex model, many closures might be used for different purposes. There is not a unique natural or correct closure. On the other hand, every sensible closure must satisfy certain requirements. For example, price variables in MINIMAL's equations always appear as price ratios; it is a feature of most neo-classical models that only relative prices matter. Thus, if we have a solution of the model, we can always create another solution just by increasing all local prices by, say, 10%. Therefore, for the overall price level to be determined, there has to be at least one exogenous variable measured in local currency units. This variablethere is normally just oneis called the numeraire. In Tables 5 and 6 the exchange rate, phi, is the numeraire. Another popular choice is p3tot, the CPI. For similar reasons, there is no mechanism in MINIMAL which would determine the total size of the economy. Some quantity variables must be exogenous: these often include primary factor endowments and final demand aggregates. MINIMAL, like ORANI, lacks equations which explain: Changes in the absolute price level. We have to exogenously set either the exchange rate or some domestic price index. This setting determines, in an arbitrary way, whether changes in the real exchange rate are manifested either as changes in domestic prices or as changes in the exchange rate. However, results for real variables are unaffected by this decision. Labour supply. We have to exogenously set either the average wage level (real or nominal) or employment. This setting determines whether a more buoyant labour market is manifested either as higher wages or as greater employment. Changes in the size and composition of absorption. Either we must set these exogenously or else the trade balance must be fixed while one or more components of absorption adjust. This setting determines increased national income appears either as increased absorption, or alternatively as an improved balance of trade.

34

MINIMAL: A Simplified General Equilibrium Model

6. Overview of computing using GEMPACK


Previous sections have described at length how MINIMAL's equations are specified using the TABLO language. Figure 10 shows how GEMPACK uses this specification to produce a program designed especially for solving the MINIMAL model. The equations are contained in the TABLO input file MINIMAL.TAB, which is made of all the excerpts listed above. Another text file, MINIMAL.STI, contains a few more details of the model. The TABLO program converts the TAB and STI files into a FORTRAN source file, MINIMAL.FOR, which contains the model-specific code needed for a solution program. TABLO also produces two auxiliary files (AXS and AXT) containing lists of variable names and similar data. A FORTRAN compiler turns MINIMAL.FOR into the executable program MINIMAL.EXE, which can be used to solve the model specified by the user in the TAB and STI files.

MINIMAL.TAB

MINIMAL.STI

TABLO program

MINIMAL.FOR

Legend

FORTRAN compiler

Binary File

Program

Text File

MINIMAL.AXT

MINIMAL.AXS

MINIMAL.EXE

Figure 10. From TAB file to model-specific solution program

Figure 11 shows how the program MINIMAL.EXE computes simulation results. It must be used in conjunction with the two auxiliary files, MINIMAL.AXS and MINIMAL.AXT. The economically interesting inputs to the MINIMAL program are: MINIMAL.HAR, which contains all the flows and parameter data needed to describe the initial equilibrium; and the CMF file, which contains details of the closure and shocks associated with a particular simulation. Using these inputs, MINIMAL.EXE computes: a solution (SL4) file showing the effects of the shocks on endogenous variables. The effects are expressed in terms of percent changes from the initial equilibrium; an updated data file, of the same format as MINIMAL.HAR, but instead containing all the flows data needed to describe the post-shock equilibrium; and two summary files, containing subtotals computed from either the initial or the post shock data files.

MINIMAL: A Simplified General Equilibrium Model


MINIMAL.AXS auxiliary file CMF file

35

Closure

MINIMAL.AXT auxiliary file

Shocks

MINIMAL.HAR pre-simulation (base) data

MINIMAL.EXE

Solution Method

RunGEM

Summary of base data

Summary of updated data

post-simulation (updated) data

SL4 solution file of simulation results

view data and results with RunGEM

Figure 11. How RunGEM controls the TABLO-generated program

The program MINIMAL.EXE is not a Windows program, but a command-line program, which may be run from the command prompt (also known as a "DOS box"). Older readers may remember the time, before Windows, when all programs were of this type. Even today, many serious GEMPACK users prefer to work from the command prompt. GEMPACK also supplies a number of conventional (ie, graphical or mouse-driven) Windows programs, which assist the modeller who prefers not to use the command prompt. RunGEM is one of these programs. RunGEM is designed to assist in running simulations. It helps the modeller choose a closure and shocks, and creates a CMF file in which to store these data. Then it runs MINIMAL.EXE to produce a solution file. After the simulation, it is easy to view the percent-change results, or to examine either the pre- or post-simulation databases. All that RunGEM does is to hide from the modeller many of the messy details of running a simulation (such as the names and locations of numerous files). Underneath, it works in just the same way as the traditional command-line program.

36

MINIMAL: A Simplified General Equilibrium Model

7. Illustrative simulation
In this section we present and explain a typical MINIMAL simulation. The simulation consists of a 10% increase in aggregate real household consumption, x3tot. The standard ORANI shortrun closure is used, with a Gragg 2-4-6 extrapolation solution method. A possible reason for the consumption increase might be that the government substantially reduced income taxes, which are not modelled in MINIMAL. Figure 12 is a schematic representation of the short-run macro environment. There, rectangles enclose exogenous variables and ovals enclose endogenous variables. The arrows indicate direction of causation. Thus, on the supply-side of the macroeconomy, capital stocks (x1cap), technology (a1prim) and the real wage are exogenous. With the real wage given, the model can determine aggregate employment. With employment, technology and capital determined, aggregate output (GDP) can also be determined. On the demand side, all components of domestic absorption are fixed: aggregate real household consumption (x3tot); and all government and investment demands (government and investment parts of x_s). With GDP determined from the supply side and domestic absorption given, the trade balance must adjust to satisfy the GDP identity. Thus, if our shock causes trade balance to move toward deficit, GDP will increase less than domestic absorption.
real wage rate of return on capital
exogenous

endogenous

Employment

primary fact. tech. change

Capital

GDP

Private Consumption

Investment

Government Consumption

Trade Balance

Figure 12. Schematic representation of the ORANI short-run closure

The results of the simulation are shown in in Tables 7 and 8. Table 9 contains some database shares which are useful in explaining results. The shares are drawn from the summary file described in Excerpt 15 above. From the database in Table 1 we see that household consumption largely consists of domesticallyproduced Manufacture, TradeTranspt, FinanProprty, and Services. Table 9 shows that these same sectors sell the highest share of their output to households. In the short-run environment, with industry capital stocks fixed, the only way for these industries to increase output is to hire more labour. However, additional units of labour are not as productive as the existing labour (there is a declining marginal product of labour). These means that unit costs increase with output. In the short run, supply curve are upward-sloping (see Figure 13). We can see this from three equations describing primary factor demands, from Excerpts 5 and 6 above: x1prim(i) = a1prim(i) + x1tot(i); x1prim(i) = S1LAB(i)*x1lab(i) + S1CAP(i)*x1cap(i). x1lab(i) = x1prim(i) - SIGMA1PRIM(i)*[p1lab-p1prim(i)]; where S1LAB and S1CAP are the shares of labour and capital in value-added. Here we will be assuming that both efficiency (a1prim) and capital stocks (x1cap) are fixed (ie, =0). Hence we can deduce: x1tot(i) = LABSHR(i)*x1lab(i) x1lab(i) = SIGMA1PRIM(i)*[p1cap(i) - p1lab]

MINIMAL: A Simplified General Equilibrium Model

37

where LABSHR(i) is the share of wages in value added. The first of these equations tells us that to increase output by 1%, we need to increase labour inputs by more than 1%. The second equation tells us that if labour inputs increase, unit capital rentals must grow faster than wageswhich are indexed to the CPI. Therefore, increased output means higher capital rentals; since rentals are part of production costs, this implies that output costs must rise with output. The more capital-intensive is the sector, the greater the rise in output costs will be. The largest price rise is for FinanProprty (p1tot row of Table 8); this also has the highest share of capital in value-added (bottom of Table 9).
Price

Demand

price rise

Supply

output up Demand shifts right 10% Quantity

Figure 13. Effects of demand increase

Output price rises in one industry cause input costs to increase in customer industriesleading to more price rises. In this shortrun closure, we held real wages fixed. This means that a rise in the price of consumer goods increase the wage, which again increases all industry costs. These mechanisms cause all domestic prices to rise, even for sectors not selling to households. Supply schedules for all industries are shifted up by around 8%: the amount of the CPI increase.
Price

Inelastic Demand

Price

Supply curve shifts up

Elastic Demand

Supply curve shifts up

large price rise small output fall

small price rise large output fall

Quantity

Quantity

Figure 14. Effects of increased input costs

Non-traded industries, which face inelastic demand, are able to pass on cost increases to their customers without losing sales. Export-oriented industries, such as AgricMining, are not able to do so. Sectors facing significant import competition, such as Manufacture are also vulnerable. The effect of demand elasticity is shown in the two panes of Figure 14, representing two different sectors. The supply schedule of each sectors shifts up, representing the effect of increased input costs. In the left-hand pane, depicting a non-traded sector, inelastic demand allows the cost increase to be passed on without much output drop. The right-hand pane depicts a trade-exposed sector. There, elastic demand causes output to fall more, and price to rise less, than in the left-hand pane. The effect of increased output prices in an exporting sector, such as AgricMining or Manufacture, is for export sales to fall. For an import-competing sector, the effect is that imports expand at the expense of domestic sales. Both effects can be seen in Table 8. Also, Table 7 shows that aggregate exports fall while imports rise.

38

MINIMAL: A Simplified General Equilibrium Model


Table 7: Consumption increase: macro results Variable employ p1lab p3tot phi realwage w3tot x3tot w0gdpexp w0gdpinc p0gdpexp x0gdpexp x4tot p4tot p2tot x0cif_c delB Description Aggregate employment Economy-wide wage rate Consumer price index Exchange rate, (local $)/(foreign $) Wage rate deflated by CPI Nominal total household consumption Real household consumption Nominal GDP from income side Nominal GDP from expenditure side GDP price index, expenditure side Real GDP from expenditure side Export volume index Export price index Investment price index Import volume index, CIF prices Ordinary change, (Balance of trade)/GDP Table 8: Consumption increase: sectoral results % change 1.24 7.69 7.69 0.00 0.00 18.46 10.00 9.23 9.23 8.20 0.95 -19.71 4.49 5.71 12.51 -0.04

Variable
p1cap p1prim p1tot x1lab x1prim x1tot x(part) gret x0(imp) p(dom) p(imp)

Description
Rental price of capital Price, factor composite Cost of output Employment Use of factor composite Industry output Exports Gross rate of return Total imports Domestic user prices User price of imports

AgricMining -8.42 -0.73 2.09 -7.78 -3.95 -3.95 -9.81 -13.37 5.54 2.09 0.00

Manufacture 6.27 7.37 5.59 -0.66 -0.52 -0.52 -23.83 0.52 11.34 5.59 0.00

Utilities 18.78 13.66 10.76 5.02 2.23 2.23 -40.01 12.36 25.51 10.76 0.00

Construction TradeTranspt FinanProprty 7.83 7.71 6.65 0.06 0.06 0.06 -27.53 2.00 14.05 6.65 0.00 9.49 8.10 7.96 0.83 0.64 0.64 -31.8 3.57 20.72 7.96 0.00 18.47 14.40 12.71 4.89 1.76 1.76 -45.01 12.06 27.58 12.71 0.00

Services 15.25 8.40 7.92 3.45 3.11 3.11 -31.69 9.03 18.33 7.92 0.00

Table 9: Some Database Shares AgricMining Cost shares Dom goods Imp goods Labour Capital Total Sales shares Intermediate Investment Households Government Exports Total Import share Capital share Output 0.51 0.01 0.05 0.02 0.42 1.00 0.08 0.51 40513 0.53 0.08 0.30 0.00 0.08 1.00 0.27 0.22 110420 0.77 0.00 0.22 0.01 0.00 1.00 0.00 0.54 15275 0.07 0.84 0.00 0.09 0.00 1.00 0.00 0.13 38733 0.41 0.05 0.43 0.01 0.10 1.00 0.03 0.23 81013 0.49 0.03 0.45 0.02 0.01 1.00 0.02 0.63 69380 0.09 0.00 0.36 0.55 0.00 1.00 0.03 0.10 76593 0.39 0.11 0.31 0.11 0.09 1.00 0.41 0.04 0.27 0.28 1.00 0.60 0.14 0.20 0.06 1.00 0.47 0.02 0.24 0.28 1.00 0.49 0.07 0.39 0.06 1.00 0.39 0.04 0.44 0.13 1.00 0.32 0.02 0.25 0.42 1.00 0.31 0.06 0.57 0.06 1.00 0.43 0.07 0.34 0.16 1.00 Manufacture Utilities Construction TradeTranspt FinanProprty Services Average

MINIMAL: A Simplified General Equilibrium Model

39

Figure 14 only shows the bad effects of the consumption increase, which arise from the rise in prices. Sectors selling to households also experience the benefit of increased demand. That could be represented by a rightward shift of the demand curves (see Figure 13). The effect would be to increase prices and output. For most of the sectors, the positive effect on output of the demand increase outweighs the negative effect of increased input costs. Only the trade exposed sectors AgricMining and Manufacture actually shrink. Rising prices, and their effect on imports (up) and exports (down) explain why the stimulus to GDP is quite small. Consider the following equation: GDP = C + I + G + (X-M) Since consumption is about 60% of GDP we might have naively expected that a 10% increase in consumption would increase GDP by around 6%. Because of the fall in the balance of trade, the actual GDP increase is only about 1%. 7.1. A comparative-static interpretation of model results Like most CGE models, MINIMAL is designed for comparative-static simulations. Its equations and variables all refer implicitly to the economy at some future time period. This interpretation is illustrated by Figure 15, which graphs the values of some variable, say employment, against time. A is the level of employment in the base period (period 0) and B is the level which it would attain in T years time if some changelike the consumption increasedid not happen. With the consumption increase, employment would reach C, all other things being equal. The percent change in employment, 1.24%, is 100(C-B)/B, showing how employment in period T would be affected by the consumption increase alone.

Employment C

Change

A years 0 T
Figure 15. Comparative-static interpretation of results

The length of T is related to our choice of closure. With our shortrun closure we are assuming that: T is long enough for price changes to be transmitted throughout the economy, and for price-induced substitution to take place. T is not long enough for investment decisions to greatly affect the useful size of sectoral capital stocks. This might be because new buildings and equipment take time to produce and install. A typical estimate of T might be 2 years. Thus we should interpret our employment results as meaning: a 10% consumption increase might lead to employment in 2 years time being 1.24% higher than it would be (in 2 years time) if the consumption increase did not occur.

40

MINIMAL: A Simplified General Equilibrium Model

8. Towards more complicated CGE models


MINIMAL is a simplified model, created for teaching purposes. A real CGE model, like those used by governments for policy analysis, would be rather more complicated. There would certainly be many more sectors. In addition, we might see: more primary factors, such as land, natural resources or different types of labour. more final demand columns, corresponding to inventories, multiple households, or to a different investment technology for each industry. commodity taxes and margin flows which are specific to both commodity and user. multiproduction, allowing an industry to produce more than one commodity, or for several industries to produce the same commodity. a greater variety of technical change variables. consumption shares that depend on income as well as relative prices. more complicated production technology, with more types of substitution (eg, between capital and energy). more macro indices and other variables designed to summarize and present results. a financial sector, linking interest rates to money demand (as in a macro model). equations linking investment in each industry to the profitability of that industry. multiple regions, either of one country, or of the whole world. multiple time periods, with dynamic relations linking the periods. limited dynamics, such as equations linking capital growth to investment. As well, a forecasting interpretation of simulated changes as taking place through time. In terms of Figure 12, results from a base forecast might refer to the change from A to B. Another set of results, incorporating some policy change, would refer to the change from A to C. This list could easily be extended. Nevertheless, most real CGE models bear a very strong resemblance to MINIMAL. A careful reader of this document would easily understand the GEMPACK code for the larger models. The mechanisms that govern simulation results in MINIMAL are overwhelmingly the same as in the larger models, so that the skill of explaining results may also be transferred.

S-ar putea să vă placă și