A Community Coronavirus Model for Bozeman

This video explores a simple epidemic model for a community confronting coronavirus.

I built this to reflect my hometown, Bozeman MT and surrounding Gallatin County, with a population of 100,000 and no reported cases – yet. It shows the importance of an early, robust, multi-pronged approach to reducing infections. Because it’s simple, it can easily be adapted for other locations.

You can run the model using Vensim PLE or the Model Reader (or any higher version). Our getting started and running models videos provide a quick introduction to the software.

The model, in .mdl and .vpmx formats for any Vensim version:

community corona 7.zip

Update 3/12: community corona 8-mdl+vpmx.zip

There’s another copy at https://vensim.com/coronavirus/ along with links to the software.

58 thoughts on “A Community Coronavirus Model for Bozeman”

  1. Thanks for creating the model, including the major policy options, and critical limitations in the health infrastructure. This is a great example of an insightful model.

    I made some adjustments to share with colleagues in the Italian part of Switzerland to include important local conditions. For instance, We have an inflow of exposed (asymptomatic) in the form of 70,000 daily workers (from the North of Italy). Also, exposed individuals are contagious. Together, they add significant fuel to the reinforcing loop of contagion. Unfortunately, policy makers have decided not to close the border due to economic considerations. A policy that hopefully we can try to revert.

  2. Terrific description of the situation, the possible countermeasure, and how it all is connected over time.

    With an automatic translation service it would be of great benefit for citizens, as well as policy makers, business leaders to understand the complexity of the ‘corona virus dynamics’. Have you had any contact yet in that direction?

    I will share on my social networks, especially with a focus here in Saxony.

    Best from Dresden, and thanks a lot once again for your great work,

    Ralf

      1. Tom, I was thinking about using http://dotsub.com (there I have uploaded in the past several short videos and some of those have been translated by community effort to several languages).

        With a free account it would be probable to upload your video on Vimeo, transcribe, and translate it. As it is your video, I was not able to upload it. Otherwise, I would have started the translation process already.

        Let me know what you think.

        Best, Ralf

        PS.: The following is the trailer of the MOOC “u.lab – Leading From the Emerging Future” from its first run in 2015, https://dotsub.com/view/2b87ee80-d01c-4c27-b928-5f84f0056a9b – just to give an idea, how it could look like.

  3. Nice model and explanation! Would it be an idea to explicitly model Hospital Capacity as a stock and disaggregate the stock of infected by those who are seriously ill and those with mild symptoms?

    1. Absolutely. That would address at least two key points: severe cases are sick longer, and hospital capacity can be increased somewhat.

      1. Thanks for your quick reply. Can I extend his model for educational purposes? I notice that a lot of people struggle with the concept of exponential growth – they compare the spread of this virus with a regular flu or even compare it to statistics on road kills, despite this new outbreak being a fat-tailed distribution with unequal variance to those other processes, let alone the fact the system is strongly nonlinear. I figured that perhaps a compact SD model which shows the regular SEIR process coupled to the Healthcare capacity could help – it’s the lack of herd immunity and 10% of cases being referred to the IC that’s the real problem here! Having said that, did you check out Nassim & Yaneer’s short video on why ‘panic’ early on might be beneficial? (https://www.youtube.com/watch?v=e2Kga5HeAqk)

        1. Free to extend however you wish. Thanks for the link – I will check it out. I’m sick of people saying, “don’t worry, be happy, the flu kills far more people, in the long run we’re all dead…”

  4. Extraordinary work. Thank you for preparing this and for sharing the model.
    I’m circulating to colleagues here in Colorado, and beyond.
    From my own tinkering with the model (briefly) it looks like the behavioral risk reduction has a lot of power to change those hospitalization strain curves? IF so, then aggressive early social distancing is key to flattening the curve. Thanks again Tom.

    1. Definitely. Contact tracing and quarantine is important too, but out here in the semi-boonies, I don’t think we have much capacity for that. It’s up to us susceptibles to stay out of the system.

  5. Hi Tom,
    Love the model, with clear indiction which variables are suitable for policy. Video was great too. In the case of my own home town, NYC, we have already received our “N Imported Infections”, so the curves are playing out. I’ve made a Total Cases stock to compare with the data Gov. Cuomo reports daily, and changed some of the baseline parameters, e.g. Initial Pop = 11e6. Calibration of the model can fit the data, but only with unbelievably high values, e.g. R0~30. I’d love to use this model to *infer* the effectiveness of implemented policies, of course to anticipate the outcome.
    Rob

    1. R0=30 would be scary but also way outside the confidence bounds on the disease behavior. I had to use ~5 to fit Italy and Switzerland, and even that is on the high side. I think this must be a false signal from rapid expansion of testing and reporting lags.

      1. Very likely. One way to approximate this is to move the “Imported Infected” flow to the “Exposed” stock, and make both “Exposed” and “Infected” contribute to “Active Infected”. After doing this, recalibration gives R0~7.8. Still high, but closer to reasonable.

      2. Agree. Epidemiologists have several different ways to estimate Ro from the data, and for COVID-19 seem to be converging between 2 and 2.5.
        An Ro of 30 is very unrealistic — Measles has an Ro of 12-18, the highest of any infectious communicable disease

  6. Nice Model. Is there a way to perform a sensitivity study and list all the model parameters in decreasing order of their sensitivity, i.e. which model parameters have the greatest impact on reducing death rate?

    1. Yes – I haven’t had time, but I’ve been meaning to do that, and some Monte Carlo simulations. What would really help is a better mapping from specific interventions to the parameters – like how does handwashing compare to closing schools? I haven’t seen that in the literature though. I think some of the big social network models can do stuff like that, but they’re a little slow to get off the mark – presumably because it’s hard.

      I also started a back-of-envelope benefit/cost version. The cost of mortality for the US in the downside scenarios is about $10 trillion, which got my attention.

  7. Hi Tom! Thanks for the video.
    I tried building a similar SEIRD model in Stella Architect. Our results definitely share some similarities, which I am very happy about, meaning I am not completely off track. What I also tried to do is introduce two populations with different parameters as well as transmission from the one population to the other to account for travelling etc. trying to build different areas in array structures… I will see how it works out!

  8. Thank you for sharing this model.
    In my efforts to understand the model I couldn’t get my head around the way you are using infection duration in the recovering formula: Infected/Infection Duration*(1-Fatality Rate)
    Why aren’t you using a DELAY function ( times (1- Fatality Rate))?

    1. Stock/lifetime is the standard first-order delay formulation. If you inject a pulse inflow at time 0, the center of mass of the outflow will be at the lifetime. Using DELAY1 would be identical.

      The first-order delay does have the oddity that the mode of the outflow is at time 0, which is realistic for processes that work like radioactive decay. The infection/recovery process is probably higher-order, so you could model it with DELAY3 or similar. The delay order is an empirical question, though I don’t think it would have much of a policy implication.

      Anyway, this is how the standard SEIR model works.

      See also:
      https://metasd.com/2011/04/delay-sandbox/
      https://metasd.com/2019/10/aging-chains-erlang-distribution/
      https://metasd.com/2019/11/the-importance-of-fonfoo/

      1. By “center of mass of the outflow is at the lifetime” I mean that
        lifetime = integral( time*outflow ) / integral( outflow )
        with the integral taken from time 0 when the pulse is injected to time -> infinity, with time step -> 0.

  9. Greetings Tom,

    Excellent model! I am not understanding the Hospital Strain & Public Health Strain “Index” per day results in the graphs? Not certain on to how to interpret this index. Can you please clarify?

    For the Hospital Strain I would say Ventilator or Respirators would be the critical strain as this would be the best predictor to how many follow on deaths there will. Specific data for respirators can’t be found but ICU beds capability which will have respirators can be found in OECD. The respirator info was also published in the Imperial report.

    1. The “strain index” is the ratio of # of patients to capacity of the system to care for them. When that ratio is greater than 1, quality of care declines and fatalities rise (depending on your parameter choices of course).

      I didn’t have much data to go on at the time I built this, but a useful elaboration could now be made, I think.

  10. Tom,

    Thank you that makes sense!

    Yes understandable you didn’t have much data as stated in your video.

    Once again thank you.

  11. Tom, thanks for this, and thanks for posting the contribution from Jack Homer, too.

    Two questions (I could probably answer some myself, but “day jobs” are a thing, as you note elsewhere).

    First, have you tried to check the basic SEIRD performance against real data? I know Wuhan and Italy are bigger, but they are in the temporal lead: would this model fit their behavior at all?

    Second, I wonder about the aggregation level in the effects (hospitals, etc.) section.

    For one, this model computes Hospital Strain as the ratio of serious cases to Hospital Capacity, set to 100. By https://www.ahd.com/states/hospital_MT.html, I gather you have 83, which is close. Wouldn’t it help to disaggregate that into beds and ICU beds, both as stocks, and then model how full they are in normal situations and the dynamics of moving from BAU to a covid-19 scenario?

    For another, I gather there are a range of shortages hitting healthcare (the WORLD3 “can’t fix just one” problem?): beds, ventilators, PPE, staff, …. You can’t and shouldn’t model everything, but I wonder if beds, ICU beds, and ventilators are important as “capital” items and personal protective equipment (PPE) is important as representing all consumables. Staff is also an issue; I’ve heard calls to allow PAs and ARNPs function as MDs and to allow non-US-trained physicians to work without their 1-year US residency. Perhaps that’s a separable problem; first model the “infinite staff” case and then check staffing constraints.

    I seriously recognize the “day job” constraint and the speed of this virus; that’s why I’m only commenting and not offering any changes. I finally watched your very good video last night. I woke up this morning contrasting its message with some of the stories I read or see in the news (e.g., https://www.providence.org/lp/100m-masks, https://www.kuow.org/stories/field-hospital-going-up-on-shoreline-soccer-field) and wondered how much of the difference was due to Bozeman’s size and how much was due to the aggregation of the effect.

    1. Hi Bill – Good thoughts, as usual.

      I have done some fitting against data. It’s not satisfying without first modeling the testing and reporting process explicitly. Waste of time really, unless you have a lot of time to do it right.

      The hospital actually reports 86 beds – I think 83 is dated or something, but there are another 20 or so down in Big Sky, and a few more in clinics. Of course, existing utilization of those beds is something like 70%, so free beds are scarce. I used 100 mainly to have a very simple and optimistic number – which gets overwhelmed anyway.

      I suspect that our principal advantage is being remote, and therefore a couple doublings behind.

      Tom

  12. I’ve been watching Rachel Maddow’s take on all this. She seems to “get” a t least some classic SD concepts such as looking for and trying to make sense of patterns and delays. She has repeatedly mentioned that there’s been a three-week delay in Italy between reported infections and ICU / ventilator use, as I recall, and she seems to expect that pattern (being related largely to the virus) to repeat here and elsewhere. That might suggest one more stock in your main chain between I and the R/D pair–perhaps SI for seriously ill. Then one could see if her pattern appears in the model and use that to help test the fit, but I admit that your first paragraph is probably right.

  13. Hello Tom, and thank you again for this work.

    I´ve taken your model and added a few things, like the possibility to increase hospital capacity and the duration of social distance/quarantine policies for non-infected population.

    I´ve changed the parameters to reflect Lombardia, Italy situation and I´m planning to do the same for Argentina and Spain…I´m getting different results depending on the moment the quarantine is applied…(the model returns better results when the quarantine is applied around the highest point of infection rate) and the hospital capacity.

    Would it be ok for you to share some runs results and insights with the system dynamics community and social networks (facebook/linkedin)? I´m not sure if ´d like me to mantain your name in the model as it was modify. In either case I´ll mention that I took the model and the structure from you and just modified few things….whatever way you prefer…
    thanks!
    Best regards,
    Leandro Di Bartolo

  14. Hi it is a great job!! May i translate that to spanish for show it (with your credits for sure) during a webinar in latin america?

  15. There is a very good paper on the failure of Ro as a metric. What is your thought on using SD modeling to create a location specific Ro? For example in this article..identifying all the possible transportation networks, social clustering activities, with population densities..and creating a more finely tuned Ro based on that.

    https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3157160/

    For Ro. I’m now leaning more towards an SD model that can replicate this: https://graphics.reuters.com/CHINA-HEALTH-SOUTHKOREA-CLUSTERS/0100B5G33SB/index.html

    1. My recent post discusses r0 at some length: https://metasd.com/2020/03/steady-state-growth-sir-seir-models/ , including that paper.

      I think more granular models are helpful, also because they allow more policy experimentation. For example, is it better to close schools, or bars? (Moot point at the moment.)

      The big catch is data. I don’t think we have much idea how exposed Bozeman is to the outside world, for example, or how much our social density is lowered by our physical density.

  16. Tom, My name is Dave Brown, and I am an instructor in the JHU Whiting School of Engineering. I am also on the publications committee for the Journal of the International Test and Evaluation Association. We have an upcoming issue on M&S and T&E and would love to have an article on the COVID-19 modeling and test data. Are you interested, and can I talk more to you about this?

  17. Great job, I really appreciate your contribution to this discussion and showing the relation and impact of various factors.

    Something that I think it’s important to include as a function of the behavioral policies is the impact to the overall economy, perhaps just a simplistic model (as that itself is complex enough). But my guess is that behavioral policies are only acceptable up to some level of economic performance. How long is it sustainable before personal needs surpass societal benefits?

    Also, is somewhat hard to quantify what improving behavioral policies by ‘a third’ means? Is it letting kids go to school? Opening restaurants once a week to try to keep them afloat? Do we need better strategies to isolate the vulnerable population instead of the general population? I too have the benefit of staying employed from home, but we are a small minority. At what point does a failing economy results in a worse case positive feedback loop?

    1. Agree – I actually have another version that has economic accounting and an “economic fatigue” feedback to social distancing compliance. I just haven’t had a chance to prep it for distribution.

  18. Thank you for a very informative model and clear explanation. I work in healthcare in New Zealand and our government has put in place very strong behavioural policies as well as continuing to shore up our existing public health capability (which is mostly government owned and funded). We have also started quarantining and enforcing isolation of all people coming into the country. These are hugely costly policies but are borne out by your model.
    A few concerns remain of course … as Daniel Alvarez says above, how do we balance the economic fall-out and how does the country recover. Also, if we have successful epidemic management the population remains susceptible and so some of the harsh public health measures will have to remain in place at least until a vaccine is developed.
    Great work and I will continue to follow your further developments.

  19. Thank you for this model. Would love to share it in my social network in Singapore.
    This is a great model and is part of another systems in play. As the strain in hospital increase, the capability to handle the existing chronic diseases go down or as the public awareness goes up, the fear of contracting covid19 goes up and they avoid the hospitals in their regular treatment, the rate of chronic disease being uncontrolled goes up. There could be people who may end up not going for regular diabetic check or medication until it was so bad they may need amputation. As the public health measures to impose social distancing goes up or stay too long, the behaviour of people may change. They may dashed out to party or shop once the lockdown loosens. Look forward to a part 2 from expert like you!

  20. Hi Tom,

    Thanks for sharing.

    If I make two infection duration: “infection duration for deaths” and “infection duration for recovered”.
    Does this means that a variabel “Initial Uncontrolled Transmission Rate” is divided by “infection duration for recovered” instead of “infection duration for deaths” ?

    1. I assume you’re referring to the relationship between R0 and the transmission rate. This post https://metasd.com/2020/03/steady-state-growth-sir-seir-models/ has a fuller treatment.

      I assume you’re thinking of something like the following. A fraction F of infected people die, so there are two pathways in parallel: people who get sick and recover, and people who get sick and die. In that case, the average residence time in the two processes is F*deathDuration + (1-F)*recovDuration. However, you might want to also adjust for the fact that people who die are likely hospitalized first, and therefore have few social contacts, so they contribute much less to transmission.

      You can avoid a lot of these mean-duration calculations if you give up on computing R0 analytically. It gets complex when you start to have a lot of infection states, and it’s not really worth the trouble. It’s simpler to make the transmission rate a parameter calibrated to data.

  21. Hi Tom,
    Big thanks for you this model explanation.
    I am confusing about “import time”.
    Let’s say the first case was January 21st,
    and estimated incubation time was 2 days.
    Does it mean that “import time” = January 21st, or January 19th?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.