Furor Teutonicus blog | over | volg | teuto | lyme | archief | doneer | todo
🕰️
  ⬩  
✍️ Evert Mouw
  ⬩  
⏱️ 4 min

Netwerksimulatie: lockdown helpt niet snel tegen virusverspreiding

Introductie

Zijn lockdowns een beetje efficiënt om de verspreiding van virussen te vertragen? Zo’n virus springt van persoon naar persoon omdat je contact hebt. Je komt in elkaars buurt of in dezelfde binnenruimte. Het contact kun je beperken, maar hoeveel moet je het beperken voordat het een goed effect gaat hebben? Daar is veel discussie over. De bekende wetenschapper Ionnidis, die ook voor de WHO onderzoek doet, vond het effect van lockdowns wat tegenvallen.

Voor de lol heb ik een extreem simpel speelgoedmodelletje gemaakt om het effect van contactbeperking op de verspreiding van het coronavirus te bekijken. Personen en contacten kun je nabootsen (simuleren) met een zogenaamde “graaf”, in het Engels “graph”. Grafen worden in de informatica veel gebruikt. Ze bestaan uit nodes, de bolletjes, en edges, de lijntjes die de bolletjes met elkaar verbinden. Hieronder zie je een visuele representatie van zo’n graaf.

De rode X bolletjes stellen personen voor die besmet zijn.

Implementatie

Sommige mensen zitten altijd thuis, en anderen ontmoeten tientallen mensen op een dag. In mijn simulatie hebben de nodes wisselende hoeveelheden contacten; gemiddeld zijn het er veertien. Dat getal heb ik uit een studie gehaald: Social Contacts and Mixing Patterns Relevant to the Spread of Infectious Diseases (2008).

Although mixing patterns are known to be crucial determinants for model outcome, researchers often rely on a priori contact assumptions with little or no empirical basis. source

In het plaatje hierboven zie je ook een soort groepjes. Ik heb ingesteld dat de helft van de contacten (nodes) verbinding maakt (edge) “in de buurt”, dus met een node die bijna hetzelfde volgnummer heeft. De andere helft van de verbindingen (contacten) wordt willekeurig over de hele populatie gemaakt.

Je kunt besmet worden door een contact. De kans dat je besmet wordt is gemiddeld niet heel groot. Volgens Rajiv Bhatia is die kans maar 1 op 3836 (0,000261). Dat is mede zo laag omdat je de meeste contacten met mensen hebt die niet ziek zijn. Ik heb dat getal als b in mijn code gezet, maar als je in one pass snel de spreiding wilt simuleren schiet dat niet op, dus ik vermenigvuldig het met een “booster”.

In mijn simulatie kan ik ook contacten verbreken. Dan wordt bijvoorbeeld 20% van de contacten verwijderd, op willekeurige basis.

Vraag

Als je het aantal contacten met x% vermindert, hoeveel effect heeft dat dan op de besmettingen?

Resultaat

Bij n=5000 (dus vijfduizend nodes of mensen) met een enkele pass en een boost van 100 krijg ik dit resultaat:

contact [%] besmet [n] besmet [%]
10 139 2,8
20 226 4,5
30 323 6,5
40 420 8,4
50 467 9,3
60 534 10,7
70 559 11,2
80 587 11,7
90 615 12,3
100 601 12,0

Tabel: Resultaten bij n=5000.

Bespreking

Het valt op dat het verschil tussen geen contacten verbreken (100% contact) en de helft van de contacten verbreken (50% contact) nogal klein is; het verschil in het aantal besmettingen is maar ca. drie procent. Daarna gaat het wel sneller. In dit model moet je dus een echt zware lockdown toepassen om significant effect te sorteren. Als dit model de werkelijkheid weerspiegelt, dan zou dat betekenen dat de kosten van een effectieve lockdown erg hoog zijn (cultureel, maatschappelijk, economisch, en qua gezondheid).

Nu is het niet zo dat we kunnen aannemen dat dit speelgoedmodelletje ook maar in de buurt komt van een realistische modellering. Wel is het zo dat professionele modellen ook vaak beroerde voorspellende waarde hebben getoond in het afgelopen jaar rondom COVID-19. Problemen met modellen zijn inherent: het is een simplificatie van de werkelijkheid en het hangt aan elkaar van aannames. De uitkomsten zijn dus hoogst afhankelijk van de vaak impliciete aannames die gemaakt zijn bij het ontwerp. De meeste modellen gebruiken formules en matrixberekeningen. Dat geeft de schijn van exactheid en wetenschappelijkheid, maar ik vermoed dat dikwijls intuïtie beter werkt. Modellen zijn wel geschikt om mee te spelen, zodat je nieuwe inzichten en gedachten kunt opdoen. Maar dat resultaat wordt meestal alleen verkregen door de makers van het model, die er zelf mee stoeien.

Mijn modelletje gebruikt een netwerkmodel geïmplementeerd met pointers, als graaf, en zou daardoor mogelijk wel iets kunnen zeggen over het gedrag van netwerken die “redundante” verbindingen hebben. De spreiding van informatie of virussen in zo’n netwerk wordt weinig gehinderd door verbindingen (contacten) te verbreken. Het netwerk is robuust. Mogelijk geldt hetzelfde voor netwerken van menselijke contacten. Dat zou kunnen helpen verklaren waarom lockdowns maar beperkt effect hebben.

Technische details

Het model is geïmplementeerd in C met behulp van een struct en pointers. Ik werkte op mijn Arch Linux installatie. Om enkele beginvariabelen in te stellen maak ik gebruik van een simpele #define die met een sed vanuit een script gewijzigd kan worden. Daarna is het een kwestie van hercompileren; dat gaat zo snel dat het de moeite niet waard was om verder nog moeite te doen om het “netter” te implementeren.

gcc -Wall -lm virusimnet.c -o virusimnet

De executable maakt ook een .dot bestand aan, dat bedoeld is voor Graphviz.

dot -Tpng virusimnet.dot -o virusimnet.png

Behalve een .dot wordt ook een .tsv bestand gemaakt; een tabgescheiden waarden bestand. Dat is direct te openen met een spreadsheetprogramma zoals Gnumeric.

Zie verder de broncode.

Referenties

Een screenshot van een stukje van de code.

Deze blogpost werd in december 2022 overgezet van WordPress naar een methode gebaseerd op Markdown; het is mogelijk dat hierbij fouten of wijzigingen zijn ontstaan t.o.v. de originele blogpost.