Return to COVID-19 projections

NSW COVID-19 projections – 15 October 2021 (Final)

What’s new?

This will be the final set of projections for the Sydney/NSW COVID-19 outbreak that started in mid-June 2021, initially with the first cases identified in Bondi.  Today is day 5 into the reduction of public health restrictions to contain the outbreak, and it is likely that moving forward, the model will no longer be a good description of the new case series.  With the change in context, including further data into the model doesn’t make theoretical sense.

Today’s announcement of 399 new local cases in NSW remains highly consistent with the models.  The Gompertz model has been performing especially well with less than 1% error for both 7-day and 14-day projections of the cumulative cases.

The very low rates of error in the projections for a number of weeks means that the estimates of the final model can be compared with future case numbers.  Divergence from the model estimates give an indication of the effect of some of the changes in context.  It is expected that case numbers are likely to rise over the next few weeks, though the impact of this will be uncertain.

I’ve included charts today that have projections up to the end of the year (31 December 2021) so that future comparisons can be made.

 

Context and timeline of the Sydney 2021 outbreak

I started these analysis in early July with the new COVID-19 (delta variant) outbreak in Sydney NSW.  The purpose of these charts is that they provide some projections into the near future. Hopefully this allows for some data driven expectations.  The Sydney 2021 series starts on 12 July 2021 and are available here: https://vitualis.com/?page_id=4071

The current Sydney outbreak started on 17 June 2021 – the first day with reports of community cases in Bondi.  The NSW Government formally commenced stay-at-home orders (“lockdown”) for a number of inner-Sydney regions on 25 June 2021 at 2359, having announced this earlier in the day. This was then broadened 18 hours later to cover the whole of Greater Sydney.  The initial plan was a two-week lockdown, with it potentially being lifted on 9 July 2021.

By 9 July 2021, there were early signs that COVID-19 transmission was worsening.  On 15 July 2021, the lockdown was again extended until the end of July, and then extended again, this time for four weeks on 28 July 2021.  Conditions at the end of the month for people living with South Western, and Western Sydney included a limit to travelling only 5 km from home, masks at all times outside, with only essential workers allowed to leave the local government area, with the requirement of a COVID-19 swab every 72 hours.

On 14 August 2021, in the setting of rapidly rising case counts, further restrictions were announced. The 5 km radius limit (from 10 km) was extended to all residents in Greater Sydney, starting 16 August 2021.  Permits were also now required to leave the Greater Sydney area.  Furthermore, stay-at-home orders were extended to across the entire state of NSW.

On 20 August 2021, the lockdown in Greater Sydney was extended to the end of September, and a range of new restrictions stated on 23 August 2021 in the “hot” LGAs including an overnight curfew, restricting outdoor exercise to an hour a day, closure of most businesses except for click-and-collect, and increased policing powers.

On the 6 October 2021, the proportion of people aged 16 years and older in NSW who were fully vaccinated reached 70%.

On 11 October 2021, some public health orders were relaxed for people who were vaccinated, including allowing up to 10 visitors at home, group bookings of up to 20 people at hospitality venues, and masks no longer mandated in outdoor areas.

Projection of new daily cases, and cumulative counts of COVID-19 with data up to 15 October 2021

What is this?

The blue charts are the Gompertz model.  The top image is a chart of the cumulative (total) COVID-19 cases in NSW, starting from 17 June 2021, and the middle image is a chart of the daily new cases.  Only local cases are included (i.e., excluding cases identified in quarantine).  With these final charts, projections are given until the end of the year. The bottom image zooms in on the new daily case projections from 1 October 2021 to 31 December 2021.

It should be noted that projections into the future at this point are indicative of what we could expect if the reduction in restrictions did not occur on 11 October 2021.  We should, therefore, expect to see some variance, most likely a rise in the number of cases, starting in the next week and moving forward.

The projections are made using a model by fitting the cumulative case data since 23 August 2021 to the respective equations using non-linear regression. The regression uses the black data points, and excludes the grey data points. The dark central dashed lines are the model estimates, with 95% confidence intervals of the estimate. On the lower chart, the colour gradations can be understood as the degree of uncertainty in the model projections.

 

Gompertz and Richards’ growth curve

The Gompertz function is a type of sigmoid, or “S”-shaped curve. It’s been around since the early 19th century and was initially used to describe and model demographic mortality curves, and hence, well known to actuaries. The Gompertz function can also be used to accurately model biological growth (e.g., epidemics, tumour size, enzymatic reactions). I have chosen to use this model to help with creating insights as earlier in the pandemic, it was found to be useful in modelling cumulative cases of COVID-19 from the Chinese outbreaks (Jia et al. arXiv:2003.05447v2 [q-bio.PE]).

The Richards’ growth curve (or the generalised logistic function), which is a broad family of sigmoid (S-shaped) curves that can describe well many types of growth, including epidemics. It has also been demonstrated to have utility in modelling COVID-19 outbreaks in 2020 (Lee et al. PLoS One 2020 doi: 10.1371/journal.pone.0236860).

Gompertz equation:

Richard’s growth curve / generalised logistic function:

Why the changes?

I’ve undertaken some assessment of the degree of predictive error in both the Gompertz and Richards’ growth curve models.  These charts compare the 7- and 14-day total case projections of the models, to what actually occurred in reality 7 and 14 days later.  For interpretation, above the 0% error line means that the model provided an over-estimate compared to reality, and below the 0% error line an underestimate.

Both new models, restricted to regression to cumulative case data from 23 August 2021 onward, have demonstrated excellent projection accuracy.

 

Daily case trends

Comparison between the Gompertz and Richards’ growth curve model projections, along with smoothed data trends (7-day simple moving average, and GAM) with data up to 15 October 2021

The simple moving average and generalised additive model gives a descriptive “reality check” to the models.  The GAM can be considered as an advanced smoothed trend of the daily counts.  The new Gompertz and Richards’ growth curve models seem to be performing very well.

Model summaries

Richards’ growth curve model

summary(model.r)

Model fitted: Generalised logistic (ED50 as parameter) (5 parms)

Parameter estimates:

                 Estimate  Std. Error   t-value   p-value    
b:(Intercept) -6.0195e-02  5.7442e-04 -104.7919 < 2.2e-16 ***
c:(Intercept)  4.6213e+03  7.1812e+02    6.4352 4.976e-08 ***
d:(Intercept)  7.2561e+04  1.9090e+02  380.0978 < 2.2e-16 ***
e:(Intercept)  5.4714e+01  3.1496e+00   17.3718 < 2.2e-16 ***
f:(Intercept)  5.6652e+00  1.0444e+00    5.4245 1.778e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error:

 154.4248 (49 degrees of freedom)

Gompertz model

summary(model.g)

Model fitted: Gompertz (4 parms)

Parameter estimates:

                 Estimate  Std. Error  t-value   p-value    
b:(Intercept) -5.7190e-02  4.8774e-04 -117.254 < 2.2e-16 ***
c:(Intercept)  6.9700e+03  2.8954e+02   24.073 < 2.2e-16 ***
d:(Intercept)  7.3124e+04  1.8526e+02  394.719 < 2.2e-16 ***
e:(Intercept)  8.3253e+01  1.1722e-01  710.239 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error:

 134.9367 (50 degrees of freedom)

Model projections of daily cases

model.g bootstrap simulation derivatives
  [1]          NA          NA          NA          NA          NA          NA          NA
  [8]          NA          NA          NA          NA          NA          NA          NA
 [15]          NA          NA          NA          NA          NA          NA          NA
 [22]          NA          NA          NA          NA          NA          NA          NA
 [29]          NA          NA          NA          NA          NA          NA          NA
 [36]          NA          NA          NA          NA          NA          NA          NA
 [43]          NA          NA          NA          NA          NA          NA          NA
 [50]          NA          NA          NA          NA          NA          NA          NA
 [57]          NA          NA          NA          NA          NA          NA          NA
 [64]          NA          NA          NA          NA          NA  859.958584  924.081589
 [71]  985.943734 1044.931873 1100.323661 1151.769766 1198.739454 1240.889222 1277.950406
 [78] 1309.773479 1336.321009 1357.545950 1373.589818 1384.500612 1390.417495 1391.571582
 [85] 1388.241857 1380.683823 1369.275237 1354.266365 1336.004611 1314.744937 1290.921341
 [92] 1264.798767 1236.655300 1206.801297 1175.538077 1143.169547 1109.863776 1075.851476
 [99] 1041.423107 1006.634362  971.778311  936.995959  902.438237  868.145558  834.345486
[106]  801.139743  768.493618  736.531199  705.317802  674.912989  645.350069  616.635269
[113]  588.828352  561.926236  535.942519  510.884381  486.741089  463.502337  441.206726
[120]  419.792012  399.230910  379.547337  360.696493  342.646894  325.407397  308.941704
[127]  293.215743  278.220025  263.910287  250.280527  237.295835  224.942900  213.196087
[134]  202.020649  191.392219  181.286455  171.693017  162.587369  153.934533  145.718525
[141]  137.918980  130.526446  123.516587  116.876383  110.572335  104.599956   98.943589
[148]   93.582717   88.505764   83.701127   79.149754   74.835971   70.756721   66.894345
[155]   63.237328   59.779149   56.507085   53.412236   50.483533   47.712281   45.093988
[162]   42.615319   40.272107   38.055569   35.960176   33.979757   32.106584   30.336436
[169]   28.663596   27.080168   25.584436   24.171148   22.836974   21.574958   20.383140
[176]   19.256059   18.191322   17.184625   16.233776   15.335050   14.485991   13.683953
[183]   12.925775   12.209248   11.533069   10.893476   10.289838    9.718820    9.179590
[190]    8.670300    8.189373    7.734982    7.305662    6.900173    6.516900    6.155019
[197]    5.813454    5.490806

Note: Day 121 = 15/10/2021; Day 127 = 21/10/2021; Day 134 = 28/10/2021; Day 141 = 4/11/2021; Day 148 = 11/11/2021; Day 155 = 18/11/2021; Day 162 = 25/11/2021; Day 169 = 2/12/2021; Day 176 = 9/12/2021; Day 183 = 16/12/2021; Day 190 = 23/12/2021; Day 197 = 30/12/2021

 

Want to know more?

Primary data source is from NSW Health for daily new cases.  The analysis is performed using RStudio Cloud using R version 4.1.0.

Today’s charts

Data: au_covid
R code: models, models g EOY