How disease risk awareness modulates transmission: coupling infectious disease models with behavioral dynamics
Code for the preprint https://t.co/cwj59tO9XP?amp=1
𝗧𝗶𝘁𝗹𝗲: How disease risk awareness modulates transmission: coupling infectious disease models with behavioral dynamics.
𝗔𝘂𝘁𝗵𝗼𝗿𝘀: Jaime Cascante-Vega, Samuel Torres-Florez, Juan Cordovez, Mauricio Santos-Vega
𝗔ffiliation: Grupo de Biología y Matemática Computacional (Universidad de los Andes, Bogotá D.C. Colombia)
python 3.7
pandas
numpy
scipy
networkx
python-louvian
- Make sure to have dependencies installed
- Clone our repository
https://github.com/biomac-lab/Epidemiology_behavior_dynamics.git
- Create networks
- Simulate (may take a lot of time!)
- Generate figures
In this investigation, we account for three different types of networks where we ran simulations on: Scale-free, Watts-Strogatz small world and grid topologies. To create these networks that are used in simulation, you need to define the number of nodes (n) with --num_nodes <n>
. If not, it is set to n=1000 automatically. Hence, if you want to create all the networks specify --all True
. To do this, run:
python models/create_networkxs.py --num_nodes 1000 --all True
Conversely, if you want to create a specific network (say scale_free
, small_world
or grid
) with a given number of nodes (n), set --specific_network <network_name>
. To create a scale-free network with 5000 nodes, run:
python models/create_networkxs.py --num_nodes 5000 --specific_network scale_free
In order to run a simulation, a combination of the infection probability (beta) and awareness (sigma) must be given. This combination are specified on the files beta_search.csv
and sigma_search.csv
located on the run/param_search
folder. Each file will contain a row with the parameter value and a key for saving the result (as shown below). We test the model on an interval between 0-1, this means the files <>_search.csv
contains values in the range of 0 and 1 with space intervals of 0.02 as decribed below:
key,value
000,0.00,
002,0.02,
.
.
098,0.98,
100,1.00,
The default setting for sigma_search.csv
are:
key,value
100,1.00
070,0.70
050,0.50
And for beta_search.csv
are:
key,value
060,0.60
070,0.70
Besides, the other entries to the model are the network_type
, the network_name
(output name after creating the network(s)), the type_sim
which may be specified as global
or local
, the number of iterations n_iters
(20 by default), and the length of simulation given by max_time
which is set to 150 days. If you want to change the number of iterations (iters), add --n_iters <iters>
to the command. To change the length of simulation (days) add --max_time <days>
. The execution is then: python run/run_sims.py --network_type <> --network_name <> --num_nodes <> --type_sim <>
.
For running simulations over a scale-free network with 1000 nodes in both information transmission scheme (as shown in the paper)
python run/run_sims.py --network_type scale_free --network_name scale_free_1000 --num_nodes 1000 --type_sim local
python run/run_sims.py --network_type scale_free --network_name scale_free_1000 --num_nodes 1000 --type_sim global
For running simulations over a scale-free network with 5000 nodes in both infomation transmission scheme (as shown in the paper)
python run/run_sims.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_sim local
python run/run_sims.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_sim global
For running simulations over a small-world and grid network with 1000 nodes in both infomation transmission scheme (as shown in the paper)
python run/run_sims.py --network_type small_work --network_name small_work_1000 --num_nodes 1000 --type_sim local
python run/run_sims.py --network_type small_work --network_name small_work_1000 --num_nodes 1000 --type_sim global
python run/run_sims.py --network_type grid --network_name grid_1000 --num_nodes 1000 --type_sim local
python run/run_sims.py --network_type grid --network_name grid_1000 --num_nodes 1000 --type_sim global
python run/run_ode.py
In order to analyse how the community structures (i.e. clusters or hubs) affected infection and behavior, several initial conditions are tested. To generate this initial conditions for a network with 5000 individuals, run:
python run/init_conditions/create_init_conditions.py --num_nodes 5000
Each iteration of the simulation records the state of each invididual node and is saved in a .txt
file. You will need to specify network_type
, network_name
and the type_sim
as mentioned above. The infection probability beta
and awareness sigma
are also required. The number of checkpoitns to be saved is 8, however you can change it by addind --num_checkpoints <num>
to the command. If you want to change the number of iterrations (iters), add --n_iters <iters>
to the command. To change the length of simulation (days) add --max_time <days>
. The execution is then: python run/init_conditions/run_checkpoints.py --network_type <> --network_name <> --num_nodes <> --type_sim <> --beta <> --sigma <>
. Remember that the number of nodes needs to be specified in the config.csv
file.
For for saving the checkpoint of the simulations executed over a scale-free network with 5000 nodes in both infomation transmission scheme (as shown in the paper)
python run/run_checkpoints.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_sim local --beta 6.0 --sigma 1.0
python run/run_checkpoints.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_sim global --beta 6.0 --sigma 1.0
In order to visualize the networks you will need to specify the network_type
(i.e. scale_free
, small_world
or grid
) and the network_name
as it was saved in the /networks
folder. For visualizing a (already) created scale-free network with 5000 nodes, you would run:
python plots/plot_networks.py --network_type scale_free --network_name scale_free_5000
Plotting a heatmap means you have runned simulations over a range of values for beta
and sigma
. Hence, beta_search.csv
and sigma_search.csv
had to be modified previously. The values that will be considered by the function for plotting are the same already specified on the /param_search
files. The network_type
, network_name
, num_nodes
, type_sim
and type_hm
parameters need to be specified. The later defines weather the heatmap if ploted using beta of R0 in their y axis. An example is displayed as follows:
python plots/plot_heatmaps.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_sim local --type_hm R0
python plots/plot_heatmaps.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_sim global --type_hm R0
In order to plot the temporal dynamics of the simulation, there are few things to consider. Each figure is created for a specific beta and a set of sigmas. These values need to be specified in the beta_plot.csv
and sigma_plot.csv
files found in the /plots/params_plot
folder. Thee defauld values are the ones used in the paper figures. We recommend to plot only 3 values of sigma per beta for best visualization, and only call the function for a set of parameters (leaving only one value of beta in beta_plot.csv
). The network_type
, network_name
, num_nodes
, and type_hm
need to be specified. For visualizing the plot presented in our paper, run:
python plots/plot_dynamics.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_hm R0
python plots/plot_dynamics.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --type_hm R0
We performe cluster analysis through ploting each cluster/community dynamics over time, we do this for the 3 biggest clusters. To achive this, one must have runned simulation for each time checkpoint (explained earlier). Here, we need to specify the network_type
, network_name
, num_nodes
, iterations
, beta_select
, beta_key
, sigma_select
, and sigma_key
. Note that here you need to specify the beta and sigma values and keys. Then, for visualizing clusters in the scale-free network with 5000 individuals we should run:
python plots/plot_cluster_dynamics.py --network_type scale_free --network_name scale_free_5000 --num_nodes 5000 --iterations 10 --beta_select 0.6 --beta_key 060 --sigma_select 1.0 --sigma_key 100