Home | GLMs | Multilevel | Survival | Demography | Stata | R

Growth Rates and Doubling Time

The U.S. Census Bureau has population counts for the U.S. from 1790 to 2000, see http://www.census.gov/population/censusdata/table-4.pdf. (Table 2 had slightly different counts for 1830 and 1940.) These data are in an ascii file called uspop1790p in the datasets section of the course website. The file has two columns, year and population, and you can read into Stata using

. infile year long pop using ///
>         http://data.princeton.edu/eco572/datasets/uspop1790p.dat
(22 observations read)

We read the population as a long to be able to store all digits. We will plot the population in millions (otherwise we get bad labels) using absolute and log scales.

. gen pm = pop/1000000

. label var pm "Population (millions)"

. line pm year, name(abspop)

. line pm year, yscale(log) name(logpop)

. graph combine abspop logpop, title("U.S. Population") ///
>         ysize(3) xsize(6)

. graph export uspop.png, replace
(file uspop.png written in PNG format)

Growth Rates

What was the growth rate in the last intercensal period? Let us list the population counts for the last two censuses:

. format pop  %14.0fc

. list pop in -2/-1

     +-------------+
     |         pop |
     |-------------|
 21. | 248,709,873 |
 22. | 281,421,906 |
     +-------------+

. di pop[22]-pop[21]
32712033

We specify a format so Stata doesn't list these large numbers as 2.81e+08; %14.0fc tells Stata to use up to 14 digits with no decimal, using a comma to separate thousands. So, the U.S. grew by 32,712,048 between 1990 and 2000.

If we divide the population increase by the 1990 population, or just take the ratio and subtract one, we obtain

. di pop[22]/pop[21] - 1

.13152688

So it grew 13.2% in ten years. You'd think this is 1.32% per year but that is only approximate because it forgets compounding the growth over the ten years. If we compound k times per year a rate r we obtain P2000 = P1990(1+r/k)^(10k). Solving for r gives r = k[(P2000/P1990)^(1/(10k))-1]. Here's the rate we obtain using different values of k

. scalar ratio = pop[22]/pop[21]

. mata:
------------------------------------------------- mata (type end to exit) 
: ratio = st_numscalar("ratio")

: k = (1\2\4\6\12\52\365)

: r = k :* (ratio:^(1 :/ (10 :* k ) ) :- 1 )

: k, r
                 1             2
    +-----------------------------+
  1 |            1   .0124334546  |
  2 |            2   .0123950453  |
  3 |            4   .0123758999  |
  4 |            6   .0123695269  |
  5 |           12   .0123631583  |
  6 |           52   .0123582623  |
  7 |          365   .0123570031  |
    +-----------------------------+

: end
----------------------------------------------------------------------------

here 1 means annual, 12 means monthly, and 365 means daily. We could continue compounding every minute, or every second, but you can see that our calculation is approaching a limit. From elementary calculus we know that as k -> infinity our equation becomes P2000=P1990 exp(10r), and solving for r gives log(P2000/P1990)/10, so the limiting value is

. display "r=" log(ratio)/10

r=.01235679

This, of course, is the mean annualized rate of growth. Note that we got the correct value rounded to five decimal places by the time we compounded monthly.

Growing More Slowly

We can now compute the growth rate for the entire (census) history of the U.S. We treat all censuses as ten years apart, although this is not exactly true: over time they have moved from August to June, and then April (except for 1920, which was done in January). If you want to do a more precise calculation the dates are in the reference given at the top.

. gen growthrate = log(pop/pop[_n-1])/10

(1 missing value generated)

Note the use of _n-1 to refer to the previous value of population. This generates a missing value for the very first row. Now we plot the rates over time. Because the rate pertains to the period between two censuses it makes more sense to plot it against the mid-point of the dates, which shifts the plot to the right 5 years.

. gen midyear = (year+year[_n-1])/2

(1 missing value generated)

. line gr midyear, name(usgr) title("Growth Rate")

The graph is shown below, when we combine it with a plot of doubling time. We see that the growth rate declined steadily to reach a minumum in the 1930s, and has since hovered around the 0.9 to 1.7 percent range.

Doubling Time

At an instantaneous growth rate r, the doubling time is log(2)/r.

. gen doublingtime = log(2)/gr

(1 missing value generated)

. line doub midyear, name(usdt) title("Doubling Time")

. graph combine usgr usdt, title("U.S. 1970-2000") ///
>         ysize(3) xsize(6)

. graph export usgrdt.png, replace
(file usgrdt.png written in PNG format)

So the U.S. population was doubling every 22-24 years in the first half of the 19th century, but now it takes 56 years to double.