Nothing
## ----include=FALSE------------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "stoch-"
)
## ----setup, include = FALSE---------------------------------------------------
library(hmer)
library(ggplot2)
set.seed(123)
gillespied=function (N, T=400, dt=1, ...)
{
tt=0
n=T%/%dt
x=N$M
S=t(N$Post-N$Pre)
u=nrow(S)
v=ncol(S)
xmat=matrix(0,ncol=u,nrow=n)
i=1
target=0
repeat {
h=N$h(x, tt, ...)
h0=sum(h)
if (h0<1e-10)
tt=1e99
else
tt=tt+rexp(1,h0)
while (tt>=target) {
xmat[i,]=x
i=i+1
target=target+dt
if (i>n)
# return(ts(xmat,start=0,deltat=dt))
return(xmat)
}
j=sample(v,1,prob=h)
x=x+S[,j]
}
}
Num <- 1000
N=list()
N$M=c(995,5,0)
N$Pre = matrix(c(1,0,0,
0,1,0,
0,0,1), ncol = 3, byrow = TRUE)
N$Post = matrix(c(0,1,0,
0,0,1,
1,0,0), ncol = 3, byrow = TRUE)
N$h=function(x,t,th=rep(1,3))
{
Num = x[1]+x[2]+x[3]
return(
c(th[1]*x[1]*x[2]/Num,
th[2]*x[2],
th[3]*x[3])
)
}
get_results <- function(params, nreps = 100, outs = c("I", "R"), times = seq(0, 60, by = 5), raw = FALSE) {
tseq <- 0:max(times)
arra <- array(0, dim = c(max(tseq)+1, 3, nreps))
for(i in 1:nreps) arra[,,i] <- gillespied(N, T=max(times) + 1 + 0.001, dt=1, th=params)
if (raw) return(arra)
collected <- list()
for (i in 1:nreps) {
relev <- c(arra[times+1, which(c("S", "I", "R") %in% outs), i])
names <- unlist(purrr::map(outs, ~paste0(., times, sep = "")))
relev <- setNames(relev, names)
collected[[i]] <- relev
}
input_dat <- setNames(data.frame(matrix(rep(params, nreps), ncol = length(params), byrow = TRUE)), names(params))
return(cbind(input_dat, do.call('rbind', collected)))
}
## ----birth-death-plot, fig.height = 7, fig.width = 7--------------------------
plot(unique(BirthDeath$training[,1:2]), pch = 16, col = c(rep('red', 5), rep('black', 15)))
legend('top', legend = c("High rep", "Low rep"), col = c('red', 'black'), pch = 16, inset = c(0.1, 0.1))
## ----define-ranges------------------------------------------------------------
ranges <- list(
lambda = c(0, 0.08),
mu = c(0.04, 0.13)
)
targets = list(
Y = c(90, 110)
)
## ----make-variance-em---------------------------------------------------------
stochastic_em <- emulator_from_data(BirthDeath$training, names(targets), ranges, emulator_type = "variance")
stochastic_em
## ----print-class--------------------------------------------------------------
class(stochastic_em$expectation$Y)
## ----plot-stoch-ems, fig.width = 7, fig.height = 7----------------------------
emulator_plot(stochastic_em$expectation$Y)
emulator_plot(stochastic_em$variance$Y)
## ----plot-stoch-var, fig.width = 7, fig.height = 7----------------------------
emulator_plot(stochastic_em$expectation$Y, 'sd') + geom_point(data = BirthDeath$training, aes(x = lambda, y = mu))
## ----plot-stoch-imp, fig.width = 7, fig.height = 7----------------------------
emulator_plot(stochastic_em$expectation$Y, 'imp', targets = targets)
## ----validate-stoch-em, fig.height = 7/3, fig.width = 7-----------------------
# Mean emulator: familiar code
mean_em_validation <- validation_diagnostics(stochastic_em$expectation, targets, BirthDeath$validation, plt = TRUE, row = 1)
# Variance emulator (no targets; see below)
var_em_validation <- suppressWarnings(validation_diagnostics(stochastic_em$variance, validation = BirthDeath$validation, plt = TRUE, row = 1))
# No targets: LOO cross-validation performed
no_validation <- validation_diagnostics(stochastic_em$expectation, targets, plt = TRUE, row = 1)
## ----validate-var-em, fig.width = 7, fig.height = 7/3-------------------------
fake_var_targ <- list(Y = c(30, 50))
var_em_fake_target <- validation_diagnostics(stochastic_em$variance, fake_var_targ, BirthDeath$validation, plt = TRUE, row = 1)
## ----propose-var-em, fig.height = 7, fig.width = 7----------------------------
new_points <- generate_new_design(stochastic_em, 30, targets, resample = 0)
plot_wrap(new_points, ranges)
## ----multistate-demo, fig.height = 7, fig.width = 7---------------------------
example_params <- c(0.45, 0.25, 0.025)
model_result <- get_results(example_params, raw = TRUE)
plot(0:60, ylim=c(0,600), ty="n")
for(j in 2:3) for(i in 1:100) lines(0:60, model_result[,j,i], col=(2:4)[j], lwd=0.3, xlab = "Time", ylab = "Number")
legend('topleft', legend = c('Recovered', "Infected"), lty = 1, col = c(4, 3), inset = c(0.05, 0.05))
## ----define-multistate--------------------------------------------------------
SIR_ranges <- list(
aSI = c(0.1, 0.8),
aIR = c(0, 0.5),
aSR = c(0, 0.05)
)
training <- SIR_stochastic$training
validation <- SIR_stochastic$validation
bim_targets <- list(
I10 = list(val = 35, sigma = 3.5),
I25 = list(val = 147, sigma = 14.7),
I50 = list(val = 55, sigma = 5.5),
R10 = list(val = 29, sigma = 2.9),
R25 = list(val = 276, sigma = 27.6),
R50 = list(val = 579, sigma = 57.9)
)
## ----train-multistate---------------------------------------------------------
bim_ems <- emulator_from_data(training, names(bim_targets), SIR_ranges, emulator_type = "multistate")
names(bim_ems)
## ----plot-multistate, fig.width = 7, fig.height = 7---------------------------
emulator_plot(bim_ems$mode1$expectation$R50)
emulator_plot(bim_ems$mode2$expectation$R50)
## ----validate-multistate, fig.width = 7, fig.height = 7-----------------------
bim_invalid <- validation_diagnostics(bim_ems, bim_targets, validation)
## ----plot-modes, fig.width = 7, fig.height = 7--------------------------------
emulator_plot(bim_ems$mode1)
emulator_plot(bim_ems$mode2)
## ----multistate-imp, fig.width = 7, fig.height = 7----------------------------
emulator_plot(bim_ems, 'nimp', targets = bim_targets)
## ----multistate-indiv-imp, fig.width = 7, fig.height = 7----------------------
emulator_plot(bim_ems$mode1, 'nimp', targets = bim_targets)
emulator_plot(bim_ems$mode2, 'nimp', targets = bim_targets)
## ----propose-multistate, fig.width = 7, fig.height = 7------------------------
new_points <- generate_new_design(bim_ems, 100, bim_targets, resample = 0)
plot_wrap(new_points, SIR_ranges)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.