Summary and analytical notes on the paper:
Lucas, Robert E. (1990) "Why Doesn't Capital Flow from Rich to Poor Countries?" American Economic Review: 92-96.
Assume two countries with same aggregate production function, where X is capital stock and L is labor force:
Y=AXβL1−βin intensive or per-capita form: y=Axβ
where y=YL and x=XL
Marginal Product of Capital (MPK) is:
r=Aβxβ−1Write MPK as a function of income per capita:
r=βA1βyβ−1βor
r=Aβ(yA)β−1βSteps:
y=Axβso x=(yA)1β
substitute this into r=Aβxβ−1
rINrUS=[yUSyIN]1−ββ=58.1
times higher in India! Implausibly large.
What differences in capital per worker account for this large a gap?
As x=(yA)1β and yUSyIN=15, US workers would have to have this
xUSxIN=(yUSyIN)1β=871.4
multiple of the amount of capital per worker compared to India:
So if in India the capital-labor ratio is 1 in the USA it must be 871.4 !
import numpy as np
import matplotlib.pylab as plt
from scipy.optimize import fsolve, brentq, minimize
A = 1
rho = 0.05
beta = 0.4
y_US = 15
y_IN = 1
def f(x):
return x**beta
def mpx(x):
return beta*x**(beta-1)
def r(y, A):
return beta * (A**(1-beta)) * y**((beta-1)/beta)
def kap(y, A):
return (y/A)**(1/beta)
def xoptimum(rho, beta):
xC = (rho/beta)**(1/(beta-1))
xM = (rho/beta**2)**(1/(beta-1))
return xC, xM
def lucasplot():
y = np.linspace(0.1,20,100)
plt.figure(figsize=(12, 6))
plt.subplot(2,1,1)
plt.plot(y,kap(y, A))
plt.ylabel("$k$ -- capital per worker")
plt.ylim(0,kap(y_US +1, A))
plt.axvline(y_IN,color='k',ls='dashed')
plt.axvline(y_US,color='k',ls='dashed')
plt.title("capital per worker")
plt.subplot(2,1,2)
plt.plot(y,r(y,A))
plt.xlabel("$y$ -- output per worker")
plt.ylabel("$4$ -- marginal product capital")
plt.title("return to capital")
plt.ylim(0,r(y_IN,A))
plt.axvline(y_IN,color='k',ls='dashed')
plt.axvline(y_US,color='k',ls='dashed')
plt.annotate('India', xy=(y_IN, r(y_IN,A)), xytext=(y_IN +2, r(y_IN,A)*0.75),
arrowprops=dict(facecolor='black', shrink=0.05),)
plt.annotate('USA', xy=(y_US, r(y_US,A)), xytext=(y_US +2, r(y_US,A)+0.1),
arrowprops=dict(facecolor='black', shrink=0.05),);
print('Return to capital in India relative to USA : {:5.1f}'.format(r(y_IN, A)/r(y_US, A)))
Return to capital in India relative to USA : 58.1
The ratio of capital stock per worker in the USA compared to India that is implied by this difference in incomes per capita is even more unbelievable:
print('Capital per worker in USA relative to India : {:5.1f}'.format(kap(y_US, A)/kap(y_IN, A)))
Capital per worker in USA relative to India : 871.4
lucasplot()
Human capital per worker differs substantially between USA and India. Let's adapt the framework to take this into account.
Redefine y and x to be output and capital per effective worker (replace every L by E⋅L).
y=AXβ(E⋅L)(1−β)E⋅Lor y=Axβ⋅E−β
Lucas' cites evidence from Anne Krueger that leads him to suggest a value of E=5, which is to say that for the same technology and capital a US worker produces five times as much as his/her Indian counterpart.
To see this first note that if we take the ratio of US to Indian income per effective worker we get:
yUSyIN=YUSE⋅LUS⋅LINYIN=155=3With this we can easily calculate the implied difference in marginal products of capital:
r(yIN)r(yUS)=(yUSyIN)1−ββSo this lowers the factor of proportionality from 58 to 5. As Lucas puts it: "This is a substantial revision but it leaves the original paradox very much alive: a factor of five differnce in rates of return is tstill large enough to lead one to expect capital flows much larger than anything we observe (p. 93)."
We've assumed thus far that the total factor productivity parameter A is the same across countries. This is unlikely. An easy way to resolve the paradox is to simply solve for the level of A_{US}/A_{IN} that makes he gap dissappear.
In this section Luca isn't quite doing that but he is in effect letting the values of A differ between the two countries. He motivates this with a stripped down version of his own Lucas (1988) paper on external economies, a model where human capital plays a role and where there is a positive external effect in human-capital accumulation in that he assumes that the marginal product of one's human capital is augmented by the average level of human capital in the economy. In this paper he doesn't work out this model in full but uses the story to rewrite the production function as:
y=Ahγxβand he then gives us some 'guestimates' as to the differences in human capital per worker in each country.
As it turns out this is in effect equivalent to sticking to the original model and just assuming that AUSAIN=5
A country with a higher level of A will have everywhere higher return on capital. After a little math the adjusted ratio now becomes
r(yIN)r(yUS)=(yUSyIN)1−ββThis would seem to almost resolve the paradox but Lucas in fact dismisses it as not entirely realistic. It assumes for example that knowledge spillovers across borders are zero.
I haven't written this up yet...
This is the least often mentioned but possibly the most interesting of Lucas' hypotheses. The hypothesis is that local elites (or 'an imperial power') are able to collude to control the entry of capital into India to drive up captial rents and drive down real wages in such a way that increase firm profits. Implictly the story is that local elites control the organization of production and hence firm profits.
While at first it might seem far-fetched to believe a story like this in modern times (less far-fetched in the time of the East India Company) there is plenty of evidence that capital inflows into India and other developing countries were historicallycontrolled in part to protect the rents of local elites. Rajan and Zingales' (2013) book Saving Capitalism from the Capitalists is full of examples of local elites lobbying government bureaucrats to establish market power.
The elite is assumed to have access to international capital markets where they can borrow capital at the rate ρ
If the elite ran the country as a monopoly they would choose the capital-labor ratio (by varying how much capital enters the country) to maximize profits per capita:
f(x)−[f(x)−xf′(x)]−rxHere (by Euler's Theorem) f(x)−xf′(x) is the wage.
Implicit in Lucas' formulation is the idea that there is a large monopolist and a 'fringe' of smaller competitive firms, all producing the common output. The competitive fringe hires factors until the marginal value product equals the market factor price. By restricting capital into the economy the monopolists drives up the domestic rental price of capital. With less capital to work with the competitive fringe hires less labor and this drives down the mearket equilibrium real wage. Monopolist profits rise due to this monopsony power effect.
x = np.linspace(0.1,40,100)
def profit(x, rho):
return f(x) -(f(x) -mpx(x)*x) - rho*x
def monopolyplot(rho):
prf = profit(x, rho)
xC, xM = xoptimum(rho, beta)
fig, ax = plt.subplots(1, 1, figsize=(12, 6))
plt.plot(x,prf)
plt.ylim(0,max(prf)*1.1)
plt.title('Monopoly Profits')
plt.axvline(xC,ls='dashed')
plt.axvline(xM,ls='dashed')
plt.axhline(0,ls='dashed')
plt.xlabel("$x$ -- capital per worker")
plt.annotate('Competitive', xy=(xC, 0), xytext=(xC+3, 0.1),
arrowprops=dict(facecolor='black', shrink=0.05),)
plt.annotate('Market Power', xy=(xM, profit(xM,rho)), xytext=(xM+3, profit(xM,rho)-0.1),
arrowprops=dict(facecolor='black', shrink=0.05),)
plt.show()
monopolyplot(rho=0.05)
In an open competitive economy all firm profits would be zero and the capital-labor ratio x would be simply set from
f′(x)=ρwhere ρ is the world market price of capital. This implies we can find the capital labor ratio as a function of ρ:
Suppose we normalize the world rate or return to capital to ρ=0.05. Then equlibrium capital per worker in the competitive economy would be:
rho, beta = 0.05, 0.4
xC, _ = xoptimum(rho, beta)
print('%.1f' % xC)
32.0
The monopolist on the other hand sets x to:
f′(x)=ρ−xf″(x)Note that f″(x) can be written:
f″(x)=(β−1)f′(x)xwhich allows us to simplify the monopoly FOC to:
f′(x)=ρβGiven our assumed value of beta, this means a monopolist might maintain the rate of return on capital 1/β times higher than the international market rate ρ, and resists capital inflows that might push this rate down.
Solving for x in this monopolized market gives:
x=(ρβ2)1β−1_ , xM = xoptimum(rho, beta)
print('Capital per worker in the market-power distorted equilibrium: {:2.1f}'.format(xM))
print(' {:.0%} of the competitive level'.format(xM/xC))
Capital per worker in the market-power distorted equilibrium: 6.9 22% of the competitive level
Indian income per capita will be only
print("{:5.0f} percent".format(100*f(xM)/f(xC)))
54 percent
as high as in a competitive market without barriers to capital inflows.
This is an inefficient outcome but the elites who capture the profits/rents do pretty well. They earn
print('profits = {:5.2f} or {:.0%} of total output'.format(profit(xM, rho), profit(xM,rho)/f(xM)))
profits = 0.52 or 24% of total output
Lucas does not cite their work but models of this sort were explored by trade economists in the 1980s (e.g. Feenstra (1980).
In a model described later, Conning (2006) explores similar factor market power distortions in a model with heterogenous agents to make predictions about the size distribution of firms within each sector.
This was an easy model to solve analytically, but let's solve it numerically to illustrate the use of the root solving (fsolve function from scipy optimize library) and minimization techniques (brentq from the same library). See the code section below first.
Let's setup first order condition functions to find the x that sets them to zero.
For the competitive case: f′(x)−ρ For the monopoly case: f′(x)−ρ−xf″(x)
def cfoc(x):
return mpx(x) - rho
def mfoc(x):
return mpx(x) - rho + (beta-1)*mpx(x)
and solve for the root:
xC = fsolve(cfoc, 20)[0]
xC
32.0
Same as the analytical solution of course.
Now let's find the x that maximizes monopoly profits (we need to provide a guess value):
xM = fsolve(mfoc, 5)[0]
xM
6.948909098482633
We could have instead directly maximized profits (minimized negative profits) with an optimization routine:
def negprofit(x):
return - profit(x, rho)
res = minimize(negprofit, 5, method='Nelder-Mead')
res.x[0]
6.94891357421875