Categories
Uncategorized

SIR model


SIR model voor virusverspreiding

Han Bäumer, 14 december 2021


Bij het verspreiden van een virus snappen we wel wat er dagelijks gebeurt, maar niet wat er in de toekomst zal gebeuren. Dat proberen we te voorspellen.

We weten alleen de verandering per dag.

Differentiequotient voor een dag is dan dus:

{\Delta y\over\Delta x}={y_n-y_{n-1}\over x_n-x_{n-1}}

Als we nu n het dagnummer laten zijn, dan geldt x_n-x_{n-1}=1

De formule is dan te herschrijven tot:

y_n=y_{n-1}+{\Delta y\over\Delta x}

Hiermee kunnen we dus de volgende dag uit de vorige berekenen! En de daaropvolgende. Etc. We moeten dan alleen weten hoe het aan het begin is en wat de verandering ieder dag is.

We bewandelen nu de omgekeerde weg van het afgeleide nemen.

Nu kun je een kort programma schrijven in Python dat het aantal geinfecteerden berekent:

for n in range(1,days): #n is een teller die gaat van 1 tot days
 I[n]=I[n-1]+nieuwe besmettingen #het aantal besmetten moet steeds met het aantal
#nieuwe besmettingen worden verhoogd.
 print("Dag: ", n, "aantal besmettingen: ", I[n])

Dit is het idee. Dit programma werkt nog niet, er moet nog e.e.a. worden toegevoegd.

SIR

We hebben te maken met twee veranderingen en drie groepen personen:

  • besmettelijken (S susceptible),
  • geinfecteerden (I infected) en
  • genezenen (R Recovered (of removed)).

De veranderingen betreffen besmetten en genezen. Bij besmetten gaat iemand van S naar I en bij genezen gaat iemand van I naar R. Hieronder zie je dat uitgewerkt in een programma. Daar moeten we even doorheen lopen. Het totaal aantal mensen blijft in dit model steeds gelijk. Personen verplaatsen zich slechts van het ene bakje naar het andere.

from matplotlib import pyplot as plt #om grafieken te kunnen maken

N = 17000000 #17 miljoen nederlanders
I0 = 5000*21 #aantal geinfecteerden bij de start
R0 = 2000000 #aantal genezenen bij de start
S, I, R = [N-I0-R0], [I0], [R0] # S0 is afgeleid van I0 en R0
Rnul, T, days = 0.07*21 , 21, 600 #R_0, T genezingstijd, duur van de simulatie
for n in range(1,days):
   b = Rnul/T*I[n-1]/N*S[n-1] #aantal besmettingen
   g = I[n-1]/T #aantal genezingen
   S.append(S[n-1]-b)
   I.append(I[n-1]+b-g)
   R.append(R[n-1]+g)

plt.plot(S,"m", label="S")
plt.plot(I,"r", label="I")
plt.plot(R,"g", label="R")
plt.legend()
plt.show()

Dit programma kun je kopieren naar https://www.tutorialspoint.com/execute_matplotlib_online.php en dan uitvoeren. Nu kun je ook dingen aan het programma veranderen.

Model

Waarom komt een model nooit uit? Waarom klopt een model nooit precies?

Bij modellen probeer je een versimpeling van de werkelijkheid te maken door verschillende details te vergeten (achterwege te laten). Deze versimpeling is nodig om de berekeningen of redeneringen te kunnen doen. Het gevaar bestaat dat je details die er wel toe doen (of op een gegeven moment belangrijk worden) bent vergeten.

All models are wrong, but some are useful

Verder gebruik je een model om dingen te voorspellen. Als er dan iets uit komt dat je niet wil, dan neem je maatregelen om dat tegen te gaan. Op dat moment komt de voorspelling van het model al niet meer uit! Je zult dan het model opnieuw moeten aanpassen om met de nieuwe situatie om te gaan.

Wat zit er niet in het model? Geen ruimte, geen sociale groepen, geen menselijk gedrag. Deze zaken worden in nieuwe modellen wel weer meegenomen.

Verder verandert de werkelijkheid nogal eens. Daardoor klopt het model ook niet meer. Een virus verandert, vaccins voorkomen geen besmettingen, vaccins zijn niet altijd werkzaam, sommige mensen kunnen niet gevaccineerd worden, etc. etc.

Plan-Do-Check-Act cyclus

Besturingsmodel dat erg veel voorkomt. Je hebt een plan, je voert het uit je kijkt of het werkt en past het dan aan.

Een goed voorbeeld hiervan:

Zo ook met het indammen of sturen van en virus-uitbraak.

Onvolledige informatie

Het model gaat uit van volledige wetenschap van de situatie. Maar die heb je niet. Je hebt hele gebrekkige gegevens. Niet alle besmetten kom je te weten: er zijn mensen die de ziekte heel mild doormaken, er zijn mensen die zich niet laten testen, de testcapaciteit kan onvoldoende zijn waardoor het zicht vertroebelt.

Verder zit er een vertraging in de informatie die je krijgt. Eerst moet iemand besmet raken, daarna moeten zich ziekteverschijnselen ontwikkelen en dan moet de persoon zich nog laten testen. Uiteindelijk kan bij een slecht verloop de patient ook nog in het ziekenhuis of op de IC terecht komen. Als je alleen kijkt naar ziekenhuisopnamen, dan ben je veel te laat en is onduidelijk hoe je correcties moet uitvoeren. Vergelijk het varen in een kano.

Referenties

  • Artikel FTM over vergelijking 2G 3G. Bekijk dit model en probeer te begrijpen hoe het in elkaar zit.
  • Artikelen over het model: https://www.davidketcheson.info/