Skip to content

Commit 4d1eb93

Browse files
committed
update readme
1 parent 65070fa commit 4d1eb93

File tree

2 files changed

+96
-42
lines changed

2 files changed

+96
-42
lines changed

README.Rmd

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,88 @@
11
---
22
output: github_document
33
---
4+
```{r set-up, echo=FALSE}
5+
knitr::opts_chunk$set(
6+
eval = FALSE, echo = TRUE
7+
)
8+
```
9+
10+
[![Code DOI](https://img.shields.io/badge/Code%20DOI-10.5281/zenodo.14903161-blue)](https://doi.org/10.5281/zenodo.14903161) [![medRxiv](https://img.shields.io/badge/medRxiv-10.1101/2025.04.10.25325611-blue)](https://doi.org/10.1101/2025.04.10.25325611)
411

5-
## Relating forecast performance to methodology: the influence of model structure and target specificity on the performance of European COVID-19 forecasts
12+
## The influence of model structure and geographic specificity on forecast accuracy among European COVID-19 forecasts
613

7-
Kath Sherratt (1), Rok Grah (2), Bastian Prasse (2), The European COVID-19 Forecast Hub, Sam Abbott (1), Sebastian Funk (1)
14+
Katharine Sherratt (1), Rok Grah (2), Bastian Prasse (2), Friederike Becker (3), Jamie McLean (1), Sam Abbott (1), Sebastian Funk (1)
815

9-
(1) London School of Hygiene & Tropical Medicine
16+
(1) Centre for Mathematical Modelling of Infectious Diseases, London School of Hygiene & Tropical Medicine
1017
(2) European Centre for Disease Prevention and Control
18+
(3) Institute of Statistics, Karlsruhe Institute of Technology
19+
20+
#### Overview
21+
22+
- A [slide deck](https://docs.google.com/presentation/d/1BSdTEuZ_zKdU8tBFuRMmP7GwHht1D0oZSkaFWovz9ao/edit?slide=id.p#slide=id.p) offers high level context for what we were interested in, what we did, and what we found.
23+
24+
#### Summary
1125

12-
### Abstract
26+
- Accurately predicting the spread of infectious disease is essential to supporting public health during outbreaks.
27+
However, comparing the accuracy of different forecasting models is challenging.
28+
Existing evaluations struggle to isolate the impact of model design choices (like model structure or specificity to the forecast target) from the inherent difficulty of predicting complex outbreak dynamics.
29+
Our research introduces a novel approach to address this by systematically adjusting for common factors affecting epidemiological forecasts, accounting for multi-layered and non-linear effects on predictive difficulty.
1330

14-
Background: The performance of forecasts in capturing observed data often varies in time and space with no overall "best" forecast. Two varying features of forecasting methods that could help explain this are: the forecaster’s approach to model structure; and whether the forecaster specifically tunes their model to each target. We investigated short-term forecasts of weekly incident deaths for 32 countries submitted to the European COVID-19 Forecast Hub between March 2021 and March 2023.
31+
- We applied this approach to a large dataset of forecasts from 47 different models submitted to the European COVID-19 Forecast Hub.
32+
We adjusted for variation across epidemic dynamics, forecast horizon, location, time, and model-specific effects.
33+
This allowed us to isolate the impact of model structure and geographic specificity on predictive performance.
1534

16-
Methods: We categorised 39 models by their structure (mechanistic, semi-mechanistic, statistical), and by their specificity (the number of locations each team targeted; and whether the target location was the same as the modeller’s institutional location, as a proxy for model adaptation to local conditions). We assessed forecast performance using the weighted interval score. First, we compared performance relatively against a median ensemble of all models. Next, we used a generalised additive model to explore performance among different model structures and specificity, while accounting for the level and trend of observed incidence, the forecast horizon, and random variation among models.
35+
- Our findings suggest that after adjustment, apparent differences in performance between model structures became minimal, while models that were specific to a single location showed a slight performance advantage over multi-location models.
36+
Our work highlights the importance of considering predictive difficulty when evaluating across forecasting models, and provides a framework for more robust evaluations of infectious disease predictions.
1737

18-
Results: We evaluated forecasts of COVID-19 deaths up to 4 weeks ahead for up to 32 countries over 104 weeks. No one model structure consistently outperformed the ensemble. Mechanistic models saw the widest range in performance, with the range of scores including both beating the ensemble and performing up to three times worse. Models that targeted only one or two countries appeared to perform on average better and more consistently compared to multi-country models.
38+
#### Deep dive
1939

20-
Interpretation: Based on this study we would recommend that mechanistic models should be part of predictive ensembles, with an emphasis on using information from the local context of where they are applied. Multi-model comparisons should encourage methodological diversity while ensuring that detailed information on methodology is collated alongside the numerical predictions.
40+
- Read the pre-print: [medRxiv](https://doi.org/10.1101/2025.04.10.25325611)
41+
- Current working draft: [Docs](https://docs.google.com/document/d/1OOVUHR_BGWcviSNxvaHvbXD16Bb3Y_zhw--7gAGBqMk/edit#)
2142

22-
Current working draft:
23-
- <https://docs.google.com/document/d/1OOVUHR_BGWcviSNxvaHvbXD16Bb3Y_zhw--7gAGBqMk/edit#>
43+
### Getting started
2444

25-
### Environment
45+
#### Code environment
2646

27-
Packages are managed using [renv](https://rstudio.github.io/renv/articles/renv.html).
28-
In order to install all the required packages, install the `renv` package and run
47+
Packages are managed using
48+
[renv](https://rstudio.github.io/renv/articles/renv.html). In order to
49+
install all the required packages, install the `renv` package and run
2950

30-
```{r renv, eval = FALSE}
51+
``` {r}
3152
renv::restore()
3253
```
3354

34-
### Data
55+
#### Data
3556

36-
All the data used in the analysis is stored in the `data/` directory.
37-
It has been obtained from public sources.
38-
In order to re-download the data in the `data/` directory, use
57+
All the data used in the analysis is stored in the `data/` directory. It
58+
has been obtained from public sources. In order to re-download the data
59+
in the `data/` directory, use
3960

40-
```{r get_data, eval = FALSE}
61+
``` {r, eval=FALSE}
4162
## Get metadata from googlesheet; save to data/
4263
source(here("R", "get-metadata.R"))
4364
44-
## Get observed data and all Hub forecasts; save to data/
65+
## Get observed data and all Hub forecasts; exclude forecasts; save to data/
4566
source(here("R", "import-data.R"))
4667
```
4768

48-
### Analyses
69+
#### Analyses
4970

5071
In order to re-generate the forecast scores, use
5172

52-
```{r generate_scores, eval = FALSE}
73+
``` {r}
5374
## Score forecasts & ensembles on the log and natural scales; save to data/
5475
source(here("R", "score.R"))
5576
```
5677

5778
In order to run the GAM on the scores, use
5879

59-
```{r gam, eval = FALSE}
80+
``` {r}
6081
## Model the weighted interval score; save to data/
6182
source(here("R", "model-wis.R"))
6283
```
6384

64-
### Results
85+
#### Results
6586

6687
View results:
6788

README.md

Lines changed: 51 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,63 @@
1-
[![DOI](https://zenodo.org/badge/644420305.svg)](https://doi.org/10.5281/zenodo.14903161)
1+
2+
[![Code
3+
DOI](https://img.shields.io/badge/Code%20DOI-10.5281/zenodo.14903161-blue)](https://doi.org/10.5281/zenodo.14903161)
4+
[![medRxiv](https://img.shields.io/badge/medRxiv-10.1101/2025.04.10.25325611-blue)](https://doi.org/10.1101/2025.04.10.25325611)
25

36
## The influence of model structure and geographic specificity on forecast accuracy among European COVID-19 forecasts
47

5-
Katharine Sherratt (1), Rok Grah (2), Bastian Prasse (2), Friederike Becker (3), Jamie McLean (1), Sam Abbott (1), Sebastian Funk (1)
8+
Katharine Sherratt (1), Rok Grah (2), Bastian Prasse (2), Friederike
9+
Becker (3), Jamie McLean (1), Sam Abbott (1), Sebastian Funk (1)
10+
11+
1) Centre for Mathematical Modelling of Infectious Diseases, London
12+
School of Hygiene & Tropical Medicine
13+
2) European Centre for Disease Prevention and Control
14+
3) Institute of Statistics, Karlsruhe Institute of Technology
15+
16+
#### Overview
617

7-
(1) Centre for Mathematical Modelling of Infectious Diseases, London School of Hygiene & Tropical Medicine
8-
(2) European Centre for Disease Prevention and Control
9-
(3) Institute of Statistics, Karlsruhe Institute of Technology
18+
- A [slide
19+
deck](https://docs.google.com/presentation/d/1BSdTEuZ_zKdU8tBFuRMmP7GwHht1D0oZSkaFWovz9ao/edit?slide=id.p#slide=id.p)
20+
offers high level context for what we were interested in, what we did,
21+
and what we found.
1022

11-
### Explainer
12-
- A [slide deck](https://docs.google.com/presentation/d/1BSdTEuZ_zKdU8tBFuRMmP7GwHht1D0oZSkaFWovz9ao/edit?slide=id.p#slide=id.p) offers a high level summary of what we were interested in, what we did, and what we found.
23+
#### Summary
1324

14-
### Abstract
25+
- Accurately predicting the spread of infectious disease is essential to
26+
supporting public health during outbreaks. However, comparing the
27+
accuracy of different forecasting models is challenging. Existing
28+
evaluations struggle to isolate the impact of model design choices
29+
(like model structure or specificity to the forecast target) from the
30+
inherent difficulty of predicting complex outbreak dynamics. Our
31+
research introduces a novel approach to address this by systematically
32+
adjusting for common factors affecting epidemiological forecasts,
33+
accounting for multi-layered and non-linear effects on predictive
34+
difficulty.
1535

16-
The predictive accuracy of infectious disease forecasts varies in time, space and between models. When building models for prediction, forecasters have the choice of a range of underlying model structures with more or less ability to tune a particular model to the forecasting target. However, it has been difficult to compare the effect of these choices due to a lack of standardised forecast reporting and evaluation. Here, we used prospectively collected, standardised, open data from the European COVID-19 Forecast Hub to investigate model-specific factors that might influence forecast performance.
36+
- We applied this approach to a large dataset of forecasts from 47
37+
different models submitted to the European COVID-19 Forecast Hub. We
38+
adjusted for variation across epidemic dynamics, forecast horizon,
39+
location, time, and model-specific effects. This allowed us to isolate
40+
the impact of model structure and geographic specificity on predictive
41+
performance.
1742

18-
We evaluated 1-4 week ahead forecasts of COVID-19 cases and deaths for 32 countries between 2021 and 2023. We categorised 47 models by their structure: agent-based, mechanistic, semi-mechanistic, statistical or other; and by their specificity to a geographic location: whether a forecaster predicted outcomes for one country or many. We assessed forecast performance using the weighted interval score after log-transforming both forecasts and observations. We used a generalised additive mixed model to explore performance, additionally accounting for changes between countries over time, the epidemiological situation, the forecast horizon, and variation among models.
43+
- Our findings suggest that after adjustment, apparent differences in
44+
performance between model structures became minimal, while models that
45+
were specific to a single location showed a slight performance
46+
advantage over multi-location models. Our work highlights the
47+
importance of considering predictive difficulty when evaluating across
48+
forecasting models, and provides a framework for more robust
49+
evaluations of infectious disease predictions.
1950

20-
We observed some small differences between model types, with statistical models slightly outperforming other types when forecasting deaths, but with widely overlapping confidence intervals. We further found that those that forecast for single countries outperformed those forecasting multiple targets, however again confidence intervals of the corresponding estimates overlapped widely.
51+
#### Deep dive
2152

22-
Whilst we found no clear effects, we showed that multi-model forecasting efforts are a useful source for more generalised model-based analysis of predictive performance. Our work was limited by a small sample size of independent models. We recommend that multi-model comparisons encourage methodological diversity to enable future studies of factors that drive predictive performance, ensuring that detailed information on methodology is collated alongside the numerical predictions.
53+
- Read the pre-print:
54+
[medRxiv](https://doi.org/10.1101/2025.04.10.25325611)
55+
- Current working draft:
56+
[Docs](https://docs.google.com/document/d/1OOVUHR_BGWcviSNxvaHvbXD16Bb3Y_zhw--7gAGBqMk/edit#)
2357

24-
Current working draft: -
25-
<https://docs.google.com/document/d/1OOVUHR_BGWcviSNxvaHvbXD16Bb3Y_zhw--7gAGBqMk/edit#>
58+
### Getting started
2659

27-
### Environment
60+
#### Code environment
2861

2962
Packages are managed using
3063
[renv](https://rstudio.github.io/renv/articles/renv.html). In order to
@@ -34,7 +67,7 @@ install all the required packages, install the `renv` package and run
3467
renv::restore()
3568
```
3669

37-
### Data
70+
#### Data
3871

3972
All the data used in the analysis is stored in the `data/` directory. It
4073
has been obtained from public sources. In order to re-download the data
@@ -48,7 +81,7 @@ source(here("R", "get-metadata.R"))
4881
source(here("R", "import-data.R"))
4982
```
5083

51-
### Analyses
84+
#### Analyses
5285

5386
In order to re-generate the forecast scores, use
5487

@@ -64,7 +97,7 @@ In order to run the GAM on the scores, use
6497
source(here("R", "model-wis.R"))
6598
```
6699

67-
### Results
100+
#### Results
68101

69102
View results:
70103

0 commit comments

Comments
 (0)