BehaviourComposer: ignore everything before this.
January, 2014 version.
Here we will model the spread of a disease by building interactions between individuals rather than modelling mathematically with variables that represent entire populations. This is variously called Individual-based modelling (IBM) or Agent-based modelling (ABM).
In the first part (1-6), you will build a model equivalent to the SIR model (Susceptible, Infected, and Recovered). Next we model vaccination and explore the influence of social heterogeneity on the spread of diseases. In the final part of the practical you'll model a vaccination policy that targets super-spreaders. This would be very hard to model analytically with equations that model populations.
Please go through the instructions carefully, step-by-step. There might be slight differences depending upon the web browser that you are using. You can use the browser's back and forward buttons to undo and redo. You can refresh the page to restart everything (only the open tabs will be lost -- your model will be restored).
Everything you'll need to construct the model is in this page. If you want to explore other behaviours visit the library of micro-behaviours.
You'll be constructing the IBM using a tool called the Behaviour Composer that you access via a web browser. The software enables you to build a computer model by pulling together (or composing) blocks of computer code called micro-behaviours - web pages that contain NetLogo code and explanatory text.
- First, you might find it easier to go through this guide using the split screen functionality. Scroll down to the bottom of this page and click on the check box labelled Split screen between this panel and everything else.
- Now click on the INITIAL MODEL button and select Replace current model from the menu. This will load a model containing only a population of susceptible individuals and some technical machinery. This model has no infected individuals nor a mechanism for spreading an infection. You'll build on this initial model in the steps below.
Explore the initial model
The micro-behaviours you have just brought into the Compose tab of the Behaviour Composer can be compiled into a computer program using the Send model to NetLogo tab. Clicking this tab causes the BehaviourComposer to strip the NetLogo code from each micro-behaviour web pages and combine the code into a single computer program. The program is then sent to the NetLogo software that is installed on your machine.
- Click on the Send model to NetLogo tab in the Compose Tab.
- Once the code has been sent to the NetLogo application click on the SETUP button to initialise the model.
- Change the slider labelled the-initial-susceptible-population and click on the SETUP button again to see what happens.
- To change the slider by small increments use the mouse to click on the slider to the left or right of its current value.
- Only the Person prototype is an agent within the model, the others contain micro-behaviours that support the model or create graphs and sliders.
Create some infected individuals
- Open the Initial infection cases micro-behaviour web page (by clicking this link) and add it to the Observer prototype by:
- Click on the button at the top of the page labelled Initial infection cases
- Select the menu item Add to a Prototype which will take you to the Compose tab
- Click on the upper area of the prototype called Observer to drop the Initial infection cases micro-behaviour onto the Observer prototype
- Click the Send model to NetLogo tab in the Compose tab and you'll see an infected individual displayed in yellow after clicking the SETUP button.
- It is important that Infect initial cases be added to a prototype with only one instance (e.g. Observer) since it selects the-initial-infected-population number of individuals from the set of Persons and sets their state to infected and hence should only happen once.
Create a social network
Rather than model perfect mixing of individuals within the population we will model a network where each person has a limited number of contacts. Here we model each individual to have the same number of potential contacts, called acquaintances. Diseases can be transmitted between individuals that are acquaintances in our model.
- Open the Constant social network micro-behaviour web page and add it to the Observer prototype (the position in list does not matter). This gives every individual the same number of acquaintances.
- As before, go to the Compose tab and press Send model to NetLogo then click the SETUP button in NetLogo. You should see grey lines that represent the acquaintance relationships between individuals.
- You may wish to take some time to read the micro-behaviour pages you add to your model. The micro-behaviour you just added has important information about how the NetLogo code works e.g. see the section "How this works" at the bottom of the page.
Spread the infection
- Add the Contact acquaintances micro-behaviour to the To do when infected prototype.
- Now for one of the more tricky actions (at least to explain) - adding a micro-behaviour to a list inside another micro-behaviour:
- Click the Contact acquaintances micro-behaviour you just added and select Open As Tab from the menu
- Inside the Contact acquaintances micro-behaviour page you will see the Possibly become infected micro-behaviour - click it and select Customise from the menu that pops up.
- Now open Change colour of link with infector micro-behaviour, click on the button at the top of the page and select the menu item Add to a list.
- Go back to the Possibly become infected micro-behaviour and click on the Behaviours list to add it to the list inside this micro-behaviour. (You should see something like the screenshot below.)
Run your model from the Compose tab, click SETUP then GO and you should see the infection spread. The links that transmitted the disease should turn red because you added Change colour of link with infector.
The model is programmed to stop when either no one is infected or no one is susceptible. You can manually stop the simulation by either pressing the PAUSE button or pressing GO a second time.
- Contact acquaintances works by multiplying the value from the-encounter-fraction slider with the number of acquaintances to determine the individual's contact rate. Since at this point we are modelling a population where every individual has the same number of acquaintances the contact rate is a constant and is very similar to the aggregate SIR model's contact rate. If the value is not an exact integer then the fractional part is used to determine the odds of contacting an additional person. E.g. a contact rate of 1.2 will contact one acquaintance 80% of the time and two 20% of the time. The odds of a contact between an infected and susceptible person resulting in a new infection is determined by the-infection-odds slider.
- Add the Schedule recovery micro-behaviour to the To do when infected behaviour list in the Compose tab.
- Run your model, click the SETUP and GO buttons.
- The Schedule recovery micro-behaviour models recovery by adding three micro-behaviours that change the state, change the display colour, and stop contacting acquaintances. Of course, real people will continue to contact people after recovery but it will have no effect on the spread of the disease.
- In reality when someone is infected there is, of course, no mechanism that sets a timer for when the person will recover. Since we are modelling recovery as a process that does not depend upon any interactions or later events (e.g. taking a drug) this is a simple way of implementing recovery that is equivalent to more detailed modelling.
- Note that graphs are being produced when you run the model - you may need to scroll down or move the divider to see it.
Next we model a public health authority with only a limited amount of a vaccine.
- Add the Randomly vaccinate a proportion of the population and log event micro-behaviour to the Public Health Authority prototype.
- Run your model and experiment with different values. Even when all the parameters are left unchanged do you see different outcomes for different runs?
- Depending on the value set on the-fraction-vaccinated slider a random fraction of the population will be vaccinated. This is modelled as setting the state to vaccinated (instead of susceptible) and changes the colour used to display the individual to green.
Build a different social network
In reality, individuals differ in the number of other individuals with whom they are likely to be in infectious contact. Here we shall investigate how different networks can affect the spread of a disease (note, the average number of contacts will remain the same).
- Go to the Compose tab and click on the Constant social network micro-behaviour and select Inactivate from the menu.
- Add the Power law social network micro-behaviour to the Observer prototype.
- Add the Size proportional to number of acquaintances micro-behaviour to Person. Inactivate the Small size micro-behaviour.
- Send the model to NetLogo and click SETUP a few times to see a variety of starting conditions.
- The Power law social network micro-behaviour implements a power law distribution of the number of acquaintances each individual has i.e. a some have many acquaintances while most have few.
- The power law distribution approximates the situation in sexually transmitted diseases such as HIV where some individuals have many sexual encounters while others have very few or none.
Using the model to study different approaches to vaccination
In the Public Health Authority
prototype there is a micro-behaviour called Vaccinate random proportion of population
which, as the name suggests vaccinates a proportion of the population randomly so that these individuals do not become infected. This behaviour can be contrasted with the
Vaccinate most highly connected individuals
micro-behaviour (add it to the Public Health Authority prototype!) to see the effect of targeting vaccination towards the most connected individuals in the network.
Conduct three sets of experiments to allow us to contrast targeted and random vaccination in the different networks:
- Random vaccination of the constant social network
- Random vaccination of the power law social network
- Targeted vaccination of the power law social network
Make sure the slider settings are:
- initial susceptible population = 100
- initial infected population = 1
- infection odds = 0.1
- encounter fraction = 0.25
- fraction vaccinated = 0.2
- average recovery time = 20
Record the number of recovered individuals when the simulation stops i.e. when there are no longer any infected people and the pathogen has stopped spreading. Do this 5 times for each experiment.
The table below summarizes what you need to do to the micro-behaviours for each experiment:
| Micro-behaviours (that need activating/inactivating):
|| Constant network and random vaccination
||Power law network and random vaccination
||Power law network and targeted vaccination
| Constant social network
| Vaccinate random proportion of population
| Power law social network
| Vaccinate most highly connected individuals (targeted vaccination)
Performing a parameter sweep with the BehaviorSpace
Once you've created a model, and experimented with it for a while, you may want to explore its parameter space
in a more systematic and thorough manner. We've created a quick guide to help you learn how use the BehaviourSpace
which is part of the NetLogo application.
Time permitting there are many other questions you may wish to explore with your model. You can use the library of micro-behaviours for modelling epidemics and interventions. Examples include:
- What fraction of targeted vaccinations are equally effective as the fraction of non-targeted vaccinations?
- What if the targeting introduces a delay in the distribution of the vaccine? What is the maximum delay where targeting is still helpful?
- What effect do the different vaccination policies have on the duration of the epidemic?
- What is the minimum amount of vaccine that would reduce the odds below 1% of an epidemic spreading to at least 10% of the population?
- How do the dynamics change if you change the average number of acquaintances per person?
- How different would your conclusions be if the disease had different characteristics? E.g. if the infection had a very long duration but low odds of transmission?
- How would other social network distributions affect the results? Experiment with the normal distribution behaviour.
BehaviourComposer: ignore everything after this.