General Equilibrium Modeling with MPSGE:
Some Examples for Self-Study

Models M3: Increasing Returns and Imperfect Competition

James Markusen and Thomas F. Rutherford

Department of Economics
University of Colorado

rutherford@colorado.edu

1995

Return to the MARKUSEN index and download page.

Return to the MPSGE home page

$TITLE Model M3-1S: Monopoly with IRTS - calibrated to zero profits


$ONTEXT

James R. Makusen
Thomas F. Rutherford

Department of Economics
University of Colorado

September, 1996 (revised)


As in model M2-4S, we have a model here in which there are increasing
returns to scale and imperfect competition.  As in M2-4S, the
profit-maximizing markup on marginal cost is based on the Marshallian
approximation to the price elasticity of demand:

                e  = SIGMA - (SIGMA -1) SHAREX

In the Marshallian model, the monopoly markup on marginal cost is
simply 1/e.  Here, we have a variety of other effects such as
monopsony power in factor markets; but for simplicity we will assume
that the monopolist ignores these linkages in setting the markup.

In this version, the monopolist must incur fixed costs of L = 10
and K = 10.  These are modelled are negative endowments for an
"monopolist" consumer named HTFORD.

The benchmark equilibrium has a 20% markup on sales of good X by the
monopolist.  This is consistent with a 50% value share for X and an
elasticity of substitution equal to 9.  

The social accounts are consistent with zero profit at the benchmark.

                  X       Y      WC      WM
        PX      100             -100
        PY              100     -100
        PL      -30     -60             -10
        PK      -50     -40             -10
        PROFIT  -20                      20
        PW_C                     200    

In a counter-factual equilibrium, there may be positive or negative
profits, depending on changes markup-revenue and fixed costs.  There
is a logical problem with the equilibrium under negative profits --
ultimately someone must pay the fixed cost or the monopolist must go
out of business.  In our model formulation, negative profits imply
negative income for the monopolist.  Thus, MPSGE cannot compute a
solution in which profits are negative.  (Demand functions are
undefined for negative income.)  In order to deal with this
situation, we introduce a transfer variable, BAILOUT, which transfers
labor income from consumers to the monopolist if markups revenues do
not cover fixed costs.  Thus, if we compute a solution in which
BAILOUT is positive, profits are negative.  

$OFFTEXT


SCALAR  sigma  Elasticity of substitution in demand     / 9 /,
        fcost  Ratio of fixed costs to benchmark        / 1 /;

$ONTEXT

$MODEL:M3_1S

$SECTORS:
        X       ! Activity level -- monopolist sector X
        Y       ! Activity level -- competitive sector Y
        WC      ! Welfare index for the consumer
        WM      ! Welfare index for the monopolist

$COMMODITIES:
        PW_C    ! Welfare price index for the consumer
        PW_M    ! Welfare price index for the monopolist
        PX      ! Price index for X (gross of markup)
        PY      ! Price index for Y (gross of markup)
        PL      ! Price index for labor
        PK      ! Price index for capital

$CONSUMERS:
        CONSUMER        ! All consumers
        HTFORD          ! Monopolist

$AUXILIARY:
        SHAREX  ! Value share of X in total consumption
        MARKUP  ! Markup based on Marshallian demand
        BAILOUT ! Lump-sum transfer which assures non-negative income
 
$PROD:X  s:1
        O:PX    Q: 80    A:HTFORD  N:MARKUP
        I:PL    Q: 30
        I:PK    Q: 50

$PROD:Y  s:1
        O:PY    Q:100
        I:PL    Q: 60
        I:PK    Q: 40

$PROD:WC        s:sigma

        O:PW_C  Q:200
        I:PX    Q: 80   P:1.25
        I:PY    Q:100

$PROD:WM        s:sigma
        O:PW_M  Q:20
        I:PX    Q: 8  P:1.25
        I:PY    Q:10 

$DEMAND:CONSUMER
        D:PW_C  Q:200
        E:PL    Q:100
        E:PK    Q:100
        E:PL    Q:-1    R:BAILOUT

$DEMAND:HTFORD
        D:PW_M 
        E:PL     Q:(-10*FCOST)
        E:PK     Q:(-10*FCOST)
        E:PL     Q:1    R:BAILOUT

$CONSTRAINT:BAILOUT
        PL*BAILOUT + 80*MARKUP*PX*X =G= 10*FCOST*(PL+PK);

$CONSTRAINT:SHAREX
        SHAREX * (80 * PX * X + 100 * PY * Y) =G= 80 * PX * X;

$CONSTRAINT:MARKUP
        MARKUP * SIGMA  * (1-SHAREX) =G= 1 - MARKUP * SHAREX;

$OFFTEXT
$SYSINCLUDE mpsgeset M3_1S

*       Benchmark replication:

PX.L      = 1.25; 
SHAREX.L  = 0.5; 
MARKUP.L  = 0.20; 
BAILOUT.L = 0;
WM.L      = 0;
$INCLUDE M3_1S.GEN
SOLVE M3_1S USING MCP;

$ontext

We now do a computational test to determine approximation error 
associated with the markup equation based on the Marshallian demand model.

In the benchmark the markup rate is 20%.  Below, we compute the equilibrium
outcome for markup rates varying from 15% to 30%.

We do this by fixed the value of auxiliary variable MARKUP.  When a 
variable is fixed, the associated constraint is ignored, and the variable
is treated like a constant.

The solutions from 16 model runs are collected and output to the listing
file in parameter WELAFARE.  The returned values are:

----    677 PARAMETER WELFARE       Consumer welfare indices for alternative 
                                    markup rates

      CONSUMER      HTFORD

15       0.018
16       0.015
17       0.012
18       0.008
19       0.004
20 4.44089E-16
21      -0.006       0.016
22      -0.012       0.027
23      -0.017       0.033
24      -0.023       0.035
25      -0.028       0.033
26      -0.033       0.027
27      -0.038       0.016
28      -0.042       0.001
29      -0.048
30      -0.055

We can surmise that the 20% markup based on the Marshallian demand
model is about 4% lower than the true (general equilibrium) optimal
markup.  Despite these approximation errors, most model-builders
continue to use the Marshallian approximation because there is no
closed-form expression for the true general equilibrium optimal
markup.

$offtext

SET MK /15*30/

PARAMETER  WELFARE  Consumer welfare indices for alternative markup rates;

LOOP(MK,
        MARKUP.FX = 0.14 + 0.01*ORD(MK);
$INCLUDE M3_1S.GEN
        SOLVE M3_1S USING MCP;
        WELFARE(MK,"CONSUMER") = WC.L-1;
        WELFARE(MK,"HTFORD")   = WM.L;
);
DISPLAY WELFARE;

$TITLE Model M3-2S: Oligopoly with free entry - calibrated to zero profits


$ONTEXT

James R. Makusen
Thomas F. Rutherford

Department of Economics
University of Colorado

September, 1996 (revised)


This model is based on the same demand structure as models M2-4S and
M3-1S.  The Marshallian approximation to the elasticity of demand in
these models is given by: 

                e  = sigma - (sigma -1) sharex

where sigma is the elasticity of substitution in demand and sharex is
the value share of good x in final demand.

In this version, we assume there are four firms initially producing
undifferentiate goods in sector x.  The Cournot markup m is applied
on a gross basis: 

                price (1 - m) = marginal cost

For this model, the optimal markup based on the Marshallian price
elasticity of demand is 

                m = (1/n) * (1/e)

In the benchmark social accounts, we have a markup over marginal cost
equal to 0.2 and n=4, hence the Marshallian price elasticity at the
benchmark must be 1.25.  Working backward from the formula for e, the
elasticity of substitution in x, sigma, must be 1.5.

Fixed costs are assumed to be L = 2.5 and K = 2.5 per firm.  

We model increasing returns with free entry by a "trick".  Markup
revenues are determined using the formulae shown above.  These
markups generate determine income for entrepreneurs in sector X.  In
equilibrium, there are no profits in sector X, so all markup revenue
is ultimately allocated to fixed cost.  We do this in the MPSGE model
by assigning markup revenue to a consumer who in-turn allocates all
income to a commodity with the composition of fixed costs.

In a counter-factual equilibrium, changes in markup revenue lead to
changes in "demand for fixed cost".  We therefore may interpret
changes in the activity level of the firm which produces fixed costs
as changes in the number of firms.

The benchmark social accounting matrix is here organized along the
lines of the MPSGE model.  Sector X produces "marginal cost" for the
production of good X.  Sector Y produces average and marginal cost
for the CRTS good Y.  Sector N produces fixed costs for good X, and
the activity level of this sector corresponds to the number of firms
in the industry.

          X       Y       N        W    CONSUM  ENTR
PX      100                     -100
PY              100             -100
PL      -30     -60     -10               100
PK      -50     -40     -10               100
MKREV   -20                                      20
PW                               200     -200
PF                       20                     -20

$OFFTEXT

SCALAR  sigma  Elasticity of substitution in demand     / 1.5 /,
        ENDOW  Size index for the economy               / 1 /;


$ONTEXT

$MODEL:M3_2

$SECTORS:
        X       ! Activity level -- sector X output
        Y       ! Activity level -- competitive sector Y
        W       ! Welfare index for the representative consumer
        N       ! Activity level -- sector X fixed costs = number of firms

$COMMODITIES:
        PW      ! Price index for representative agent utility
        PX      ! Price of good X (gross of markup)
        PY      ! Price of good Y
        PF      ! Unit price of inputs to fixed cost
        PL      ! Price index for labor
        PK      ! Price index for capital

$CONSUMERS:
        CONS    ! Representative agent
        ENTRE   ! Entrepreneur (converts markup revenue to fixed cost)

$AUXILIARY:
        SHAREX  ! Value share of good X in expenditure
        MARKUP  ! Optimal markup based on Marshallian demand elasticity
 
$PROD:X  s:1
        O:PX    Q: 80    A:ENTRE  N:MARKUP
        I:PL    Q: 30
        I:PK    Q: 50

$PROD:Y  s:1
        O:PY    Q:100
        I:PL    Q: 60
        I:PK    Q: 40

$PROD:N  s:1
        O:PF    Q: 5
        I:PL    Q: 2.5
        I:PK    Q: 2.5

$PROD:W s:1.5
        O:PW    Q:200
        I:PX    Q: 80   P:1.25
        I:PY    Q:100

$DEMAND:CONS
        D:PW    Q:200
        E:PL    Q:(ENDOW*100)
        E:PK    Q:(ENDOW*100)

$DEMAND:ENTRE
        D:PF    Q: 20

$CONSTRAINT:SHAREX
        SHAREX * (80*PX*X + 100*PY*Y) =G= 80*PX*X;

$CONSTRAINT:MARKUP
        MARKUP * SIGMA * N * (1 - SHAREX) =G= 1 - MARKUP * SHAREX * N;


$OFFTEXT
$SYSINCLUDE mpsgeset M3_2

*       Benchmark replication:

N.L = 4;  
PX.L = 1.25;  
SHAREX.L=0.5;
MARKUP.L=0.20;

$INCLUDE M3_2.GEN
SOLVE M3_2 USING MCP;

*       Counterfactual double the size of economy.  

ENDOW = 2;
$INCLUDE M3_2.GEN
SOLVE M3_2 USING MCP;

$TITLE Model M3-3S: External economies of scale


$ONTEXT

James R. Makusen
Thomas F. Rutherford

Department of Economics
University of Colorado

September, 1996 (revised)


Formally, MPSGE requires constant returns to scale in all activities.
Suppose that we believe that there are external economies in X but
that these are external to the firm.  Suppose that we believe that
the elasticity of scale is 1.25.  

We begin by normalizing industry output (the activity level
of X) to 1.  

Then create a rationing constraint that adjusts the consumers 
endowment of CX (equal to 100 initially) in proportion to 
the difference between industry output (activity level of X)
raised to the power 1.25 and its inital value of 1.

We also specify a subsidy, paid by consumers to producers of X
such that the value of the subsidy paid by consumers will be 
just equal to the value of their expanded consumption of X.  

If the new activity level for X is less than 1, however, then the
consumers endowment of CX must be contracted rather than expanded and
producers must pay a tax equal to the value of the contracted
endowment.  This is handled by adjusting the bounds on the auxiliary
variables which specify the endowment adjustment and output subsidy.

The model is based on the benchmark social accounts for model M1-1:
                  Production Sectors          Consumers
   Markets   |    X       Y        W    |       CONS
   ------------------------------------------------------
        PX   |  100             -100    |
        PY   |          100     -100    |
        PW   |                   200    |       -200
        PL   |  -40     -60             |        100
        PK   |  -60     -40             |        100
   ------------------------------------------------------

$OFFTEXT


SCALAR  ENDOW  Size index for the economy               / 1 /;

$ONTEXT

$MODEL:M3_3S

$SECTORS:
        X       ! Activity level for sector X
        Y       ! Activity level for sector Y
        W       ! Activity level for sector W (Hicksian welfare index)

$COMMODITIES:
        PX      ! Price index for commodity X
        PY      ! Price index for commodity Y
        PL      ! Price index for primary factor L
        PK      ! Price index for primary factor K
        PW      ! Price index for welfare (expenditure function)

$CONSUMERS:
        CONS    ! Income level for consumer CONS

$AUXILIARY:
        XQADJ   ! Quantity adjustment   (positive when X>1)
        XPADJ   ! X output subsidy rate (positive when X>1)

$PROD: X s:1
        O:PX    Q:100  A:CONS  N:XPADJ M:-1
        I:PL    Q: 40
        I:PK    Q: 60

$PROD: Y s:1
        O:PY    Q:100
        I:PL    Q: 60
        I:PK    Q: 40

$PROD: W s:1
        O: PW   Q:200
        I: PX   Q:100
        I: PY   Q:100

$DEMAND:CONS
        D:PW    Q:200
        E:PL    Q:(ENDOW*100)
        E:PK    Q:(ENDOW*100)
        E:PX    Q:100   R:XQADJ

$CONSTRAINT:XQADJ
        XQADJ =E= X**1.25 - X;

$CONSTRAINT:XPADJ
        XPADJ * X =E= XQADJ;


$OFFTEXT
$SYSINCLUDE mpsgeset M3_3S

*       Adjust bounds so that the auxiliary variables can take on 
*       negative values:

XQADJ.LO = -INF;
XPADJ.LO = -INF;

*       Benchmark replication

$INCLUDE M3_3S.GEN
SOLVE M3_3S USING MCP;

*       Counterfactual: expand the size of the economy

ENDOW = 2;
$INCLUDE M3_3S.GEN
SOLVE M3_3S USING MCP;

*       Counterfactual: contract the size of the economy

ENDOW = 0.8;
$INCLUDE M3_3S.GEN
SOLVE M3_3S USING MCP;

$TITLE Model M3-2S: Monopolistic competition with free entry


$ONTEXT

James R. Makusen
Thomas F. Rutherford

Department of Economics
University of Colorado

September, 1996 (revised)


This example shows how the Krugman-type monopolistic-competition
model using the Dixit-Stiglitz type preferences can be modelled using
the tricks introduced in M3-2 and M3-3. 

With symmetry in all goods, utility from differentiated goods can
be written as 

                U = N**(1/beta) * X 

where N is the number of * products and X is the
output level of a representative product.  With the individual X's
constant in the Krugman model, the expansion of output through
adding new products is equivalent to modelling U as a function that
is homogeneous of degree 1/beta.  

The file below models the output of the X's with a constant markup
equal to (1 - beta). (beta = 0.8 in this example).

Markup revenues are converted to demand for fixed costs using an
"entrepreneur", as in M3-2.  

Free entry determines the number of products N, the activity level
for fixed costs.  The outputs of the X's are then "scaled up" as in
the external economies model, which is, in this case, reflecting the
value of product diversity.  

We begin with the same SAM as in M1-1S, then add two sectors (XC and N),
two goods (CX, PF) and one consumer (ENTR).  In the benchmark, consumer
ENTR collects markup revenue which is equal to base year fixed costs:

                        Production Sectors           Consumers
   Markets   |   XC     X        N        Y        W    |  CONS   ENTR
   ----------------------------------------------------------------------
        PX   |        100                       -100    |
        CX   !   80   -80                               |
        PY   |                          100     -100    |
        PF   |                  20                      |          -20
        PW   |                                   200    |  -200
        PL   |  -35             -5      -60             |   100
        PK   |  -45            -15      -40             |   100
   ----------------------------------------------------------------------
        MK   |        -20                                           20


$OFFTEXT

SCALAR  ENDOW  Size index for the economy               / 1 /;

$ONTEXT

$MODEL:M3_4S

$SECTORS:
        X       ! Activity level for sector X
        Y       ! Activity level for sector Y
        W       ! Activity level for sector W (Hicksian welfare index)
        N       ! Activity level -- sector X fixed costs = number of firms
        XC      ! Activity level -- marginal cost of X

$COMMODITIES:
        PX      ! Price index for commodity X (gross of markup)
        CX      ! Marginal cost index for commodity X (net markup)
        PY      ! Price index for commodity Y
        PL      ! Price index for primary factor L
        PF      ! Unit price of inputs to fixed cost
        PK      ! Price index for primary factor K
        PW      ! Price index for welfare (expenditure function)

$CONSUMERS:
        CONS    ! Income level for consumer CONS
        ENTRE   ! Entrepreneur (converts markup revenue to fixed cost)


$AUXILIARY:
        XQADJ   ! Quantity adjustment   (positive when X>1)
        XPADJ   ! X output subsidy rate (positive when X>1)

$PROD:X s:1
        O:PX    Q: 80   P:1.25   A:CONS  N:XPADJ  M:-1
        I:CX    Q: 80   P:1.25

$PROD:Y s:1
        O:PY    Q:100
        I:PL    Q: 60
        I:PK    Q: 40

$PROD:XC s:1
        O:CX    Q: 80   A:ENTRE   T:0.20
        I:PL    Q: 35
        I:PK    Q: 45

$PROD:N s:1
        O:PF    Q:20
        I:PK    Q:15
        I:PL    Q: 5

$PROD:W s:1.0
        O:PW    Q:200
        I:PX    Q: 80   P:1.25
        I:PY    Q:100

$DEMAND:CONS
        D:PW    Q:200
        E:PL    Q:(100*ENDOW)
        E:PK    Q:(100*ENDOW)
        E:PX    Q:80    R:XQADJ

$DEMAND: ENTRE
        D:PF    Q:20

$CONSTRAINT:XQADJ
        XQADJ =E= X**1.25 - X;

$CONSTRAINT:XPADJ
        XPADJ * X =E= XQADJ;

$OFFTEXT
$SYSINCLUDE mpsgeset M3_4S

*       Adjust bounds so that the auxiliary variables can take on 
*       negative values:

XQADJ.LO = -INF;
XPADJ.LO = -INF;

*       Benchmark replication:

PX.L = 1.25; 
CX.L = 1.25;

$INCLUDE M3_4S.GEN
SOLVE M3_4S USING MCP;

*       Counterfactual: expand the size of the economy

ENDOW = 2;
$INCLUDE M3_4S.GEN
SOLVE M3_4S USING MCP;