Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'survey' and 'sweep' outputs erroneously return 0 values for incidence and EIR #71

Open
IzzyRou opened this issue Apr 28, 2022 · 0 comments

Comments

@IzzyRou
Copy link
Collaborator

IzzyRou commented Apr 28, 2022

Code to reproduce bug (using develop branch)

`
library(tidyverse)
library(devtools)

Set working directory to location of SIMPLEGEN and load

setwd("~/GitHub/SIMPLEGEN")
devtools::load_all()
check_SIMPLEGEN_loaded()

Define model parameters

set.seed(1)
n_demes <- 1
s <- simplegen_project() %>%
define_epi_model_parameters(
H = 1e3,
M = 1e4,
seed_infections = 10,
mig_mat = diag(1, 1),
prob_infection = 0.3,
prob_acute = seq(1, 0.0000000000, l = 30),
prob_AC = 1.0,
duration_acute = dgeom(1:250, 1 / 100),
duration_chronic = dgeom(1:250, 1 / 400),
detectability_microscopy_acute = 0.9,
detectability_microscopy_chronic = 0.45,
treatment_seeking_mean = 0,
infectivity_acute = 0.9,
infectivity_chronic = 0.45
)

Define sampling strategy

daily_dataframe <- rbind(data.frame(name = "acute_prev", deme = 1, state = "A", measure = "prevalence", diagnostic = c("microscopy", "PCR"), age_min = 2, age_max = 10),
data.frame(name = "chronic_prev", deme = 1, state = "C", measure = "prevalence", diagnostic = c("microscopy", "PCR"), age_min = 2, age_max = 10),
data.frame(name = "acute_inc", deme = 1, state = "A", measure = "incidence", diagnostic = "microscopy", age_min = 0, age_max = 5),
data.frame(name = "EIR", deme = 1, state = "H", measure = "EIR", diagnostic = NA, age_min = 0, age_max = 110),
make.row.names = FALSE)

sweep_dataframe <- rbind(data.frame(name = "prev_acute", time = 365, deme = 1, measure = "prevalence", state = "A", diagnostic = "PCR", age_min = seq(0, 100, 5), age_max = seq(0, 100, 5) + 4),
data.frame(name = "inc_acute", time = 365, deme = 1, measure = "incidence", state = "A", diagnostic = "microscopy", age_min = seq(0, 100, 5), age_max = seq(0, 100, 5) + 4),
data.frame(name = "EIR",time = 365, deme = 1, state = "H", measure = "EIR", diagnostic = NA, age_min = 0, age_max = 110),
make.row.names = FALSE)

df_survey<-data.frame(
t_start = 365,
t_end= 365+29,
reporting_interval = 30,
deme = 1 ,
measure = c("prevalence", "prevalence", "incidence","prevalence", "prevalence", "incidence"),
diagnostic = c("PCR","microscopy","microscopy","PCR","microscopy","microscopy") ,
sampling = c(NA,NA,"PCD",NA,NA,"PCD"),
age_min = c(0,0,0,2,2,0),
age_max = c(110,110,110,10,10,5),
sample_size = 1000

)

s <-
define_epi_sampling_parameters(project = s, surveys = df_survey, daily = daily_dataframe, sweep = sweep_dataframe)

Simulate from transmission model

s <- sim_epi(
s,
max_time = 2 * 365,
save_transmission_record = FALSE,
transmission_record_location = "ignore/trans_record.txt",
overwrite_transmission_record = TRUE
)

Note that EIR is listed as 0 when sampled at time = 365 days

s$epi_output$sweeps %>%
dplyr::filter(measure == "EIR")

Note that incidence in 0-5 and 0-110 years over the 30 day period beginning on time = 365 is listed as zero

s$epi_output$surveys %>%
dplyr::filter(measure == "incidence")

Yet at time = 365 the daily output lists EIR as 110.6 and incidence in 0 to 5 as 0.33

s$epi_output$daily %>%
dplyr::filter((measure == "incidence" |
measure == "EIR") & time == unique(s$epi_output$sweeps$time))

`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant