Growth and Doubling
How Epidemics Spread
Chapter 2 · Growth and Doubling
How Epidemics Spread 1 ended on the boarding-school curve: 3 boys in bed on the first day, then 8, 26, 76 and 225. The day-to-day ratios are 2.67, 3.25, 2.92 and 2.96, so the number in bed roughly tripled each day. That is exponential growth: the amount added each day is proportional to the amount already there. This chapter turns that observation into three tools. The first is the doubling time, a number you can feel. The second is the reproduction number R0, the number that says whether an outbreak grows at all. The third is a short Python simulation that shows why growth cannot go on for ever. There is no calculus here: only multiplication, powers, and the logarithm button on a calculator (or Python’s math.log).
Linear Versus Exponential
Suppose a town adds 10 cases every day. After 30 days there are 300: the line climbs steadily. Now suppose instead that the number of cases grows by 25% a day, starting from 10. The code below shows that after 31 days there are more than 10,000. Linear growth adds the same amount each step; exponential growth multiplies by the same factor. Disease is exponential at the start because each case infects others, and those infect others in turn: the more cases there are, the more new ones appear.
| Linear growth | Exponential growth | |
|---|---|---|
| Rule | add the same amount each step | multiply by the same factor each step |
| Example (illustrative) | 10, 20, 30, 40, 50 | 10, 20, 40, 80, 160 |
| Time to double | keeps getting longer | always the same |
| On a log chart | curves flatter and flatter | a straight line |
| Disease picture | a steady source, such as a polluted well | person-to-person spread with no limit yet |
Doubling Time
The doubling time is how long it takes for the quantity to double. For a growth of r% per period, the Wikipedia article gives the doubling time as t × ln(2) / ln(1 + r/100), where ln is the natural logarithm (just a button on the calculator, or math.log in Python). It also gives the rule of 70: divide 70 by the percentage growth per period for a quick estimate. At 2% a day, 70 / 2 = 35 days. The article says the rule is accurate to within 10% for growth rates below 25%. The table printed below checks that claim and shows where it fails.
The rule of 70 is off by only 0.5% at 1% a day, and by 3.7% at 10% a day. At 25% it reaches 9.9%, just inside the article’s limit, and at 40% a day the error is 15.1%, so the rule stops being a good shortcut. Early epidemics can grow faster than 25% a day, which is why the exact formula is worth keeping. The practical lesson of the last line: even at 25% a day, 10 cases become 10,000 in a month. A doubling time of 3 days means a thousandfold increase in about 30 days, because ten doublings multiply a number by 1,024.
The Reproduction Number R0
The basic reproduction number, R0 (“R naught”), is, in the article’s words, the expected number of cases directly generated by one case in a population where everyone is susceptible. It has no units: it is a count of people, not a rate. The key threshold comes from the same source: in common infection models, R0 above 1 means the infection can spread and the outbreak will expand, while R0 below 1 means it dies out. The article adds a caution that some models, such as those for diseases carried by insects, can sustain an outbreak even with R0 below 1. It also stresses that R0 by itself does not tell you how fast an infection spreads, because speed depends on how long each generation of infection takes.
| R0 | What it means | Outcome in the simple model |
|---|---|---|
| Below 1 | each case infects fewer than one other, on average | the outbreak shrinks and dies out |
| Exactly 1 | each case replaces itself | a steady trickle, neither growing nor shrinking |
| Above 1 | each case infects more than one other | the outbreak grows, and the larger R0 is, the faster |
| Measles (one source) | quoted range 12 to 18 | among the highest figures for any common infection (check) |
| Seasonal influenza (one source) | quoted as 1.3, range 1.2 to 1.4 | growth per generation is much slower |
A caution about the last two rows: R0 is not a fixed property of a germ. It depends on how people mix, how crowded they are, and what they do, so different studies report different values for the same disease, and an R0 measured in one country need not hold in another. Once some people are immune or have changed their behaviour, the average number of new infections per case is called the effective reproduction number, often written R or Rt (check the naming; later chapters use it). R0 is the special case where everyone can still be infected.
Generations
The simplest way to see what R0 does is to count by generations. The first case is generation 0. Its R0 contacts are generation 1, their contacts are generation 2, and so on. If every case infects exactly R0 others, generation g has R0g new cases. The code below prints eight generations for five invented values of R0. It ignores the fact that people get used up, so it is only valid early on.
Compare the rows. With R0 of 0.8 the outbreak withers: 0.8 new cases in the first generation and 0.2 by the eighth. At exactly 1.0 it ticks along at one case per generation. At 1.5 it reaches about 26 new cases in the eighth generation, at 2.5 about 1,526, and at an R0 of 6.0 it reaches about 1.7 million. Small differences in R0 become huge differences in size within a few generations, which is why a measured R0 of 1.3 and one of 1.5 are not interchangeable. Note that a generation is a model unit and not a day: how long it takes is the next question.
From R0 to a Growth Rate
To turn generations into days you need the generation time: the time from one person being infected to the people they infect. Suppose, as a simplification, that it is the same fixed number of days T for everyone (assumed: real generation times vary from person to person, and later chapters will deal with that, including the serial interval). Then the number of cases is multiplied by R0 every T days, so the growth per day is R0 raised to the power 1/T, and the doubling time is T × ln(2) / ln(R0). The code uses a generation time of 4 days, an assumed value, to show how doubling time falls as R0 rises.
With an R0 of 2 and a 4-day generation, the number of new cases doubles every 4 days, as it must, because R0 is the factor per generation. With an R0 of 1.2 the same disease takes about 15 days to double; with an R0 of 5 it doubles in about 1.7 days, growing nearly 50% a day. The same R0 with a different generation time would give a different clock: halving T halves every doubling time in the table. That is why two diseases with the same R0 can feel very different, and why a quick-passing infection is harder to catch up with than a slow one.
Why Growth Cannot Go On
The mathematics so far says that outbreaks grow for ever, and that is plainly false. The final code block adds the missing piece: as people become infected they cannot be infected again, so the supply of susceptible people shrinks. Each case now infects only R0 × (the fraction still susceptible) others. The population is a closed community of 10,000, R0 is 2.5, the generation is 4 days, and there is one starting case, all assumed. The model is crude: a person who has been infected simply drops out of the susceptible pool. How Epidemics Spread 3 replaces it with a proper compartment model.
For about three weeks the growth ratio stays close to 2.5 every 4 days (2.46 on day 24), just as the simple formula says. Then it starts to slip: 2.26 on day 32, 1.94 on day 36, and 1.31 on day 40. The peak of 3,272 new cases a day comes on day 40, and by day 44 the outbreak is shrinking. At the end 9,794 of the 10,000 people have been infected in this model. The last line shows why the early formula must not be extended: 2.5 raised to the power of 25 generations is about 8.9 billion cases, more than the roughly 8 billion people on Earth (check). Unchecked exponential growth always meets a limit, and the shape of the curve you saw in the boarding school, a climb, a peak and a fall, is the result. The overshoot (nearly everyone infected) is a feature of this crude model, which has no separate recovered group and ignores how long people stay infectious.
New cases on days 1 to 6 of an outbreak are 12, 15, 19, 24, 30 and 38 (assumed, invented). Find the day-to-day ratios, the average daily growth, the doubling time and what the rule of 70 says, then find the day on which new cases per day first reach 1,000 if growth never changes, by a loop and by a formula.
📄 View solutionFor R0 values of 1.2, 1.5, 2, 2.5 and 3, find how many generations (and how many days, if a generation is 5 days, assumed) it takes for one case to lead to 1,000 cases in a single generation. Then compare the cases in the third generation for an R0 of 12, 18 and 1.3, the figures quoted for measles and seasonal influenza, and decide how much the uncertainty in R0 matters.
📄 View solutionWrap the limited-growth simulation in a function and run it for R0 values of 0.9, 1, 1.5, 2, 3 and 5 in a population of 10,000 (generation time 4 days, assumed). Report the peak day, the peak number of new cases and the share ever infected, and explain what happens when R0 is below 1.
📄 View solutionQuick Reference
- Exponential growth: the same factor each step; the doubling time is constant
- Doubling time: t × ln(2) / ln(1 + r/100); the rule of 70 (70 / r) is good for r below about 25%
- R0: expected number of cases one case generates in a fully susceptible population; above 1 the outbreak can grow, below 1 it dies out
- By generations: generation g has R0g new cases (while few have been used up)
- With a fixed generation time T (assumed): doubling time = T × ln(2) / ln(R0)
- Limit: as susceptibles run out, growth slows, peaks and falls