Exercise - Growth Accounting

In this exercise, you will carry out a simple growth accounting exercise to calculate total factor productivity (TFP) for a number of countries, using data from the Penn World Table. (Who said there was no macroeconomics in core ERM?) Before you begin, read this extract from Aghion & Howitt (2009).

  1. Summarize the approach to calculating TFP described in Aghion & Howitt (2009).
  2. Install and load the pwt10 R package and read the help file ?pwt10.0. Provide a brief summary of this dataset, including an explanation of the variables country, year, isocode, rgdpna, rkna, and emp.
  3. Extract the variables listed in the preceding part from pwt10.0 for the countries in Table 5.1 of Aghion & Howitt. Include all observations from 1959 onwards. Using this information, calculate output per worker and capital per worker. Append them to your dataset.
  4. Consult ?scale_y_continuous() and then make a line plot of output per worker over time on the natural log scale for each country in your dataset.
  5. For a series that doesn’t grow too fast, the difference of natural logs of successive values provides a good approximation of the geometric growth rate. (This gives a percentage expressed as a decimal.) Consult ?lag() from dplyr. Using what you learn, compute the log growth rate of capital per worker and output per worker and append them to your dataset.
  6. Use Aghion and Howitt’s assumed value for the capital share \(\alpha\) to compute the “Solow residual” in each country and year and append it to your dataset.
  7. Based on your calculations from above, attempt to replicate the first two columns of Table 5.1 from Aghion and Howitt. Make sure to use the same time periods as they do. Your results will probably differ somewhat from Aghion and Howitt’s, but they should generally be in the ballpark.
  8. Repeat the preceding, but use data from after 2000. Broadly speaking, how do the TFP figures compare over time?

Solutions

Part 1

Consider a standard Cobb-Douglas production function with constant returns to scale \[ Y = B K^\alpha L^{1 - \alpha} \] where \(Y\) is output, \(L\) is labor, \(K\) is capital, and \(B\) is technology. Defining labor productivity as \(y \equiv Y/L\) and capital per worker as \(k \equiv K/L\), we can re-write the production function as \[ \begin{align*} y &\equiv Y/L = B \left(\frac{K}{L}\right)^\alpha \left(\frac{L}{L} \right)^{1 - \alpha}\\ &= B k^\alpha. \end{align*} \] This shows that labor productivity is determined both by technology \(B\) and capital per worker. Workers are more productive (more output per unit labor) when they have access to more capital and when they have access to better technology. Although labor productivity is a commonly-used definition of “productivity,” it combines two conceptually distinct channels: capital accumulation and technology. For this reason, the preferred definition of “productivity” in economics is total factor productivity (TFP) which is defined as \(B\) in the expression \(y = B k^\alpha\). TFP measures how effectively the economy combines both labor and capital to produce output.

Following the usual convention in macroeconomics let a “dot” denote a time derivative, e.g. \(\dot{y} \equiv dy/dt\) so that the growth rate of output per worker is given by
\[ \begin{align*} G &\equiv \dot{y}/y = \frac{1}{B k^\alpha}\cdot \frac{d}{dt} \left[ B(t) k(t)^\alpha\right] = \frac{\dot{B}k^\alpha + \alpha Bk^{\alpha - 1} \dot{k}}{B k^\alpha}\\ &= \dot{B}/B + \alpha \dot{k}/k. \end{align*} \] This equation decomposes growth in output per working into two components:

  1. TFP growth component: \(\dot{B}/B\)
  2. “Capital deepening” component: \(\alpha \dot{k}/k\).

The first component represents improvements in technology; the second represents capital accumulation.

Suppose we wanted to measure TFP growth. How could we do this? A common approach is the “residual” method. Re-arranging the expression from above, the growth rate of TFP is given by \[ \dot{B}/B = G - \alpha \dot{k}/k. \] From national accounts data, like those in the Penn World Tables, we can observe time series of \(Y\), \(K\) and \(L\). This allows us to calculate \(G\) and \(\dot{k}/k\). If we knew \(\alpha\) we would be done. Unfortunately we do not know this quantity. So what can we do instead?

Suppose we were willing to assume that capital markets are perfectly competitive. Then capital should be paid its marginal product. Let \(R_k\) be the rental price of capital. Then, under perfect competition, \[ \begin{align*} R_k = \frac{\partial Y}{\partial K} &= \frac{\partial}{\partial K} (BK^\alpha L^{1 - \alpha})= \alpha B K^{\alpha - 1} L^{1 - \alpha}\\ &=\alpha \frac{B K^\alpha L^{1 - \alpha}}{K} = \alpha Y/K. \end{align*} \] Re-arranging, we see that \(\alpha = K R_k / Y\). Thus, if we assume perfect competition we can calculate \(\alpha\) from \(K\), \(Y\), and the rental rate of capital \(R_k\). Once we know \(\alpha\) we can calculate \(\dot{B}/B\) as explained above. When TFP growth is calculated in this way, it is called the “Solow Residual.”

Parts 2-8

library(tidyverse)
library(pwt10)

countries <- c('Australia', 'Austria', 'Belgium', 'Canada', 'Denmark',
               'Finland', 'France', 'Germany', 'Greece', 'Iceland',
               'Ireland', 'Italy', 'Japan', 'Netherlands', 'New Zealand',
               'Norway', 'Portugal', 'Spain', 'Sweden', 'Switzerland',
               'United Kingdom', 'United States of America')  

dat <- pwt10.0 |> 
  filter(country %in% countries, year >= 1959) |> 
  select(country, year, isocode, rgdpna, rkna, emp) |> 
  mutate(Y_pc = rgdpna / emp, K_pc = rkna / emp)

dat |> 
  ggplot(aes(x = year, y = Y_pc)) +
  geom_line() +
  facet_wrap(~ country) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) +
  scale_y_continuous(trans = 'log') +
  labs(y = 'Ouput / worker (log scale)', x = 'Year')

dat <- dat |> 
  arrange(year) |> 
  group_by(country) |> 
  mutate(g_K_pc = log(K_pc) - log(lag(K_pc)),
         g_Y_pc = log(Y_pc) - log(lag(Y_pc)),
         solow_residual = g_Y_pc - 0.3 * g_K_pc) # Assuming alpha = 0.3

dat |> 
  filter(year >= 1960, year <= 2000) |> 
  select(country, g_Y_pc, g_K_pc, solow_residual) |> 
  group_by(country) |> 
  summarize(`Growth Rate` = 100 * mean(g_Y_pc),
            `TFP Growth` = 100 * mean(solow_residual)) |> 
  arrange(as.character(country)) |> 
  knitr::kable(digits = 2, caption = '1960-2000')
1960-2000
country Growth Rate TFP Growth
Australia 1.65 0.89
Austria 3.10 1.89
Belgium 2.69 1.82
Canada 1.58 0.86
Denmark 2.28 1.24
Finland 3.46 2.23
France 2.94 1.86
Germany 2.81 1.61
Greece 3.37 2.26
Iceland 2.02 1.18
Ireland 3.72 2.67
Italy 3.37 2.11
Japan 4.28 2.23
Netherlands 2.22 1.41
New Zealand 1.37 0.65
Norway 2.69 1.95
Portugal 3.09 1.73
Spain 3.64 2.27
Sweden 2.24 1.38
Switzerland 1.47 0.68
United Kingdom 2.27 1.35
United States of America 1.79 1.15
dat |> 
  filter(year >= 2001) |> 
  select(country, g_Y_pc, g_K_pc, solow_residual) |> 
  group_by(country) |> 
  summarize(`Growth Rate` = 100 * mean(g_Y_pc),
            `TFP Growth` = 100 * mean(solow_residual)) |> 
  arrange(as.character(country)) |> 
  knitr::kable(digits = 2, caption = '2001-2019')
2001-2019
country Growth Rate TFP Growth
Australia 0.77 0.27
Austria 0.51 0.26
Belgium 0.63 0.33
Canada 0.62 0.18
Denmark 0.92 0.51
Finland 0.62 0.29
France 0.71 0.35
Germany 0.59 0.39
Greece 0.32 -0.06
Iceland 1.91 1.54
Ireland 2.94 1.60
Italy -0.38 -0.53
Japan 0.47 0.37
Netherlands 0.63 0.34
New Zealand 1.19 0.70
Norway 0.50 0.07
Portugal 0.83 0.33
Spain 0.69 0.22
Sweden 1.33 1.09
Switzerland 0.58 0.39
United Kingdom 0.69 0.44
United States of America 1.27 0.75