File Exchange

image thumbnail

fitVirusCOVID19

version 4.0.6 (3.18 MB) by milan batista
Estimation of coronavirus COVID-19 epidemic evaluation by the SIR model

838 Downloads

Updated 03 Apr 2020

View License

The function fitVirusCV19 implements the susceptible-infected-recovered (SIR) epidemic model for the estimation of epidemy evaluation. It is assumed that the model is a reasonable description of the one-stage epidemic. In particular, the model assumes a constant population, uniform mixing of the people, and equally likely recovery of infected. The model is data-driven, so its forecast is as good as data are. The forecasting change with new or changed data. The officially declared outbreak of the epidemic and the outbreak of the epidemic as it reported by the program have nothing to do with each other. The program indicates the start date when the data is sufficient to calculate the initial approximation.

The parameters of the model are obtained by minimization of the objective function, which is the sum of squares for residuals of values and sum of squares for residuals of values differences. The weights of summands are selected automatically. Optimization Toolbox function fminsearch is used to calculate optimal values of unknown model parameters. If the calculation fails then only data are plotted.

The contribute contains data for coronavirus for Argentina, Austria, Belgium, Brazil, Canada, Croatia, China, Czech Republic, Denmark, Germany, Hungary, France, India, Indonesia, Iran, Italy, Japan, Lombardia, Netherlands, NY State, Norway, Poland, Portugal, Slovakia, Serbia, Slovenia, South Korea, Spain, Switzerland, UK, USA and data for outside of China (up to 28.Mar.2020)

On the epidemy evaluation graph, regions color separate epidemy phases (these are not standard but arbitrarily chosen for convenience):
red - fast growth phase
yellow - transition to steady-state phase
green - ending phase (plateau stage)

Results are saved in structure res (see function fiVirusCV19 header). Optionally the results may be printed by

fitVirusCV19(@getData,'prn','on')

When regression fails then only data are plotted. Population size is limited to 12 Mio. You can change the upper limit by name/value pair:

fitVirusCV19(@getData,'nmax',nmax)

Use this option if the final prediction is too high or exceed the country's population.

Function analyseCV plots a graph of evaluation of R0 (basic reproduction number), Cend (epidemic size), N (initial susceptible population size). To analyze data for country XXX from 10 days of epidemic onward use

analyseCV19(@getDataXXX,10)

DISCLAIMER: Software and data are for education and not for medical or commercial use. The model may fail in some situations. In particular, the model may be inadequate; the model may fail in the initial phase and in when additional epidemic stages or outbreaks (not described by SIR model) are encountered. Use it at your own discretion.
The data are only for demonstrating the operation of fitVirusCV19. FitVirus and presented demo data are only for educational and academic purposes and should not be used for medical purposes and in commerce. They are provided as is and any express or implied warranties, including but not limited to implied warranties of merchantability and fitness for a particular purpose are disclaimed.

Source of data
https://ourworldindata.org/coronavirus-source-data.
https://www.worldometers.info/coronavirus/coronavirus-cases/#case-tot-outchina
https://en.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic_by_country_and_territory
An actual source of data is for each country reported in the corresponding getData function.

NEW: importData function read and generate data from ourworldindata data file.

A more detailed description can be found in
https://www.researchgate.net/publication/339311383_Estimation_of_the_final_size_of_the_coronavirus_epidemic_by_the_SIR_model
Examples can be found in
https://www.researchgate.net/publication/339912313_Forecasting_of_final_COVID-19_epidemic_size_200318

Cite As

milan batista (2020). fitVirusCOVID19 (https://www.mathworks.com/matlabcentral/fileexchange/74658-fitviruscovid19), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (43)

It requires fminsearch function either from Optimization or Statistic Toolbox. Symbolic Tbx is optional because fitVirusCV19 has a function to calculate lambertw .

Does anyone was able to run it in Octave ? I seems to get stuck inside ode45() and it never terminates.

Anyway, for Matlab it requires the Optimization, Symbolic and Statistics Toolbox

No, N is not the country's population. N is a population composed of susceptibles (S), infected (I) and recovered (R). And the cases in the diagram are I+R. It is assumed that N=S+I+R=const. So N is approximately equal to the initial size of susceptibles because the initial number of infected is small. And this is, of course, one of the unknowns of the model (otherwise we could collect susceptibles and put them into quarantine). When there is no quarantine then N can increase every day (you may have a new local outbreak inserted from outside and thus N increase), with quarantine it steadily becomes a constant i.e. with quarantine the assumptions of the model are more fulfilled and thus the model becomes more suitable for forecasting (you obtain the same curve every day).

Dear Milan

Great work! There is something I am missing here, though. N is the population of the country, right? In all of your examples N is significantly lower than the actual population. Why is that? Thanks in advance.

Weights are not ment to be plotted (these are just two numbers). You can see their values on print, or you can set their value as described in readMe.m in folder CV19.

Hey Milan
Can you please describe or how to plot the weights (w1 & w2) used on each simulation?
Thanks

dong gretch

Thanks for the explanation. will consider trimming

As said in the description, the regression can fail especially in the early stage of the epidemic or if there are more outbreaks. The model is not adequate for such situations. Sometimes trimming of initial data improve regression conditions but sometimes not.
The updated data for various countries are available at the links listed above.

dong gretch

Hi. I got this error after I updated the ow_getDataPhilippines for Philippines. It says
Fail to obtain parameters for Philippines.
ini: beta = 1.02974 gamma = 0.686495 N = 5333.72 I0 = 1.78765
calc: beta = 0.00876042 gamma = -0.267236 N = 44594.5 I0 = 83.4033

dong gretch

Any updated get data for Philippines?

dong gretch

Hi it says "Fail to obtain parameters for Indonesia" how to correct pls

Ayad mhamed

Ayad mhamed

merci pour votre contribution 🙂

Thank you!

milan batista

Just delete it. It is Matlab export of Report... to MS Word .

Vale

I can´t open the report named as '~$portAll200327.docx'

Thank you, Mr. Milan Batista for updating Japan. Very much apreciated.
If it is not troubling you, I hope that you update the oceanian country such us Australia, South East Asia such Singapore, East Asia such as Taiwan too.
Sorry to ask you so many.
Hope that you are in health.

Very nice work, including on the extensive list of retrieval functions!

I am suggesting the addition of explicit limitations, as well as some graphing and presentation items, and will communicate with the author these suggestions.

milan batista

I add lamberw function for those who don't have SMTbx. Please test the program. I also add the importData function which generates input function from ourworldindata's total_cases file. (save csv as xlsx first !). These data functions begin with ow_getDataXXXX.

Hi, it requires also "'lambertw' requires Symbolic Math Toolbox."

Dwina

thank you Mr. Milan
I hope to find update for Indonesia

Dwina

thank you for your update, Mr. Milan.
I wonder if you can add egypt data too

milan batista

The officially declared outbreak of the epidemic and the outbreak of the epidemic as is indicated by the program have nothing to do with each other. The program reports the start date when the data is sufficient to calculate the initial approximation.

The second bar graph is not a cumulative but a daily increase in infections. The data used are mostly from Wikipedia.

Sir, can you please guide as to why initial date for some of your analysis was chosen differently, for example in the getDataIndia(),
2020/03/03 is the model start date, however COVID-19 started on 30-Jan-2020 in India.
Second query is regarding discontinuity in cumulative case column. The cases occurred on different dates, however same is not reflected in getData files. Will you please guide and comment on this?

Great work.

thank you for your update, Mr. Milan.
I wonder if you can add Japan, Australia, New, Zealand data too.

thank you for the update,Mr.Milan. very much appreciated

thank youuu so much Mr.Milan for having the data for Indonesia. highly appreciated. thank you so so much. i will follow the data everyday. please do keep updating (for i know nothing about programming and computer) thank you so much and i'm looking forward to download your latest data everyday. keep up the good work and stay healthy, Mr.Milan. God bless

milan batista

The new upgrade contains data for Canada (thanks to Remy Boisse), Indonesia (thanks to Maldiku Servinu) and Serbia.

thank you so much Milan for the help. i'm actually really new at this matlab program. so first,must i download the application and install matlab to my computer?
so sorry for asking such a really basic question, i'm just trying to help people around me to get an insight of what is going on

Remy Boisse

Very nice program, I made a getData function for Canada if any of you are interested.

https://drive.matlab.com/sharing/d37a7946-bb2f-4ee5-a7b9-01527f7c3814

milan batista

To Maldiku. Just enter data for Indonesia from
https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Indonesia
in some getData function and run the program.

milan batista

There is an option (see the function header) to increase the number of iterations if the output code is 0, but if the graph is good I would leave that option alone. Namely, error condition 1 can be obtained by increasing the no. of iterations or we increase the tolerance of the solution. As the number of iterations increases, the solution may begin to diverge.

hello there,Milan,this is really interesting and i really really appreciate what you've done here. really help us to estimate or predict this pandemic.
would you mind making for my country Indonesia as well,please? would really appreciate it so so much. thanks

Printing results, this outputs "Exit condition (1=OK)"; should that be "0=OK"?

milan batista

OK I see, you didn't run my code but Joshua McGee version of code.

excellent work, but when I run the code it gives me this error:
Unrecognized property 'PreserveVariableNames' for class
'matlab.io.text.DelimitedTextImportOptions'.
Error in fitVirusCV19v3 (line 132)
opts.PreserveVariableNames = true;

Updates

4.0.6

Change image

4.0.5

update regression algorithm. By default, the solution with min N is selected (optimistic approach). Add Iceland and Sweden. Update data (2.4.2020)

4.0.4

Change image

4.0.3

More minor changes

4.0.2

Minor corrections

4.0.1

Add the check data folder (thanks to Rolf Boelens). Add two utility programs in folder PLA (thanks to Patrick Anderson)

4.0.0

Major revision. Add flambertw for those who have no SMTbx. Add importData function.

3.0.6

Update description

3.0.5

Update description

3.0.4

Update description

3.0.3

Update analyseCV19

3.0.2

More minor corrections

3.0.1

Minor corrections

3.0.0

Add analyseCV19. Update data, add Czech Republic, Japan, Slovakia

2.0.05

Change image with today predictions in Lombardia

2.0.04

Improve initial data trim. Add data for Brazil, India, and Poland.

2.0.03

Correct description

2.0.02

Add address of data source

2.0.01

Add data for Canada (thanks to Remy Boisse) , Indonesia (thanks to Maldiku Servinu) and Serbia. Upgrade description.

1.0.14

Update description

1.0.13

Update description

1.0.12

Update data. Add Hungary and NY State

1.0.11

Correct data

1.0.10

Add new data

1.0.9

Add data for NYState. Add the option for controlling the number of iterations.

1.0.8

Add data for Denmark and Norway. Data are now automatically trimmed. Weights are now selected automatically. Minor corrections.

1.0.7

Delete duplicate examples

1.0.6

Minor corrections. Add data for Croatia and UK

1.0.5

Correct graphs

1.0.4

Minor corrections

1.0.3

Correct description

1.0.2

Improve print and initial guess function. Add data for Lombardia.

1.0.1

edit description

MATLAB Release Compatibility
Created with R2020a
Compatible with any release
Platform Compatibility
Windows macOS Linux

fitVirusCV19_v07_v5

fitVirusCV19_v07_v5/CV19

fitVirusCV19_v07_v5/PLA

fitVirusCV19_v07_v5/data

fitVirusCV19_v07_v5/data checked mar26

fitVirusCV19_v07_v5/importData_ourworldindata