Simple SEIR model Python script for the COVID-19 pandemic with real world data comparison.
Simple SEIR model Python script for the COVID-19 pandemic with real world data.
Purpose is to easily be able to experiment and better understand what is happening currently and what might happen in the near future.
What I learned: Activating containment measures early can save lives.
There is another branch in this repository that is about blood type (ABH, ABO, AB0) extended SEIR modeling and correlating model data vs real world data: https://github.com/coronafighter/coronaSEIR/tree/ABH
This is not a scientific or medical tool. Use at your own risk. BETA! There might be serious bugs.
Needs Python 3.x installed. Tested on Ubuntu. Should run on Window and Mac, too.
# everything after the hash symbol # is a comment
$ git clone https://github.com/coronafighter/coronaSEIR # create local copy
$ pip3 install --upgrade numpy scipy matplotlib python-dateutil # might need sudo -H pip3 ...
$ python3 ./main_coronaSEIR.py
read data: 843103 bytes
r0: 5.20 r1: 1.30
doubling0 every ~3.4 days
day 60
Infected: 119363 0.2
Infected found: 1085 0.0
Hospital: 787 0.0
Recovered: 44584 0.1
Deaths: 17 0.0
data points for Italy: 40
first data: 2020-01-31
latest data: 2020-03-10 (you can update the data manually by running fetch_data.py)
$python3 ./world_data.py # to just plot current numbers
$python3 ./deaths_per_capita.py # might be a better measure than cases per capita
$ git pull origin master # update to latest version, might overwrite local changes
No GUI, you need to alter the script and run again to experiment.
Note: Make sure you got correct number for population and available ICU units for your country.
Please note that I would prefer to stick to the code style of camelCase variables and snake_case function/method names to better distinguish the two. I am aware of PEP8.
I would like to keep the monolithic main file with interactive parameters, model function and output all in one. Code is kept rather simple on purpose to allow for good readability even for beginners (I know, some parts are still very ugly).
Let me know if you would like me to add your project or fork to this readme.
Based on:
https://github.com/ckaus/EpiPy
https://scipython.com/book/chapter-8-scipy/additional-examples/the-sir-epidemic-model/
API/Data: https://github.com/ExpDev07/coronavirus-tracker-api https://github.com/samayo/country-json
Formulas:
https://hal.archives-ouvertes.fr/hal-00657584/document
https://institutefordiseasemodeling.github.io/Documentation/general/model-seir.html
Parameters:
https://www.reddit.com/r/COVID19/comments/fbdzc1/coronavirus_epidemiology_metaanalysis_and/
https://www.reddit.com/r/COVID19/comments/fbxk43/update_open_source_simple_coronavirus_modeling/
timeline https://www.reddit.com/r/COVID19/comments/fd6lmg/infectionfatalityratio_ifr_of_covid19_is/
https://www.reddit.com/r/COVID19/comments/ffzqzl/estimating_the_asymptomatic_proportion_of_2019/
https://www.reddit.com/r/Coronavirus/comments/f8k2nj/why_sarscov2_is_not_just_the_flu_with_sources/
gamma: Generation time (serial interval): https://www.medrxiv.org/content/10.1101/2020.03.05.20031815v1
also: http://www.cidrap.umn.edu/news-perspective/2020/03/short-time-between-serial-covid-19-cases-may-hinder-containment
Relationship hospitalized/ICU/death https://www.imperial.ac.uk/media/imperial-college/medicine/sph/ide/gida-fellowships/Imperial-College-COVID19-NPI-modelling-16-03-2020.pdf
r0 ~ 3.0 https://www.newscientist.com/article/2238578-uk-has-enough-intensive-care-units-for-coronavirus-expert-predicts/
r1 (thanks paus-5!) https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3539694
sigma: Infection occurs before symptoms (Drosten): https://www.medrxiv.org/content/10.1101/2020.03.08.20032946v1.full.pdf
Number of asymptomatics: https://www.zmescience.com/medicine/iceland-testing-covid-19-0523/
Model with AB0 blood type classes: https://www.researchgate.net/figure/An-example-of-a-two-class-age-structured-SIR-model-with-parameters-for-a-typical-human_fig3_259825206
some more in the source code
MIT license