context("Custom Trackers")
nw <- network_initialize(n = 50)
nw <- set_vertex_attribute(nw, "race", rbinom(50, 1, 0.5))
est <- netest(
nw,
formation = ~edges,
target.stats = 25,
coef.diss = dissolution_coefs(~ offset(edges), 10, 0),
verbose = FALSE
)
init <- init.net(i.num = 10)
# Edges + nodematch, one-mode, closed
test_that("netsim, SI, custom trackers", {
epi_s_num <- function(dat, at) {
needed_attributes <- c("status")
output <- with(get_attr_list(dat, needed_attributes), {
sum(status == "s", na.rm = TRUE)
})
return(output)
}
epi_prop_infected <- function(dat, at) {
needed_attributes <- c("status", "active")
output <- with(get_attr_list(dat, needed_attributes), {
pop <- active == 1
cond <- status == "i"
sum(cond & pop, na.rm = TRUE) / sum(pop, na.rm = TRUE)
})
return(output)
}
some.trackers <- list(
prop_infected = epi_prop_infected,
s_num = epi_s_num
)
control <- control.net(
type = "SI",
nsims = 1,
nsteps = 50,
verbose = FALSE,
infection.FUN = infection.net,
.tracker.list = some.trackers
)
param <- param.net(
inf.prob = 0.3,
act.rate = 0.1
)
mod <- netsim(est, param, init, control)
d <- as.data.frame(mod)
expect_true(all(c("prop_infected", "s_num") %in% names(d)))
expect_is(d[["prop_infected"]], "numeric")
# the custom epi trackers are not run during intialization so the first value
# is always NA
expect_true(all(d$s_num[2:50] == d$s.num[2:50]))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.