Skip to contents

This vignette presents a technical description of the daedalus model in its current state. It should be noted daedalus is in constant development; we will attempt to keep this document as updated as possible during the lifespan of the model. If you encounter any issues, contact the package developers or raise a GitHub issue.

Rationale

The daedalus package is the implementation of a deterministic epidemiological and economic model of the emergence and spread of respiratory pathogen pandemics in countries. Specifically, daedalus tracks

  • Health impact in terms of infections, hospitalisations, deaths and years of life lost (YLL), and

  • Economic impact in terms of GDP losses from:

    • Economic sector closures and workforce depletion due to infection, hospitalisation or death
    • Present and life-time economic losses from missed education
    • Human life losses using the value of statistical life approach

Presently, we have equipped daedalus with parameters to simulate seven potential pathogens (influenza A 2009, influenza A 1957, influenza A 1918, SARS-CoV-1, SARS-CoV-2 pre-Alpha variant, SARS-CoV-2 Delta and SARS-CoV-2 Omicron BA.1, see @ref(tab:pathogendata)) across 67 countries. In addition, daedalus allows the user the flexibility to incorporate additional respiratory pathogen and/or country parameters and data, as considered appropriate for their use case.

The following sections present a technical description of the epidemiological and economic components of daedalus. For examples of its implementation in research case studies, see

  • The original description of daedalus and application to the UK during the COVID-19 pandemic in Haw et al. (2022)

  • Study of the societal value of SARS-CoV-2 booster vaccination in Indonesia in Johnson et al. (2023)

  • Study of promoting healthy populations as a pandemic preparedness strategy in Mexico in Johnson et al. (2024)

Epidemiological model

Model structure

daedalus simulates a country’s population split into seven possible disease state compartments. Model compartments are stratified by age-sector sector ii and vaccination jj classes.

A susceptible individual SS can become exposed to the virus and enter a latent state EE, from which they can develop either a symptomatic IsIs or asymptomatic IaIa infection. Whereas asymptomatic infected individuals are assumed to always recover, symptomatic ones can either recover RR or develop a more severe condition requiring hospitalisation HH, from which they can either recover or die DD.

Ordinary differential equations

dSi,jdt=ζeffj=0(t)Si,j=0(t)Λi,j(t)Si,j(t)+ρRi,j(t)ζj=1Si,j=1(t)dEi,jdt=Λi,j(t)Si,j(t)σEi,j(t)dIai,jdt=(1psymp)σEi,j(t)γIaIai,j(t)dIsi,jdt=psympσEi,j(t)γIsIsi,j(t)ηiIsi,j(t)dHi,jdt=ηiIsi,j(t)ωiHi,j(t)γHiHi,j(t)dRi,jdt=ζeffj=0(t)Ri,j=0(t)+γIsIsi,j(t)+γIaIai,j(t)+γHiHi,j(t)ρRi,j(t)ζj=1Ri,j=1(t)dDi,jdt=ωiHi,j(t)\begin{align} & \frac{dS_{i,j}}{dt} = \zeta_{eff_{j=0}}(t) S_{i,j=0}(t) - \Lambda_{i,j} (t) S_{i,j}(t) + \rho R_{i,j}(t) - \zeta_{j=1} S_{i,j=1}(t)\\ & \frac{dE_{i,j}}{dt} = \Lambda_{i,j} (t) S_{i,j}(t) - \sigma E_{i,j}(t) \\ & \frac{dIa_{i,j}}{dt} = (1 - p_\text{symp}) \sigma E_{i,j}(t) - \gamma_{Ia} Ia_{i,j}(t) \\ & \frac{dIs_{i,j}}{dt} = p_\text{symp} \sigma E_{i,j}(t) - \gamma_{Is} Is_{i,j}(t) - \eta^i Is_{i,j}(t) \\ & \frac{dH_{i,j}}{dt} = \eta^i Is_{i,j}(t) - \omega^i H_{i,j}(t) - \gamma_H^i H_{i,j}(t) \\ & \frac{dR_{i,j}}{dt} = \zeta_{eff_{j=0}}(t) R_{i,j=0}(t) + \gamma_{Is} Is_{i,j}(t) + \gamma_{Ia} Ia_{i,j}(t) + \gamma_H^i H_{i,j}(t) - \rho R_{i,j}(t) - \zeta_{j=1} R_{i,j=1}(t)\\ & \frac{dD_{i,j}}{dt} = \omega^i H_{i,j}(t)\\ \end{align}

Should be noted that whilst some model parameters vary over time (e.g., ζeffj=0(t)\zeta_{eff_{j=0}}(t) effective vaccination rate scaled for available susceptible population) others are assumed fixed (e.g., σ\sigma constant rate of EIE \rightarrow I progression), which is indicated by (t)(t).

Note that, as default, daedalus ships a collection of pre-defined parameter sets that represent historical respiratory pandemic pathogens (see @ref(tab:pathogendata)), as contained in daedalus.data. These can be saved as an object of class daedalus_infection and modified by the user to be then passed to the model function daedalus::daedalus().

Age-sector classes

There are 49 age-sector classes ii in daedalus: four age i1:4i \in 1:4 groups ([05],[520),[2065),65+)( [0-5], [5-20), [20-65),65+) and, given population in i=3i=3 (20-65) represents unemployed adults ofr working age, 45 economic groups i5:49i \in 5:49 (see in Economic model below).

Vaccination classes

As a default, daedalus further disaggregates the population into the vaccination classes j1:2j \in 1:2 of unvaccinated and vaccinated. We assume only the population in the susceptible and recovered compartments can be vaccinated, given transition rate ζeffj=0(t)\zeta_{eff_{j=0}}(t), which is determined by the user (see Table @ref(tab:vaccine)). Vaccinated individuals can lose their immunity and transition back to an unvaccinated class, given rate ρ\rho.

Model transition parameters

daedalus can simulate nine different pathogens (influenza A 2009, influenza A 1957, influenza A 1918, SARS-CoV-1, SARS-CoV-2 pre-Alpha variant, SARS-CoV-2 Delta and SARS-CoV-2 Omicron BA.1) with pathogen-specific transition (see Table @ref(tab:pathogendata)).

(#tab:transitionpars) Definition of model transition parameters.
Parameter Definition
Λi,j(t)\Lambda_{i,j} (t) Force of infection by age-sector and vaccination class
σ\sigma Rate of progression from exposed to infectious
psympp_\text{symp} Proportion of exposed individuals becoming symptomatic
ηi\eta^i Probability of hospitalisation by age, conditional on symptomatic infection
γIa\gamma_{Ia} Recovery rate for asymptomatic infections
γIs\gamma_{Is} Recovery rate for symptomatic infections
γHi\gamma_H^i Recovery rate for hospitalised individuals by age
ρ\rho Rate of waning immunity (recovered to susceptible)
ωi\omega^i Death rate among hospitalised individuals by age
ζeffj=0(t)\zeta_{eff_{j=0}}(t) Vaccination rate
ζj=1\zeta_{j=1} Vaccine protection waning rate

Seed and force of infection

For any given pathogen, we assume a seed of 10710^{-7} infections, all of which are further assumed to be symptomatic.

The force of infection λi,j(t)\lambda_{i,j} (t) accounts for the infection contributions of symptomatically Isij(t)Is_{ij}(t) and asymptomatically Iaij(t)Ia_{ij}(t) infected individuals in the community and in workplaces.

We let δIcommi(t)\delta Icomm^i(t) and δIworki(t)\delta Iwork^i(t) denote the number of infected individuals in the community and the workplace, respectively, weighted by their infectivity given δIcommij(t)=veffj=1(Iai1:4,j(t)ϵ+Isi1:4,j(t))δIworkij(t)=veffj=1(Iai5:49,j(t)ϵ+Isi5:49,j(t)),\begin{align} & \delta Icomm_{ij}(t) = v_{eff_{j=1}} (Ia_{i \in 1:4,j}(t) \epsilon + Is_{i \in 1:4,j}(t))\\ & \delta Iwork_{ij}(t) = v_{eff_{j=1}} (Ia_{i \in 5:49,j}(t) \epsilon + Is_{i \in 5:49,j}(t)), \end{align} where ϵ\epsilon is the relative infectiousness of an asymptomatically infected individual relative to a symptomatic one, and veffj=1v_{eff_{j=1}} the reduced susceptibility of a vaccinated individual relative to an unvaccinated one of the same age.

The force of infection from the community λcommi,j(t)\lambda_{comm_{i,j}} (t) on a susceptible individual is thus modelled as λcommi,j(t)=β(t)imi,ijδIcommi,j(t)\begin{align} \lambda_{comm_{i,j}} (t) & = \beta (t) \cdot \sum_{i'} m_{i,i'} \sum_{j'} \delta Icomm_{i',j'} (t) \end{align} where β(t)\beta(t) represents a time-varying contact rate scaling factor, determined by social distancing interventions simulated, and mi,im_{i,i'} is the (symmetric) person-to-person contact rate between age group ii and ii'.

The force of infection within the workplace λworki,j(t)\lambda_{work_{i,j}} (t) is modelled as λworki,j(t)=β(t)Φi(t)i=0i=NCi,ijδIworki,j(t)\begin{align} \lambda_{work_{i,j}} (t) & = \beta (t) \cdot \Phi_i(t) \cdot \sum_{i'=0}^{i'=N} C_{i,i'} \sum_{j'} \delta Iwork_{i',j'} (t) \end{align} where Ci,iC_{i,i'} is a contact matrix specific to the workplace, and Φi(t)\Phi_i(t) is a scaling factor determined by economic closure interventions simulated.

Lastly, the force of infection from infected individuals in the community to susceptible workers λc2wi,j(t)\lambda_{c2w_{i,j}} (t) (i.e., infected individuals from the community attending shops) is given by λc2wi,j(t)=β(t)Φi(t)i=0i=NCtoWi,ijδIcommi,j(t)\begin{align} \lambda_{c2w_{i,j}} (t) & = \beta (t) \cdot \Phi_i(t) \cdot \sum_{i'=0}^{i'=N} CtoW_{i,i'} \sum_{j'} \delta Icomm_{i',j'} (t) \end{align} where CtoWi,iCtoW_{i,i'} is a contact matrix specific to consumers attending workplaces.

The total force of infection acting on susceptible individuals is then assumed to be an addition of the above. For conciseness, this can be taken as Λij(t)=λcommij(t)+λworkij(t)+λc2wi,j(t)\begin{equation} \Lambda_{ij} (t) = \lambda_{comm_{ij}} (t) + \lambda_{work_{ij}} (t) + \lambda_{c2w_{i,j}} (t) \end{equation} however, it should be noted that the force of infection within the workplace λworkij(t)\lambda_{work_{ij}} (t) is a column vector of length 45, given the number of economic sector classes in the model, whilst λcommij(t)\lambda_{comm_{ij}} (t) and λc2wij(t)\lambda_{c2w_{ij}} (t) are of length 49, encompassing all age-sector classes.

Disease transition rates

(#tab:pathogendata) Pathogen parameters. A different pathogen profile can be created by the user by generating a list object specifying these parameter values (see list structure for these pathogens in daedalus.data::infection_data). *Note disease severity progression is modelled with competing rates (e.g., for individuals in the IaIa compartment, of recovery γIs\gamma_{Is} vs hospitalisation by age ηi\eta^i); where NA values are specified, we assume these individuals cannot undergo the respective disease severity transition.
Parameter Symbol Influenza 2009 Influenza 1957 Influenza 1918 Covid Omicron Covid Delta Covid Wild-type
Basic reproduction number R0R_0 1.58 1.80 2.50 5.94 5.08 2.87
Probability symptomatic psymptp_{sympt} 0.669 0.669 0.669 0.592 0.595 0.595
Relative infectiousness (asymptomatic:symptomatic) ϵ\epsilon 0.58 0.58 0.58 0.58 0.58 0.58
Latent period (days) 1/σ1/\sigma 1.1 1.1 1.1 4 4 4.6
Infectious period asymptomatic (days) 1/γIa1/\gamma_{Ia} 2.5 2.5 2.5 2.1 2.1 2.1
Infectious period symptomatic (days) 1/γIs1/\gamma_{Is} 2.5 2.5 2.5 4 4 4
Infection-induced immune period (days) 1/ρ1/\rho 365 365 365 365 365 365
Age specific parameters*
Hospitalisation rate given symptomatic infection (days1^{-1}) 1/ηi1/\eta^i
0-4 years 358.7 1851.9 13.7 73006.1 80405.4 148750.0
5-19 years 359.5 158.7 15.6 133.7 25.4 47
20-64 years 912.4 1851.9 50.4 5900.4 4638.8 8581.7
65+ years 161.7 9.3 6.6 35.8 8.1 15
Recovery rate hospitalised (days1^{-1}) 1/γHi1/\gamma_H^i
0-4 years 5.2 5.4 5.7 NA NA NA
5-19 years 5.3 5.4 5.7 5.9 8.3 13.1
20-64 years 5.2 5.4 5.7 6.8 9.4 14.8
65+ years 13.7 5.4 5.7 8.1 10.7 16.9
Death given hospitalised (days1^{-1}) 1/ωi1/\omega^i
0-4 years 126.3 67.5 40 5.5 7.6 12
5-19 years 79.8 67.5 40 82.1 94.3 148.9
20-64 years 120.9 67.5 40 28.4 40.5 64
65+ years 7.9 67.5 40 17.3 26.3 41.6

Vaccination

Vaccination is implemented as a series of default pre-determined vaccine investment scenarios, which can be modified as necessary by the user.

(#tab:vaccine) Vaccination parameters. These pre-specified parameters can be modified by the user and/or additional strategies can be added by generating a list object with the same structure (see daedalus.data::vaccination_scenario_data). *Note the default version of daedalus only models vaccine efficacy against infection; for use cases with added functionality to simulate efficacy against other clinical severity end-points see Johnson et al. (2023).
Advance vaccine investment Start time (days) Rate (% per day) Uptake limit (%) Efficacy* (%) Waning period (mean, days)
None 365 0.14 40 50 270
Low 300 0.29 50 50 270
Medium 200 0.43 60 50 270
High 100 0.5 80 50 270

Economic model

daedalus assigns monetary values to the years of life lost (YLL) K1K_1, economic activity losses K2K_2 and years of education lost K3K_3. The following sections describe the methodology for calculating each of these losses. The total socioeconomic loss (TSL) of a respiratory pandemic is therefore given by

TSL = K_1 + K_2 + K_3.

Years of life lost

We estimate the number of years of life lost by age and country using life tables from the Global Burden of Disease Collaborative Network (2020). Formally, we used the life expectancy by age and country L̂i\hat{L}_i to estimate life years lost for deceased individuals given

YLLi=t=0tjDi,j(t)dtL̂i.\begin{equation} YLL^i = \int_{t=0}^t \sum_{j} D_{i,j}(t)dt \cdot \hat{L}_i. \end{equation}

We then use the VSL approach to estimate the monetary value of lives lost. The VSL reflects individuals’ willingness to trade wealth for a reduction in mortality risk (Cutler and Summers (2020)). Following standardised methods (Hammitt (2020);Ananthapavan et al. (2021);Robinson, Sullivan, and Shogren (2021)), we assume the VSL of the USA and adjust for differences in income elasticity by country, which are further assumed to be higher in lower-income settings because the opportunity cost of spending on basic necessities becomes large if incomes are at or below subsistence (Hammitt (2020)).

Formally, for country aa we estimate its VSL by age VSLaiVSL_a^i as a function of GDP given

VSLai=VSLUSAi(raGDPaGDPUSA)re\begin{equation} VSL_a^i = VSL_{USA}^i \left(r_a \frac{GDP^a}{GDP_{USA}} \right)^{r_e} \end{equation}

where rar_a is the country’s conversion rate of its market exchange rate GDP to a purchasing power parity GDP, and rer_e its income elasticity, which we estimated from OECD data as in Robinson, Sullivan, and Shogren (2021).

The monetary value of years of life lost K1K_1 is then

K1=iYLLiVSLai.\begin{equation} K_1 = \sum_i YLL^i \cdot VSL_a^i. \end{equation}

Economic activity losses

We calculate the cost of economic closures by each of 45 kk sectors in terms of lost gross value added (GVA). daedalus runs in continuous time, with outputs calculated at daily time steps.

The daily GDP generated by a country in the absence of closures is composed of the maximum daily GVA yk(t)y_k(t) for each sector kk. There is a 1:1 mapping of the 45 economic sectors and the age-sector population strata i5:49i \in 5:49. For conciseness, in this section we index economic sectors and age-sector classes only as kk.

Formally, the maximum possible GDP generated Y0(t)Y_0(t) by all economic sectors mSm_S in the absence of mandated closures (i.e., as a result of NPIs) at time tt is defined by

Y0(t)=k=1mSyk(t),\begin{equation} Y_0(t)=\sum_{k=1}^{m_S}y_k(t), \end{equation}

where all economic sectors contribute their daily GVA yk(t)y_k(t).

If an economic sector is, however, affected by closures on a given day, we estimate its GVA losses as

yk(t)=yk(0)(1κk(t))\begin{equation} y_k(t) = y_k(0) \cdot (1 - \kappa_k(t)) \end{equation}

where yk(0)y_k(0) is the respective sector’s daily GVA in the absence of closure and κk(t)\kappa_k(t) its relative openness (i.e., from 0 to 1, where 0 is completely open and 1 completely closed). We thus assume sectors contribute $0 USD in GVA on day tt if completely closed.

In addition to GVA losses from closures, economic sectors can lose productivity whilst being open given depletion of their workforce (i.e., due to self-isolation, sickness, hospitalisation or death). xk(t)x_{k}(t) is the proportion of the workforce contributing to economic production in sector kk out of the total workforce NkN_k on day tt. As the workforce of a sector is depleted, we assume a smaller fraction x̂j(t)\hat{x}_{j}(t) will be available to contribute to production given

x̂k(t)=xk(t)(1j=01(Iaj,k(t)+Isj,k(t)+Hj,k(t)+Dj,k(t)Nk)).\begin{equation} \hat{x}_{k}(t) = x_{k}(t) \left(1 - \sum_{j=0}^{1} \left( \frac{Ia^{j,k}(t) + Is^{j,k}(t) + H^{j,k}(t) + D^{j,k}(t)}{N_k} \right) \right). \end{equation}

The total GDP generated at time tt is then

Y(t)=k=1mSyk(t)x̂k(t),\begin{equation} Y(t) = \sum_{k=1}^{m_S} y_k(t) \hat{x}_{k}(t), \end{equation}

and the GDP loss compared to the maximum is

K2=t=0t(Y0(t)Y(t))dt.\begin{equation} K_2 = \int_{t=0}^t \left( Y_0(t) - Y(t) \right)dt. \end{equation}

Years of education lost

We monetise the value of a school day VSDVSD as a country-specific parameter, as previously done in Psacharopoulos et al. (2021), given by

VSD=VPEMAERYE365\begin{equation} VSD = \frac{VPE \cdot MAE \cdot RYE}{365} \end{equation}

where MAEMAE is the mean annual earnings (estimated using GDP multiplied by labour share of income, as in Feenstra, Inklaar, and Timmer (2015)), RYERYE the rate of return for one year of education, assumed fixed at 0.08, and VPEVPE is the yearly present value of lost earnings given by

TODO: Rob, I cannot find any reference in the daedalus code or data of how this was calculated. Is it that the country data files were prepared and saved following the equation for p12p^{12} in your technical appendix? If you could please corroborate and re-write the correct form of that equation here it will be ace. Thanks!

Thus, in addition to GVA losses from closures, as done for all economic sectors (see section above), we estimate total education sector losses as

K3=t=0t(yedu(t)+Ni=2(t)VSD(1κedu(t))(1π))dt\begin{equation} K_3 = \int_{t=0}^t \left( y_{edu}(t) + N_{i=2}(t) \cdot VSD \cdot (1 - \kappa_{edu}(t)) \cdot (1 - \pi) \right)dt \end{equation}

where Ni=2(t)N_{i=2}(t) is the number of pupils available at time tt (i.e., population of school-age not infected, hospitalised or deceased), π\pi a fixed parameter of the effectiveness of remote education.

References

Ananthapavan, Jaithri, Marj Moodie, Andrew J. Milat, and Rob Carter. 2021. “Systematic Review to Update ‘Value of a Statistical Life’ Estimates for Australia.” International Journal of Environmental Research and Public Health 18 (11): 6168. https://doi.org/10.3390/ijerph18116168.
Cutler, David M., and Lawrence H. Summers. 2020. “The COVID-19 Pandemic and the $16 Trillion Virus.” JAMA 324 (15): 1495–96. https://doi.org/10.1001/jama.2020.19759.
Feenstra, Robert C., Robert Inklaar, and Marcel P. Timmer. 2015. “The Next Generation of the Penn World Table.” American Economic Review 105 (10): 3150–82. https://doi.org/10.1257/aer.20130954.
Global Burden of Disease Collaborative Network. 2020. “Global Burden of Disease Study 2019 (GBD 2019) Life Tables 1950-2019.” Institute for Health Metrics and Evaluation (IHME). https://doi.org/10.6069/1PF5-1M37.
Hammitt, James K. 2020. “Valuing Mortality Risk in the Time of COVID-19.” Journal of Risk and Uncertainty 61 (2): 129–54. https://doi.org/10.1007/s11166-020-09338-1.
Haw, David J., Giovanni Forchini, Patrick Doohan, Paula Christen, Matteo Pianella, Robert Johnson, Sumali Bajaj, et al. 2022. “Optimizing Social and Economic Activity While Containing SARS-CoV-2 Transmission Using DAEDALUS.” Nature Computational Science 2 (4): 223–33. https://doi.org/10.1038/s43588-022-00233-0.
Johnson, Rob, Martha Carnalla, Ana Basto-Abreu, David Haw, Christian Morgenstern, Patrick Doohan, Giovanni Forchini, Katharina D. Hauck, and Tonatiuh Barrientos-Gutiérrez. 2024. “Promoting healthy populations as a pandemic preparedness strategy: a simulation study from Mexico.” The Lancet Regional Health – Americas 30 (February). https://doi.org/10.1016/j.lana.2024.100682.
Johnson, Rob, Bimandra Djaafara, David Haw, Patrick Doohan, Giovanni Forchini, Matteo Pianella, Neil Ferguson, Peter C. Smith, and Katharina D. Hauck. 2023. “The Societal Value of SARS-CoV-2 Booster Vaccination in Indonesia.” Vaccine 41 (11): 1885–91. https://doi.org/10.1016/j.vaccine.2023.01.068.
Psacharopoulos, George, Victoria Collis, Harry Anthony Patrinos, and Emiliana Vegas. 2021. “The COVID-19 Cost of School Closures in Earnings and Income Across the World.” Comparative Education Review, May. https://doi.org/10.1086/713540.
Robinson, Lisa A., Ryan Sullivan, and Jason F. Shogren. 2021. “Do the Benefits of COVID‐19 Policies Exceed the Costs? Exploring Uncertainties in the Age–VSL Relationship.” Risk Analysis 41 (5): 761–70. https://doi.org/10.1111/risa.13561.