Growth by industry
First published as a note attached to my LinkedIn post of 10 April 2025. This page retains the original figure; the original PDF is also available.
I was reading my copy of the 7th edition of Valuation: Measuring and Managing the Value of Companies, one of the best books on corporate finance out there. In this note, I attempt to make one of the plots in the book.
Figure 1 is a rough replication of Exhibit 9.1 of Koller et al. (2020, 157). While the numbers do not line up exactly, the broad thrust is similar (e.g., Biotechnology has high median growth and the widest dispersion). I think it is helpful to make it possible for readers to see the choices underlying a plot (and to produce their own version with their own choices).
Some observations:
- While “Compustat” is listed as a data source in the note to Exhibit 9.1 of Koller et al. (2020), it is not clear what sample restrictions were imposed (e.g., size).
- The industry mapping is not entirely clear. I had ChatGPT guess a possible mapping. I then cleaned this up a tad and posted it in a Google Sheets document. I would probably need to go through carefully “by hand” to check that no firms are inadvertently omitted or put in the wrong industry group.
- I like the way the word “Industry” appears (in bold) at the top of the y-axis labels (industries) in Exhibit 9.1 of Koller et al. (2020). I couldn’t quite replicate that here.
- I couldn’t get the legend seen in Exhibit 9.1 of Koller et al. (2020) to look good in Figure 1.
- I had ChatGPT help me with the creation of the markers at each quantile.
- Updating Figure 1 to cover different periods is quite easy.
- Other plots in Chapter 9 of Koller et al. (2020) might be amenable to creation in the same way.
Code and data
The original Quarto source contains the R code behind the figure. It uses local Compustat files at DATA_DIR/comp/funda.parquet and DATA_DIR/comp/company.parquet, loaded through farr::load_parquet(). The calculation uses the standard INDL, STD, C, and D filters on funda and firms with fic == "USA" in company. It calculates compound annual revenue growth from fiscal 2008 to fiscal 2017—a nine-year interval—and uses DuckDB’s approximate quartiles within industries. Industry assignments give precedence to GICS sub-industry, then industry, then industry-group matches.
The figure above was extracted from the original PDF rather than recomputed for this page. Running the calculation with today’s local data and the live mapping produces different numbers. A snapshot of the mapping captured on 25 October 2026 is supplied for inspection; it is not a verified snapshot of the mapping as it stood in April 2025.
There are further choices to revisit before using the code for a new analysis. The original code does not explicitly exclude non-positive starting revenue or non-finite growth rates. Its pivot_wider() step can also reduce multiple codes for the same industry and field to a single code. These details, along with the provisional industry mapping, are part of why I describe the figure as a rough replication. The source record documents the archived PDF, figure extraction, and mapping snapshot. The Typst source for this version is also available.