Arthur Charpentier, an academic actuary, tweeted about a post on flattening the curve by Joscha Bach. Bach is essentially putting numbers on the axes of the famous ‘flatten the curve’ graph.
Flatten the curve
Essentially he argues that the curve is a deadly illusion, that the difference between capacity and demand under the assumption of a 40-60% infection rate within the next year just cannot be bridged by simple social distancing measures, and a stronger policy of containment would be required.
In the following I try to replicate his analysis for Germany.
General assumptions are form Joscha’s post, I researched the numbers for Germany last week, but don’t have the sources at hand (they are somewhere deep down in my tweet archive).
Capacity is the amount of free beds that can be occupied by COVID cases. That would be:
Based on the number of available beds, we have a capacity of
So, we see that probably the number of ICU beds is the limiting resource, and I will concentrate on this number. The conclusion is that at any point in time, the number of infected should not be more than 112,000 cases.
Before going further in the analysis, let’s take a look at The Curve. What is The Curve? In general, it is the number of new cases plotted over time. The form of the curve can be approximated by a logistic distribution. You often read about the curve being exponential in nature, but this only describes the first part, the upswing if you will. At some point the virus runs out of unprotected people to infect, and the number of active cases declines. In that sense, the cumulative distribution function of the logistic distribution describes the total number of cases in a population, which has as upper limit the size of the population, and The Curve is its probability density function.
For the next step, I scale the CDF to the assumed limit for herd immunity at 70% of the population, and calculate the required places in ICU given 4 weeks before patients leave ICU.
df_scaled = df3 %>%
mutate(cases = prob*0.7*80e6) %>%
mutate(new_cases = c(NA, diff(cases))) %>%
filter(!is.na(new_cases)) %>%
mutate(new_icu = 0.05*new_cases) %>%
mutate(release_icu = lag(new_icu,28)) %>%
mutate(release_icu = if_else(is.na(release_icu),0,release_icu)) %>%
mutate(change_icu = new_icu - release_icu) %>%
mutate(current_icu = cumsum(change_icu))
head(df_scaled) %>% knitr::kable()
| week | prob | cases | new_cases | new_icu | release_icu | change_icu | current_icu |
|---|---|---|---|---|---|---|---|
| 1.140110 | 0.0002518 | 14100.71 | 643.2534 | 32.16267 | 0 | 32.16267 | 32.16267 |
| 1.280220 | 0.0002638 | 14774.70 | 673.9922 | 33.69961 | 0 | 33.69961 | 65.86228 |
| 1.420330 | 0.0002764 | 15480.90 | 706.1991 | 35.30995 | 0 | 35.30995 | 101.17223 |
| 1.560440 | 0.0002897 | 16220.84 | 739.9441 | 36.99720 | 0 | 36.99720 | 138.16944 |
| 1.700549 | 0.0003035 | 16996.15 | 775.3006 | 38.76503 | 0 | 38.76503 | 176.93447 |
| 1.840659 | 0.0003180 | 17808.49 | 812.3455 | 40.61728 | 0 | 40.61728 | 217.55175 |
The plot shows the problem - the current available free ICU capacity would be overwhelmed, given the parameterization in about 10 weeks. Even if we made all ICU beds available, this would give us maybe 2 additional weeks. Even if we then were somehow able to double the ICU capacity – after 16 weeks this capacity would be used up as well. At the height of the epidemic, around 890,000 ICU beds would be required.
The conclusion then becomes clear: The virus cannot be allowed to spread in this fashion, it must be contained. And the earlier containment starts, the better the chances to achieve its goal.
And obviously, all the caveats that Joscha mentions apply to this exercise as well: The logistic curve is not calibrated to real world data, any number of mitigating measures have not been taken into account, the model is quite sensitive to the stay in the ICU and so on.