Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions examples/emcee_vs_r_inference/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
model_output/
*.ipynb
91 changes: 91 additions & 0 deletions examples/emcee_vs_r_inference/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Cross platform customizations
ifeq ($(OS),Windows_NT)
RM_CMD = del /Q
RM_DIR = rmdir /S /Q
else
RM_CMD = rm -f
RM_DIR = rm -rf
endif


# Default target to build all outputs
.PHONY: all
all: \
model_output/three_state_seir_stacked_hosp_stacked/emcee_inference \
model_output/three_state_seir_stacked_hosp_stacked/r_inference


# Clean all generated files & targets
.PHONY: clean
clean:
$(RM_DIR) model_output
$(RM_CMD) model_input/ground_truth_hospitalizations.csv
$(RM_CMD) three_state_simulate.yml
$(RM_CMD) three_state_emcee_inference.yml
$(RM_CMD) three_state_r_inference.yml
$(RM_CMD) log*.txt
$(RM_CMD) *.h5
$(RM_CMD) *.pdf


# Simulate ground truth data
three_state_simulate.yml:
flepimop patch \
sim_base.yml \
--method stochastic \
--nslots 1 \
--in-id sim > three_state_simulate.yml

model_output/three_state_state_varied_Ro_state_varied_incidH/sim: three_state_simulate.yml
flepimop simulate \
--seir_modifiers_scenarios state_varied_Ro \
--outcome_modifiers_scenarios state_varied_incidH \
three_state_simulate.yml

model_input/ground_truth_hospitalizations.csv: model_output/three_state_state_varied_Ro_state_varied_incidH/sim
python ground_truth_from_simulation.py


# Inference with EMCEE
three_state_emcee_inference.yml:
flepimop patch \
inference_base.yml \
inference_outcome_modifiers.yml \
inference_seir_modifiers.yml \
emcee_inference.yml \
> three_state_emcee_inference.yml

model_output/three_state_seir_stacked_hosp_stacked/emcee_inference: \
three_state_emcee_inference.yml model_input/ground_truth_hospitalizations.csv
flepimop-calibrate \
--config three_state_emcee_inference.yml \
--jobs 12 \
--nslots 12 \
--niterations 500 \
--nsamples 100 \
--id emcee_inference


# Inference with R
three_state_r_inference.yml:
flepimop patch \
inference_base.yml \
inference_outcome_modifiers.yml \
inference_seir_modifiers.yml \
r_inference.yml \
> three_state_r_inference.yml

model_output/three_state_seir_stacked_hosp_stacked/r_inference: \
three_state_r_inference.yml model_input/ground_truth_hospitalizations.csv
flepimop-inference-main \
--config three_state_r_inference.yml \
--run_id r_inference \
--seir_modifiers_scenarios seir_stacked \
--outcome_modifiers_scenarios hosp_stacked \
--jobs 12 \
--iterations_per_slot 600 \
--slots 12 \
--python "$(CONDA_PREFIX)/bin/python" \
--rpath "$(CONDA_PREFIX)/bin/R" \
--save_hosp TRUE \
--save_seir TRUE
3 changes: 3 additions & 0 deletions examples/emcee_vs_r_inference/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Three State Inference Comparison

This example highlights the differences between R and EMCEE inference with a small but semi-realistic three state model.
13 changes: 13 additions & 0 deletions examples/emcee_vs_r_inference/emcee_inference.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
inference:
iterations_per_slot: 250
method: emcee
do_inference: true
gt_data_path: model_input/ground_truth_hospitalizations.csv
statistics:
incidH:
name: incidH
sim_var: hospitalizations
data_var: incidH
zero_to_one: True
likelihood:
dist: pois
24 changes: 24 additions & 0 deletions examples/emcee_vs_r_inference/ground_truth_from_simulation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from pathlib import Path

from gempyor.utils import read_directory


project_path = Path(__file__).parent

simulation_output = (
project_path
/ "model_output"
/ "three_state_state_varied_Ro_state_varied_incidH"
/ "sim"
)
if not simulation_output.exists():
raise FileNotFoundError(
f"Simulation output directory {simulation_output} does not exist. "
"Please run the simulation first."
)

hosp = read_directory(simulation_output, filters="hosp")
hosp = hosp[["date", "subpop", "hospitalizations_curr"]]
hosp = hosp.rename(columns={"hospitalizations_curr": "incidH"})
hosp["incidH"] = hosp["incidH"].astype(int)
hosp.to_csv(project_path / "model_input" / "ground_truth_hospitalizations.csv", index=False)
58 changes: 58 additions & 0 deletions examples/emcee_vs_r_inference/inference_base.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: three_state
start_date: 2024-01-01
end_date: 2024-12-31

subpop_setup:
geodata: model_input/geodata.csv
mobility: model_input/mobility.csv

initial_conditions:
method: SetInitialConditions
initial_conditions_file: model_input/initial_conditions.csv
allow_missing_subpops: TRUE
allow_missing_compartments: TRUE

compartments:
infection_stage: ["S", "E", "I", "R"]

seir:
integration:
method: rk4
dt: 0.25
parameters:
sigma:
value: 1
gamma:
value: 1
Ro:
value: 1
transitions:
- source: ["S"]
destination: ["E"]
rate: ["Ro * gamma"]
proportional_to: [["S"], ["I"]]
proportion_exponent: ["1", "1"]
- source: ["E"]
destination: ["I"]
rate: ["sigma"]
proportional_to: ["E"]
proportion_exponent: ["1"]
- source: ["I"]
destination: ["R"]
rate: ["gamma"]
proportional_to: ["I"]
proportion_exponent: ["1"]

outcomes:
method: delayframe
outcomes:
hospitalizations:
source:
incidence:
infection_stage: "I"
probability:
value: 1
delay:
value: 1
duration:
value: 1
78 changes: 78 additions & 0 deletions examples/emcee_vs_r_inference/inference_outcome_modifiers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
outcome_modifiers:
scenarios:
- hosp_stacked
modifiers:
hosp_probability:
method: SinglePeriodModifier
parameter: incidH::probability
subpop: "all"
period_start_date: 2024-01-01
period_end_date: 2024-12-31
value:
distribution: truncnorm
mean: 0.1
sd: 0.05
a: 0
b: 1
perturbation:
distribution: truncnorm
mean: 0
sd: 0.025
a: -0.1
b: 0.1
hosp_delay:
method: SinglePeriodModifier
parameter: incidH::delay
subpop: "all"
subpop_groups:
-
- NC
- SC
-
- GA
period_start_date: 2024-01-01
period_end_date: 2024-12-31
value:
distribution: truncnorm
mean: 7.0
sd: 2.0
a: 0
b: 21.0
perturbation:
distribution: truncnorm
mean: 0
sd: 0.025
a: -0.1
b: 0.1
hosp_duration:
method: SinglePeriodModifier
parameter: incidH::duration
subpop: "all"
subpop_groups:
-
- NC
- SC
- GA
period_start_date: 2024-01-01
period_end_date: 2024-12-31
value:
distribution: truncnorm
mean: 14.0
sd: 7.0
a: 3.0
b: 21.0
perturbation:
distribution: truncnorm
mean: 0
sd: 0.025
a: -0.1
b: 0.1
hosp_stacked:
method: StackedModifier
subpop: "all"
period_start_date: 2024-01-01
period_end_date: 2024-12-31
modifiers:
- hosp_probability
- hosp_delay
- hosp_duration
66 changes: 66 additions & 0 deletions examples/emcee_vs_r_inference/inference_seir_modifiers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
seir_modifiers:
scenarios:
- seir_stacked
modifiers:
sigma_fit:
method: SinglePeriodModifier
parameter: sigma
subpop: "all"
subpop_groups: ["NC", "SC", "GA"]
period_start_date: 2024-01-01
period_end_date: 2024-12-31
value:
distribution: truncnorm
mean: 0.5
sd: 0.2
a: 0
b: 3
perturbation:
distribution: truncnorm
mean: 0
sd: 0.025
a: -0.1
b: 0.1
gamma_fit:
method: SinglePeriodModifier
parameter: gamma
subpop: "all"
subpop_groups: ["NC", "SC", "GA"]
period_start_date: 2024-01-01
period_end_date: 2024-12-31
value:
distribution: truncnorm
mean: 0.5
sd: 0.2
a: 0
b: 3
perturbation:
distribution: truncnorm
mean: 0
sd: 0.025
a: -0.1
b: 0.1
Ro_fit:
method: SinglePeriodModifier
parameter: Ro
subpop: "all"
period_start_date: 2024-01-01
period_end_date: 2024-12-31
value:
distribution: truncnorm
mean: 2.5
sd: 0.1
a: 0
b: 5
perturbation:
distribution: truncnorm
mean: 0
sd: 0.025
a: -0.1
b: 0.1
seir_stacked:
method: StackedModifier
modifiers:
- sigma_fit
- gamma_fit
- Ro_fit
4 changes: 4 additions & 0 deletions examples/emcee_vs_r_inference/model_input/geodata.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
"subpop","population"
"NC","10264876"
"SC","5020806"
"GA","10403847"
Loading
Loading