Computational Economics
00 / Prerequisite · AB08

Market shares and markups

A firm’s size changes the demand elasticity it faces.

This guide draws on the nested-demand framework of Atkeson and Burstein (2008), using simplified teaching examples.

Follow the mechanism
Demand has two layers

Substitute within.
Substitute across.

Final demand

Across sectors · θ

Sector 1
ABC
Sector 2
DEF

Within each sector · η

θ

Across sectors

How easily spending leaves a sector.

η

Within a sector

How easily buyers switch among its firms.

η > θ > 1. Foundation: Edmond, pp. 4–10 ↗

Choose the competition assumption

Share changes pricing power.

Cournot · choose quantities
εᵢ = [sᵢ/θ + (1 − sᵢ)/η]−1
Share-weighted harmonic mean.
Bertrand · choose prices
εᵢ = sᵢθ + (1 − sᵢ)η
Share-weighted arithmetic mean.

sᵢ is the firm’s revenue share within its sector. Higher sᵢ lowers εᵢ and raises μᵢ = εᵢ/(εᵢ − 1). Conduct comparison: Trottner, pp. 35–37 ↗

Tiny firm: ε → η. Monopolist: ε = θ.

One small sector

Give one firm an advantage.

Illustrative constants: η = 5.
Fixed firms, constant returns.

FirmRevenue shareMarkup μ

Unit factor cost: mcᵢ = 1/zᵢ. Price: pᵢ = μᵢ/zᵢ.

Inspect costs, elasticities and prices
Firmzεp

The calculation is a loop

Prices and shares must agree.

Sharess
Elasticitiesε
Markupsμ
Pricesp
Implied sharess′ ↺

s′ᵢ = pᵢ1−η / Σₖ pₖ1−η. Repeat until s′ agrees with s.

Where this fits

One block of the full economy.

Scope & notation
  • This sector example has no entry or aggregate labor clearing.
  • The full course adds nonconstant returns and two periods.
  • Edmond’s within-sector γ is our η; our γ denotes returns to scale.
  • Trottner’s within-sector ρ is our η; the course’s ρ governs productivity persistence.
  • Its constants are for the example only; the course’s model uses its own values.
solve_sector([1.6, 1.0, 0.8],
             theta=1.5, eta=5.0,
             conduct="cournot")

Try it yourself

Solve the default sector on your computer.

Download the Python example and run it in the folder where you saved it. It needs Python 3.10 or later with NumPy, and takes under a second. In the course repository, run python lessons/00_prerequisites/ab08.py from the root instead.

python ab08.py

It solves the page’s default sector, where A has an advantage and θ = 1.5, first under Cournot and then under Bertrand conduct, and prints each firm’s share, elasticity, markup and price. Add --self-test to run the checks first.

Check your result

Under Cournot, firm 1 (A on this page) has share 0.595718, elasticity 2.092042, markup 1.915716 and price 1.197322; the page shows 59.57%, 2.092, 1.916 and 1.197. Firms 2 and 3 have shares of 25.98% and 14.44%. Choose Bertrand on the page to compare the second table: firm 1’s share is 66.87% and its markup 1.603. With --self-test, the first line reads “AB08 checks passed: monopoly, symmetry, both conduct rules, residuals.”

Code on GitHub lessons/00_prerequisites/ab08.py ↗