From 4760a54aa567dadfd0967b8af94882e32078f69f Mon Sep 17 00:00:00 2001 From: Simon Frost Date: Fri, 19 Oct 2018 11:47:15 +0100 Subject: [PATCH] Added discrete Erlang model and nonexponential intro --- SUMMARY.md | 4 + _chapters/blackross2015/r.md | 4 +- _chapters/erlang/intro.md | 22 ++ _chapters/erlang/julia.md | 308 +++++++++++++++++++++ _chapters/erlang/r.md | 268 ++++++++++++++++++ _chapters/nonexponential.md | 27 ++ _chapters/timevarying.md | 2 +- _data/textbook.yml | 13 + images/chapters/erlang/julia_12_0.png | Bin 0 -> 25118 bytes images/chapters/erlang/r_10_1.png | Bin 0 -> 45259 bytes notebooks/erlang/intro.ipynb | 39 +++ notebooks/erlang/intro.md | 10 + notebooks/erlang/julia.ipynb | 385 ++++++++++++++++++++++++++ notebooks/erlang/r.ipynb | 343 +++++++++++++++++++++++ notebooks/nonexponential.md | 15 + 15 files changed, 1437 insertions(+), 3 deletions(-) create mode 100644 _chapters/erlang/intro.md create mode 100644 _chapters/erlang/julia.md create mode 100644 _chapters/erlang/r.md create mode 100644 _chapters/nonexponential.md create mode 100644 images/chapters/erlang/julia_12_0.png create mode 100644 images/chapters/erlang/r_10_1.png create mode 100644 notebooks/erlang/intro.ipynb create mode 100644 notebooks/erlang/intro.md create mode 100644 notebooks/erlang/julia.ipynb create mode 100644 notebooks/erlang/r.ipynb create mode 100644 notebooks/nonexponential.md diff --git a/SUMMARY.md b/SUMMARY.md index a010952d1..67ce94139 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -39,6 +39,10 @@ * [Octave](notebooks/blackross2015/octave.ipynb) * [Scilab](notebooks/blackross2015/scilab.ipynb) * [R](notebooks/blackross2015/r.ipynb) +* [Non-exponential passage times](notebooks/nonexponential.md) + * [Discrete Erlang SEIR model](notebooks/erlang/intro.md) + * [Julia](notebooks/erlang/julia.ipynb) + * [R](notebooks/erlang/r.ipynb) * [Time-varying parameters](notebooks/timevarying.md) * [Seasonally forced deterministic model](notebooks/sirforced/intro.md) * [R](notebooks/sirforced/r.ipynb) diff --git a/_chapters/blackross2015/r.md b/_chapters/blackross2015/r.md index 972d1d0fb..e1407e879 100644 --- a/_chapters/blackross2015/r.md +++ b/_chapters/blackross2015/r.md @@ -6,8 +6,8 @@ previouschapter: url: chapters/blackross2015/scilab title: 'Scilab' nextchapter: - url: chapters/timevarying - title: 'Time-varying parameters' + url: chapters/nonexponential + title: 'Non-exponential passage times' redirect_from: - 'chapters/blackross2015/r' --- diff --git a/_chapters/erlang/intro.md b/_chapters/erlang/intro.md new file mode 100644 index 000000000..bfccd9aea --- /dev/null +++ b/_chapters/erlang/intro.md @@ -0,0 +1,22 @@ +--- +title: 'Discrete Erlang SEIR model' +permalink: 'chapters/erlang/intro' +previouschapter: + url: chapters/nonexponential + title: 'Non-exponential passage times' +nextchapter: + url: chapters/erlang/julia + title: 'Julia' +redirect_from: + - 'chapters/erlang/intro' +--- + +## Discrete time Erlang models + +[Getz and Dougherty (2017)](https://doi.org/10.1080/17513758.2017.1401677) formulate deterministic, discrete-time analogues of Erlang models, that model non-exponential passage times using the method of stages ([Cox and Miller (1965)](https://www.crcpress.com/The-Theory-of-Stochastic-Processes/Cox-Miller/p/book/9780412151705)). + +### References + +- [Cox and Miller (1965)](https://www.crcpress.com/The-Theory-of-Stochastic-Processes/Cox-Miller/p/book/9780412151705) +- [Getz and Dougherty (2017)](https://doi.org/10.1080/17513758.2017.1401677) + diff --git a/_chapters/erlang/julia.md b/_chapters/erlang/julia.md new file mode 100644 index 000000000..7c46c133e --- /dev/null +++ b/_chapters/erlang/julia.md @@ -0,0 +1,308 @@ +--- +interact_link: notebooks/erlang/julia.ipynb +title: 'Julia' +permalink: 'chapters/erlang/julia' +previouschapter: + url: chapters/erlang/intro + title: 'Discrete Erlang SEIR model' +nextchapter: + url: chapters/erlang/r + title: 'R' +redirect_from: + - 'chapters/erlang/julia' +--- + +# Discrete stochastic Erlang epidemic model + +Author: Lam Ha @lamhm + +Date: 2018-10-03 + +## Load Packages for Julia + + +{:.input_area} +```julia +using DataFrames +using Distributions +using Plots +``` + +## Calculate Discrete Erlang Probabilities + +The following function is to calculate the discrete truncated Erlang probability, given $k$ and $\gamma$: + +\begin{equation*} +p_i = +\frac{1}{C(n^{E})} +\Bigl(\sum_{j=0}^{k-1} + \frac{e^{-(i-1)\gamma} \times ((i-1)\gamma)^{j}} {j!} +-\sum_{j=0}^{k-1} + \frac{e^{-i\gamma} \times (i\gamma)^{j}} {j!}\Bigr),\quad\text{for $i=1,...,n^{E}$}. +\end{equation*} + +where + +\begin{equation*} +n^{E} = argmin_n\Bigl(C(n) = 1 - \sum_{j=0}^{k-1} + \frac{e^{-n\gamma} \times (n\gamma)^{j}} {j!} > 0.99 \Bigr) +\end{equation*} + +**N.B. The formula of $p_i$ here is slightly different from what is shown in the original paper because the latter (which is likely to be wrong) would lead to negative probabilities.** + + +{:.input_area} +```julia +#' @param k The shape parameter of the Erlang distribution. +#' @param gamma The rate parameter of the Erlang distribution. +#' @return A vector containing all p_i values, for i = 1 : n. +function compute_erlang_discrete_prob(k::Int64, gamma::Float64) + n_bin = 0 + factorials = zeros(Int64, k + 1) + factorials[1] = 1 ## factorials[1] = 0! + for i = 1 : k + factorials[i + 1] = factorials[i] * i ## factorial[i + 1] = i! + end + + one_sub_cummulative_probs = Float64[] + cummulative_prob = 0 + while cummulative_prob <= 0.99 + n_bin = n_bin + 1 + push!(one_sub_cummulative_probs, 0) + + for j = 0 : (k - 1) + one_sub_cummulative_probs[end] = + one_sub_cummulative_probs[end] + + ( + exp( -n_bin * gamma ) + * ( (n_bin * gamma) ^ j ) + / factorials[j + 1] ## factorials[j + 1] = j! + ) + end + cummulative_prob = 1 - one_sub_cummulative_probs[end] + end + one_sub_cummulative_probs = unshift!(one_sub_cummulative_probs, 1) + + density_prob = one_sub_cummulative_probs[1 : end - 1] - one_sub_cummulative_probs[2 : end] + density_prob = density_prob / cummulative_prob + + return density_prob +end +``` + + + + +{:.output_data_text} +``` +compute_erlang_discrete_prob (generic function with 1 method) +``` + + + +The implementation above calculates discrete probabilities $p_i$'s base on the cummulative density function of the Erlang distribution: + +\begin{equation*} +p_i = CDF_{Erlang}(x = i) - CDF_{Erlang}(x = i-1) +\end{equation*} + +Meanwhile, the estimates of $p_i$'s in the original paper seems to be based on the probability density function: + +\begin{equation*} +p_i = PDF_{Erlang}(x = i) +\end{equation*} + +While the two methods give slightly different estimates, they do not lead to any visible differences in the results of the subsequent simulations. This implementation uses the CDF function since it leads to faster runs. + +## Simulate the SEIR Dynamics + +The next function is to simulate the SEIR (susceptible, exposed, infectious, recovered) dynamics of an epidemic, assuming that transmission is frequency-dependent, i.e. + +\begin{equation*} +\beta = \beta_0 \frac{I(t)}{N} +\end{equation*} + +where $N$ is the population size, $I(t)$ is the number of infectious people at time $t$, and $\beta_0$ is the base transmission rate. + +This model does not consider births and deads (i.e. $N$ is constant). + +The rates at which individuals move through the E and the I classes are assumed to follow Erlang distributions of given shapes ($k^E$, $k^I$) and rates ($\gamma^E$, $\gamma^I$). + + +{:.input_area} +```julia +function seir_simulation( initial_state::Dict, parameters::Dict, max_time::Int64 ) + S_1 = get(initial_state, "S", -1) + E_1 = get(initial_state, "E", -1) + I_1 = get(initial_state, "I", -1) + R_1 = get(initial_state, "R", -1) + (S_1 != -1) || error("An initial value for S is required.") + (E_1 != -1) || error("An initial value for E is required.") + (I_1 != -1) || error("An initial value for I is required.") + (R_1 != -1) || error("An initial value for R is required.") + + k_E = get(parameters, "k_E", -1) + gamma_E = get(parameters, "gamma_E", -1.0) + k_I = get(parameters, "k_I", -1) + gamma_I = get(parameters, "gamma_I", -1.0) + beta = get(parameters, "beta", -1.0) + (k_E != -1) || error("Parameter k_E must be specified.") + (gamma_E != -1.0) || error("Parameter gamma_E must be specified.") + (k_I != -1) || error("Parameter k_I must be specified.") + (gamma_I != -1.0) || error("Parameter gamma_I must be specified.") + (beta != -1.0) || error("Parameter beta must be specified.") + + population_size = S_1 + E_1 + I_1 + R_1 + sim_data = DataFrame( S = Int64[], E = Int64[], I = Int64[], R = Int64[] ) + push!( sim_data, (S_1, E_1, I_1, R_1) ) + + + ## Initialise a matrix to store the states of the exposed sub-blocks over time. + exposed_block_adm_rates = compute_erlang_discrete_prob(k_E, gamma_E) + n_exposed_blocks = length(exposed_block_adm_rates) + exposed_blocks = zeros(Int64, max_time, n_exposed_blocks) + exposed_blocks[1, n_exposed_blocks] = sim_data[1, :E] + + + ## Initialise a matrix to store the states of the infectious sub-blocks over time. + infectious_block_adm_rates = compute_erlang_discrete_prob(k_I, gamma_I) + n_infectious_blocks = length(infectious_block_adm_rates) + infectious_blocks = zeros(Int64, max_time, n_infectious_blocks) + infectious_blocks[1, n_infectious_blocks] = sim_data[1, :I] + + + ## Run the simulation from time t = 2 to t = max_time + for time = 2 : max_time + transmission_rate = beta * sim_data[(time - 1), :I] / population_size + exposure_prob = 1 - exp(-transmission_rate) + distribution = Binomial(sim_data[(time - 1), :S], exposure_prob) + new_exposed = rand(distribution) + new_infectious = exposed_blocks[time - 1, 1] + new_recovered = infectious_blocks[time - 1, 1] + + if new_exposed > 0 + distribution = Multinomial(new_exposed, exposed_block_adm_rates) + exposed_blocks[time, :] = rand(distribution) + end + exposed_blocks[time, (1 : end - 1)] = + exposed_blocks[time, (1 : end - 1)] + exposed_blocks[(time - 1), (2 : end)] + + if new_infectious > 0 + distribution = Multinomial(new_infectious, infectious_block_adm_rates) + infectious_blocks[time, :] = rand(distribution) + end + infectious_blocks[time, (1 : end - 1)] = + infectious_blocks[time, (1 : end - 1)] + infectious_blocks[(time - 1), (2 : end)] + + push!( sim_data, ( sim_data[time - 1, :S] - new_exposed, + sum(exposed_blocks[time, :]), + sum(infectious_blocks[time, :]), + sim_data[time - 1, :R] + new_recovered ) + ) + end + + sim_data[:time] = collect(1 : max_time) + return sim_data +end +``` + + + + +{:.output_data_text} +``` +seir_simulation (generic function with 1 method) +``` + + + +To run a simulation, simply call the $seir\_simulation(\dots)$ method above. + +Below is an example simulation where $k^E = 5$, $\gamma^E = 1$, $k^I = 10$, $\gamma^I = 1$, and $\beta_0 = 0.25$ ($R_0 = \beta_0\frac{k^I}{\gamma^I} = 2.5$). The population size is $N = 10,000$. The simmulation starts with 1 exposed case and everyone else belongs to the susceptible class. These settings are the same the the simulation 11 of the original paper. + +**N.B. Since this is a stochastic model, there is chance for the outbreak not to occur even with a high $R_0$.** + + +{:.input_area} +```julia +sim = seir_simulation( Dict("S" => 9999, "E" => 1, "I" => 0, "R" => 0), + Dict("k_E" => 5, "gamma_E" => 1.0, + "k_I" => 10, "gamma_I" => 1.0, + "beta" => 0.25), + 300 ) +print(sim[end - 9 : end, :]) +``` + +{:.output_stream} +``` +10×5 DataFrames.DataFrame +│ Row │ S │ E │ I │ R │ time │ +├─────┼─────┼───┼───┼──────┼──────┤ +│ 1 │ 981 │ 0 │ 0 │ 9019 │ 291 │ +│ 2 │ 981 │ 0 │ 0 │ 9019 │ 292 │ +│ 3 │ 981 │ 0 │ 0 │ 9019 │ 293 │ +│ 4 │ 981 │ 0 │ 0 │ 9019 │ 294 │ +│ 5 │ 981 │ 0 │ 0 │ 9019 │ 295 │ +│ 6 │ 981 │ 0 │ 0 │ 9019 │ 296 │ +│ 7 │ 981 │ 0 │ 0 │ 9019 │ 297 │ +│ 8 │ 981 │ 0 │ 0 │ 9019 │ 298 │ +│ 9 │ 981 │ 0 │ 0 │ 9019 │ 299 │ +│ 10 │ 981 │ 0 │ 0 │ 9019 │ 300 │ +``` + +## Visualisation + + +{:.input_area} +```julia +gr(fmt = :png) +plot( sim[:, :time], + [sim[:, :S], sim[:, :E], sim[:, :I], sim[:, :R]], + label = ["Susceptible", "Exposed", "Infectious", "Recovered"], + xlabel = "Time", ylabel = "Number of Individuals", + linealpha = 0.5, linewidth = 3 ) + +``` + + + + +![png](../../images/chapters/erlang/julia_12_0.png) + + + +## Test Case + + +{:.input_area} +```julia +srand(12345) +test_sim = seir_simulation( Dict("S" => 9999, "E" => 1, "I" => 0, "R" => 0), + Dict("k_E" => 5, "gamma_E" => 1.0, + "k_I" => 10, "gamma_I" => 1.0, + "beta" => 0.25), + 100 ) +test_result = convert(Array, test_sim[end-2 : end, :]) + +correct_result = [ 6416 1017 1298 1269 98 ; + 6210 1045 1379 1366 99 ; + 6010 1086 1442 1462 100 ] + +println("\n-------------------") +if correct_result == test_result + println(" Test PASSED") +else + println(" Test FAILED") +end +println("-------------------\n") +``` + +{:.output_stream} +``` + +------------------- + Test PASSED +------------------- + + +``` diff --git a/_chapters/erlang/r.md b/_chapters/erlang/r.md new file mode 100644 index 000000000..c1e39c1a0 --- /dev/null +++ b/_chapters/erlang/r.md @@ -0,0 +1,268 @@ +--- +interact_link: notebooks/erlang/r.ipynb +title: 'R' +permalink: 'chapters/erlang/r' +previouschapter: + url: chapters/erlang/julia + title: 'Julia' +nextchapter: + url: chapters/timevarying + title: 'Time-varying parameters' +redirect_from: + - 'chapters/erlang/r' +--- + +# Discrete stochastic Erlang SEIR model + +Author: Lam Ha @lamhm + +Date: 2018-10-03 + +## Calculate Discrete Erlang Probabilities + +The following function is to calculate the discrete truncated Erlang probability, given $k$ and $\gamma$: + +\begin{equation*} +p_i = +\frac{1}{C(n^{E})} +\Bigl(\sum_{j=0}^{k-1} + \frac{e^{-(i-1)\gamma} \times ((i-1)\gamma)^{j}} {j!} +-\sum_{j=0}^{k-1} + \frac{e^{-i\gamma} \times (i\gamma)^{j}} {j!}\Bigr),\quad\text{for $i=1,...,n^{E}$}. +\end{equation*} + +where + +\begin{equation*} +n^{E} = argmin_n\Bigl(C(n) = 1 - \sum_{j=0}^{k-1} + \frac{e^{-n\gamma} \times (n\gamma)^{j}} {j!} > 0.99 \Bigr) +\end{equation*} + +**N.B. The formula of $p_i$ here is slightly different from what is shown in the original paper because the latter (which is likely to be wrong) would lead to negative probabilities.** + + +{:.input_area} +```R +#' @param k The shape parameter of the Erlang distribution. +#' @param gamma The rate parameter of the Erlang distribution. +#' @return A vector containing all p_i values, for i = 1 : n. +compute_erlang_discrete_prob <- function(k, gamma) { + n_bin <- 0 + factorials <- 1 ## 0! = 1 + for (i in 1 : k) { + factorials[i + 1] <- factorials[i] * i ## factorial[i + 1] = i! + } + + one_sub_cummulative_probs <- NULL + cummulative_prob <- 0 + while (cummulative_prob <= 0.99) { + n_bin <- n_bin + 1 + + one_sub_cummulative_probs[n_bin] <- 0 + for ( j in 0 : (k - 1) ) { + one_sub_cummulative_probs[n_bin] <- + one_sub_cummulative_probs[n_bin] + + ( + exp( -n_bin * gamma ) + * ( (n_bin * gamma) ^ j ) + / factorials[j + 1] ## factorials[j + 1] = j! + ) + } + cummulative_prob <- 1 - one_sub_cummulative_probs[n_bin] + } + one_sub_cummulative_probs <- c(1, one_sub_cummulative_probs) + + density_prob <- + head(one_sub_cummulative_probs, -1) - tail(one_sub_cummulative_probs, -1) + density_prob <- density_prob / cummulative_prob + + return(density_prob) +} +``` + +The implementation above calculates discrete probabilities $p_i$'s base on the cummulative density function of the Erlang distribution: + +\begin{equation*} +p_i = CDF_{Erlang}(x = i) - CDF_{Erlang}(x = i-1) +\end{equation*} + +Meanwhile, the estimates of $p_i$'s in the original paper seems to be based on the probability density function: + +\begin{equation*} +p_i = PDF_{Erlang}(x = i) +\end{equation*} + +While the two methods give slightly different estimates, they do not lead to any visible differences in the results of the subsequent simulations. This implementation uses the CDF function since it leads to faster runs. + +## Simulate the SEIR Dynamics + +The next function is to simulate the SEIR (susceptible, exposed, infectious, recovered) dynamics of an epidemic, assuming that transmission is frequency-dependent, i.e. + +\begin{equation*} +\beta = \beta_0 \frac{I(t)}{N} +\end{equation*} + +where $N$ is the population size, $I(t)$ is the number of infectious people at time $t$, and $\beta_0$ is the base transmission rate. + +This model does not consider births and deads (i.e. $N$ is constant). + +The rates at which individuals move through the E and the I classes are assumed to follow Erlang distributions of given shapes ($k^E$, $k^I$) and rates ($\gamma^E$, $\gamma^I$). + + +{:.input_area} +```R +#' @param initial_state A vector that contains 4 numbers corresponding to the +#' initial values of the 4 classes: S, E, I, and R. +#' @param parameters A vector that contains 5 numbers corresponding to the +#' following parameters: the shape and the rate parameters +#' of the Erlang distribution that will be used to +#' calculate the transition rates between the E components +#' (i.e. k[E] and gamma[E]), the shape and the rate parameters +#' of the Erlang distribution that will be used to +#' calculate the transition rates between the I components +#' (i.e. k[I] and gamma[I]), and the base transmission rate +#' (i.e. beta). +#' @param max_time The length of the simulation. +#' @return A data frame containing the values of S, E, I, and R over time +#' (from 1 to max_time). +seir_simulation <- function(initial_state, parameters, max_time) { + names(initial_state) <- c("S", "E", "I", "R") + names(parameters) <- c( "erlang_shape_for_E", "erlang_rate_for_E", + "erlang_shape_for_I", "erlang_rate_for_I", + "base_transmission_rate" ) + + population_size <- sum(initial_state) + sim_data <- data.frame( time = c(1 : max_time), + S = NA, E = NA, I = NA, R = NA ) + sim_data[1, 2:5] <- initial_state + + ## Initialise a matrix to store the states of the exposed sub-blocks over time. + exposed_block_adm_rates <- compute_erlang_discrete_prob( + k = parameters["erlang_shape_for_E"], + gamma = parameters["erlang_rate_for_E"] + ) + n_exposed_blocks <- length(exposed_block_adm_rates) + exposed_blocks <- matrix( data = 0, nrow = max_time, + ncol = n_exposed_blocks ) + exposed_blocks[1, n_exposed_blocks] <- sim_data$E[1] + + ## Initialise a matrix to store the states of the infectious sub-blocks over time. + infectious_block_adm_rates <- compute_erlang_discrete_prob( + k = parameters["erlang_shape_for_I"], + gamma = parameters["erlang_rate_for_I"] + ) + n_infectious_blocks <- length(infectious_block_adm_rates) + infectious_blocks <- matrix( data = 0, nrow = max_time, + ncol = n_infectious_blocks ) + infectious_blocks[1, n_infectious_blocks] <- sim_data$I[1] + + ## Run the simulation from time t = 2 to t = max_time + for (time in 2 : max_time) { + transmission_rate <- + parameters["base_transmission_rate"] * sim_data$I[time - 1] / + population_size + exposure_prob <- 1 - exp(-transmission_rate) + + new_exposed <- rbinom(1, sim_data$S[time - 1], exposure_prob) + new_infectious <- exposed_blocks[time - 1, 1] + new_recovered <- infectious_blocks[time - 1, 1] + + if (new_exposed > 0) { + exposed_blocks[time, ] <- t( + rmultinom(1, size = new_exposed, + prob = exposed_block_adm_rates) + ) + } + exposed_blocks[time, ] <- + exposed_blocks[time, ] + + c( exposed_blocks[time - 1, 2 : n_exposed_blocks], 0 ) + + if (new_infectious > 0) { + infectious_blocks[time, ] <- t( + rmultinom(1, size = new_infectious, + prob = infectious_block_adm_rates) + ) + } + infectious_blocks[time, ] <- + infectious_blocks[time, ] + + c( infectious_blocks[time - 1, 2 : n_infectious_blocks], 0 ) + + sim_data$S[time] <- sim_data$S[time - 1] - new_exposed + sim_data$E[time] <- sum(exposed_blocks[time, ]) + sim_data$I[time] <- sum(infectious_blocks[time, ]) + sim_data$R[time] <- sim_data$R[time - 1] + new_recovered + } + + return(sim_data) +} +``` + +To run a simulation, simply call the $seir\_simulation(\dots)$ method above. + +Below is an example simulation where $k^E = 5$, $\gamma^E = 1$, $k^I = 10$, $\gamma^I = 1$, and $\beta_0 = 0.25$ ($R_0 = \beta_0\frac{k^I}{\gamma^I} = 2.5$). The population size is $N = 10,000$. The simmulation starts with 1 exposed case and everyone else belongs to the susceptible class. These settings are the same the the simulation 11 of the original paper. + +**N.B. Since this is a stochastic model, there is chance for the outbreak not to occur even with a high $R_0$.** + + +{:.input_area} +```R +sim <- seir_simulation( initial_state = c(S = 9999, E = 1, I = 0, R = 0), + parameters = c(5, 1, 10, 1, 0.25), + max_time = 300 ) +``` + +## Visualisation + + +{:.input_area} +```R +library(ggplot2) + +ggplot(sim, aes(time)) + + geom_line(aes(y = S, colour = "Susceptible"), lwd = 1) + + geom_line(aes(y = E, colour = "Exposed"), lwd = 1) + + geom_line(aes(y = I, colour = "Infectious"), lwd = 1) + + geom_line(aes(y = R, colour = "Recovered"), lwd = 1) + + xlab("Time") + ylab("Number of Individuals") +``` + + + + +![png](../../images/chapters/erlang/r_10_1.png) + + +## Test Case + + +{:.input_area} +```R +set.seed(12345) +test_sim <- seir_simulation( initial_state = c(S = 9999, E = 1, I = 0, R = 0), + parameters = c(5, 1, 10, 1, 0.25), + max_time = 100 ) +test_result <- as.matrix( tail(test_sim, 3) ) + +correct_result <- matrix( c( 98, 7384, 794, 1015, 807, + 99, 7184, 864, 1068, 884, + 100, 6986, 920, 1144, 950), nrow = 3, byrow = T ) + +n_correct_cells <- sum(correct_result == test_result) +cat("\n--------------------\n") +if (n_correct_cells == 15) { + cat(" Test PASSED\n") +} else { + cat(" Test FAILED\n") +} +cat("--------------------\n\n") +``` + +{:.output_stream} +``` + +------------------- + Test PASSED +------------------- + + +``` diff --git a/_chapters/nonexponential.md b/_chapters/nonexponential.md new file mode 100644 index 000000000..4dffd5c8a --- /dev/null +++ b/_chapters/nonexponential.md @@ -0,0 +1,27 @@ +--- +title: 'Non-exponential passage times' +permalink: 'chapters/nonexponential' +previouschapter: + url: chapters/blackross2015/r + title: 'R' +nextchapter: + url: chapters/erlang/intro + title: 'Discrete Erlang SEIR model' +redirect_from: + - 'chapters/nonexponential' +--- +## Nonexponential passage times + +Author: Simon Frost @sdwfrost + +Date: 2018-10-19 + +Simple models (see e.g. [the standard SIR model](http://epirecip.es/epicookbook/chapters/sir/intro)) assume that individuals transition from infectious to recovered at a constant rate, such that the distribution of infectious periods follows [an exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution). For many infectious, this is an unrealistic assumption, and the distribution of infectious periods has a smaller variance than the exponential. + +A number of approaches can be used to incorporate non-exponential distributions in deterministic epidemic models. + +- The method of stages +- Partial differential equation models +- Integral equation models + +For stochastic models, the method of stages can also be used. Alternatively, discrete-event simulation offers a simpler approach to implement these models, although at greater computational expense. diff --git a/_chapters/timevarying.md b/_chapters/timevarying.md index 6e718f587..e0900bcbf 100644 --- a/_chapters/timevarying.md +++ b/_chapters/timevarying.md @@ -2,7 +2,7 @@ title: 'Time-varying parameters' permalink: 'chapters/timevarying' previouschapter: - url: chapters/blackross2015/r + url: chapters/erlang/r title: 'R' nextchapter: url: chapters/sirforced/intro diff --git a/_data/textbook.yml b/_data/textbook.yml index cbccb7cb1..0b947eaf1 100644 --- a/_data/textbook.yml +++ b/_data/textbook.yml @@ -123,6 +123,19 @@ chapters: class: level_0 title: Final size of an epidemic url: chapters/finalsize +- children: + - class: level_1 + title: Discrete Erlang SEIR model + url: chapters/erlang/intro + - class: level_2 + title: Julia + url: chapters/erlang/julia + - class: level_2 + title: R + url: chapters/erlang/r + class: level_0 + title: Non-exponential passage times + url: chapters/nonexponential - children: - class: level_1 title: Seasonally forced deterministic model diff --git a/images/chapters/erlang/julia_12_0.png b/images/chapters/erlang/julia_12_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6f394393469ce3bfd6ca954c0dc9a57caf8be52c GIT binary patch literal 25118 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

!orL>vA;fx|#wvo#U z{Z^0&yJE)Q?f~ivSrtrAe@IC|LbXL+DO!Ol6P9JMl48db!t?RieWPj?7OiCzI0G9| zUU@fwh)Bu_Y;2OZlG<6l6$b zJ7c^@S#XlTstXPeC)2@pET)iXvlKt4!A1AKo?jLNs}s(u=;-k43dRC_hMbkvHsGi1 zTK5|GtY-*RLHhtCWN1ihzzRq7EZLt!kNx)ZrIKu~(pT4y1Qr}-%~GXv8tUsK@_%{$ z#DUl2reWO5q)keSi%bz<3Q^ZQ+d1_rUlXQY`kVW6hY4nqGO}&Wlrw|!B)g%3zjK+^ zV3|yuCay$z%14PTGQX~&fiPk451}*{0p`hi8R+PIb4Z`Wm}BY!5XWQndjx|_G+lnR zNuS-XD*A;E;4%pevZ1ujBi(CKnaBTnM~V1k$YXj3*;{vkXYEXg8GpwtJN=bn8rNr1 zubY6W9{RyDJZsM#3e|ko5~$TV{Z4TLv1Nr5viytOOskAUw2SQhx7=A9JbU~&+JfM_N6er-`X1SQX6^*D z55)yrY6`u0j_reKH=!YuU&(O%m1ATIm?IDG?h-fVnfPsfsi>)OTaM-aQ;+N80T?Sw z#2qj&MXyq2CV$mgO=?vd3=0{8)(hymwOFB%r3|3SAY8r=FDA~6XR>Q6n!=}aEu|i# zg|o(pZ$AfSm1^K+bz&tg-IMs_6)^Cbr6n;?voK|Qz!m^C|37*x5q79CvzSKXs-I)1 zog9_wMxPK{SW}OEUc)}0x$KTBmnI{gHgI-EQlkZcm+x9?_nz)#c{MHn`^S$TLe3i+ zT3T-YIxk+lu(M+il~Etkj``6#of#e}eg24nO5`Dx(2hs+)C zrc1Gi7~3vZqn z@k#LGXRqUPa_*5u8~~HZV+OIpj*|@VyoG)akP@ao1i$Y^IQh(P#Tt!%Ga4bYjDEEM zN7aC)s02)qmdmUw+xeN8Ha}<^T=sDIIRXzsGU&9vCkcP6Q8F2OU#GDhU4%0YcxiNO z7+t*Pdy%eW-|Z#+pZB{8>wEBS)Q*bbXpez1`J0i--WX&=!c!N1Pwi$++0Sx3Bbzet z@p!f49TkMx9QGWz@3PM^2-NPtB~~I?D=TUNb6|RImMY7V0!s|W8&LKrCf0eZLq!)G(;UB-Mgpx||B_ITSF8(DM zq?cNZNtD+7)#*rUbW9WyUpMaNuE)EyS(*CZT7WIn{CNyTH_;K&hboGumdWP<4S}ec zp?5QKz7>UJ)Tewhz0!&w>CjYE<3@hrq6dZHQAaw%A?@}7idf=;TNC{8No(BajczuX z5-@Pl?&<8_-d>hr!N#ZaS#OMFl`+4plP2!TuwhiIDzf?nCcL`AP)q2(%GTo8 z_5OhwWQxSZ(q((12vjE4*4C8VrgA1GCNExe0~DNqNiTm|D`SpPMs)FoZ{)I?I@t3y z2X<~LS;Rj8nn9Kx?(c8f%8zQWTTD+)b>GZ#XE$hjeft|SqW76?0_XXv{K6?WeF+?c z7!=X(=@|ks98lC$qY;*k^OTg75tb)gO8*D?@=b18B zUZ&p%f-2}l!H~beUG9%kJ9+u}??7ij3`C*6I9fv$m47$Kqv9uHFaBa+jIqA_k|3s4 zF9P)rc2dC-e1SkjD+mD<#k;8LcP>+(RQdS$#B$=e&f@%UOaO_&pD}F1Uq(wMQOR6g zZJ#a(o%X21d-51SctL0ampaE5C$PhYU)Pu*nvRoQnxyVv{xF+##Qxp3vEX5 zW4Z6<+U^!$j7h~QrJ%^Yb7Po2i4ON6tVbtg#c>+BWdmk1rWTFpSCRmG>Gi6b?ryvWnTbVL>j#t(=kUGLb|NR~)JT)V*m=r|n?@r-`aZ`DGcwN7=2TO$-Y?PY1x zFf;D5YL6E}`?03l5mkbci|}n~OVDPfb8L@s^W{dy&q~8eEe%Nfmz)pKke`DN`Di}` z#wT8F=ut60$c>>HhCU`C@xA<$dWiRs&M&e&!S?i#*nVn#Y;h2k+WS31C|BsqHb{EJ zIK!@5`O@0qm)F(#g@uUnc!*bys%gk$gB|*iNfaj91hNwQ>o@OLUgm`2X65$%;DgwH zmkaLGE(0nL(7vyKdI7F)SI4OvsoL9GY!; zKz9a}`eB54Fu@?+>pfpjd-hMdPkPUb@%Qb++_e5N%gy#6zz}ra{NbnsXx+M^Ih5-R zbi6tNd+EFManDLTP#?;_Ywto{q425#o&}}y1cD}ROb4YG1SwvM)k#vfG-JjQqaKL?O$w3^6MP2G- zCSS-FVEiy@XAal^&cS8U+jcf*o%IH!rF!t6Pb7pAR3vX;_;rfGSW^21=k>jhSs+tF!uf5_Ip{Psp`x^e{f4`bO>5n38z}~;! z)wu%wQ;-BC{-{7SjEHq&<*iPDhmOdaH6;1VSK`zmW}@=pq7txhc-KG4`4^$MP_(?k zym?jqA3P}V&wg4nTR3sC@8U6qHt%No(ej{R_ps;^F}pErTlLs8hTU%R=HChi5v#or zXPsXdiulw!%wo8gFcAMHB?wfs=#us?w!(u8j};bFlTpUZRj5^s2QIEc2UsJ{<{ zKqBaRjne@BKy5{*5BZZmz)T2jmYSl`5FwReRr;vvg+<2&j1;h?vTxt6)c-VSbzGA< z!J|Lr%wLUFdRs2L=T{iPPwKBaoL%g3H}nZ#OdR?*K1_Pb=oL79-FBDCyg))7GOOtl&WCl&)s; zCxc6u1cW6me@M9#(5bp;e{8I)a{>I8ww|Lj(DJ0d_z6kWt&@Fyz#!do=-*jjQl#*h z5fg<_dKb}Tzua+s(CNSXtGYW3-ybMfkcDHr_jxH5xx~${lV{yu!PNDe zsvJh|3FsWZdkEl>apsnm{;e5g=ON?tdcaaPrXWI%K*);v*fdZ?aE@`Yzw4hM5_^LR zj|Le86v>+6c#sbyIxsWlSTD^Mldt2di8QQc5JIdGiV(5VUq8q|+un;dRfu#={LX(j zT=h#biX2?fn)r&jHkSL*I%a&KNF7s$ZG${MW+X^!MgzXk;wp|-2ZaW&;X>LpL))ZOm+c4^gC!jpQ+F-<)ycN9=&8oVHmE|uIUa+;H;z(3 zDF}kHD#N4_7&7f8xY^d*jbZWK`Y-#~+&J~n#F__o0D{OQ_Fs~+SQ?j!%w~#CtvTp; z8-O@FrEaXbcCu$ul*-K|i5c$zq5+`mbW%hbMzF+RP|)S^|ZFp3?#K)6sCde^da2TxNKGe6a}(X-G=ZG%Mf{`Rx`w z03iw%tnc~fLw$XHj_;X{v~LFA~wm4?g`23kCM5$Qnr##=q&BpKV8wY=%v-dn?8VSB_5)RxNTY1m!$fSh){Dy#t=cUp31;%?Co>J{X2%u z)x{|wipg`Zh<|eS2aG2ou~{sWt(CZt_9rs1w)MnU4Yu>ee#{VEmhFov?Y;fs)IXUR zV+?3=9$Xuk2Tg0SAvmO0J{^&f*k#icwtdFra+qiM~myap!Rs65RyHedO!d@tvzuf#~x{34#biQfD_0Ef5Gs&T_V+U zkUZ(x9L=G%bNL@a&A61dEl-B8+uLmh#oE2%@VGB%BmmK&BF|X|4&C1kTx#dq^!Zt# z55N+8>fj$IQDp1q?EhpSO6D*fylP@h$GKofFWdOWaA>b@*b?@0$77A#AQ5{Ap7)1Z z+S(SivmhgZ@8&}v$H&G9>}a`7`vKGu+5{9E75M!#zszv9==JGOLvbsz)6>(MXXg{0 zScFRI>gwRYS9&-OKBW4vvR!J;O?)}&DsQZ#_G-KvYdzfydv0;}jzHbox@>fF5=dQB z&(7Q$=gYfdc*|n73=PHKb_L7Qcou>PJDx8M__}!jrNcipG&Fqq5*^;v-u|yg)IR#? z(g)dpLiW0fZUIg}QYHn;i*}6zri5riABq_p=h-md8!Q*pKh;sdM1KgI`}qZzGt=rx zt5B#o5Oj0CkFH<}FWircLX7U*{7DzgP zv~{HqG#4m^oJ=pcHlII_{VtShcBw&GfF{}B-_QK)+3tj0?W}N|dXGIiG2u5BU;ik! z1PoWdz-pd!#$?}@f;f?0-+)}?#-|5ksS{`k4=T+g8~~2?>l9xQ;vvJ8Dd1W#04}Gm zFABsx~gs)%}o(gYcX2!<;$)ZE}%AQXU7;6Gyx-TUVB<4EBFi1D;(myA3tCU zb?MsfynU{e^Ua73=3FtJ5;}>!_JkNa4Jj8WMCxWE^TYFhUFxL@jz2>IA{-D3_7z5ap)5ha!n zejJ6Am#y?gR|B<_$8uACzVSff6TpMAva`DhQUUQWextUgCQ$v97Z#dcpY7eB8s58> z#y~7!!os@V=B-#kd(>~Xd8&g5=*FeRDvC==?)U8dTS1?_J1GVTkZrB4cbu#aviW|H zUEdz~BUMEmue{C8H;~PxIq*68zh2JkMufj>&s1_Zk7Iqll^7n*RV)h<%Zl_;5wf5M z1Xs52+3deb5HWYxFfJ%!N=b#Ykuj>mtZwv)t z;D@?v5UA?wFCL1p@x~BIJPLWt9UdL7`=CwKBVGJBu%W-{6Uw4wfGNTC*xvj1sHZPb z#xna~cgB*ulT~U|Cv%a}{_*>ZEpTY>g$+PcWD#LlCl zKz)r|QpDC?<8lW8@u}?krCv6WIc8zEj-k)CWt*9@qsiZ1k_VVV8KCTXO)80n(ov7~ z-4|UE$yr(Ynws^XQ!s7vU`)ob4=+-fLtBv4%jd$k{|O5r6D&(-Doy1B4V@6cZ|~_q zC!IQql*8`bJ6Qh0f}Vy@px6_|(TS6FY*m%K6v*J7qixU@o|H`yh8&FP`F#XeN-FXz z>=~x7N;RLbq6hZoATqX-uh1a^$N<=rZ7=z!*~f@E37~f(IuLi^mW(s3W8*iQ!HlEH zk=cU=l%`z7IBqr#Iw$x&MR4n!QV zA3vFLd}_*w09!LQR?SUZLGvgEJqz4lo~2jB4X}-f6R^bH)8YFt ziP9o%Zn@mcF*YdF1lOAhlK5)3tBvb3Emc4$H}12^{&40`D(wew@%wN55uj)mQ#6HX z{eZxUzEC_A%(JxZ>aIxA+jd9m##eBA@tgrQV2QLIHGw&DHNPr$F8f&Qe504HS6EQ4858L^(^ z5p*8>nG-nfP=uU4i8OH*M2^3jbxJvn`^i-@7e8P~LAd@zMk0|P{&;)OTp+KLk6Y4m zs0)o=;wVBtPfRa>R+p!YT8Vx*k*F~LvQF{|XH=mC^E`J$UegYX_>b-UY8dm;{y&tTVb-LxC z1vM%gOLd84D*)641V?T&6+`3SG^X$EgnXAQqYI~~1FVCRA>n92x&Ofxm%x&vtC3GU zXI-f&P7#3UCS$EVq{f5gckh!$Z~~qvxk#48I>0pe(J6#!{5G$kuUFc!hC;$AvOVt( zz<5!hEac|lIX*h_yPC{F3K0LwqQ}$4KIwXmBU=zbAOdVzBO1{J!h2a|hu1`*{Qcc| z=d#CI45(FaZZ^dY8||_HAcVj7!3hz-Xpw5;`&ZDJ_~KF?R=H6aT8)}Yd-GcSx{Vfz4HLMGak zo}Lbx&4tc`MX3f9ONuCC0@Ch8G>-R{>0`@t)oQ)5`*adDkqMZ6vDEWLxCbEjjtFg1 z)k~qu3I3tp9Heq_l@AtFN2lBFA)^2zC-+`}71;zbX}`-qh!ar8iJeZV15s21AYkE< zQaEXdqroYf!pGuf8R6kgLoe7PKv$gw2jEjv68Yf11OFDFixn297IK0kUFQj>R(7vj zy(3Kc_v$R83<5@Zn(sdh*av%Qym10VckQMleSj zySknNf%QYlug2s7Bk09Ah(eqn*84}g#RPrP1H#d(#thPk zRHM3Zt$w}4k3TVPiz!h^lR_YC^HevWZKum$HL~OYOdJI+w_^gQEON!TF-JrowFaP> zI)x#pNG9_uPc5k*K{C0fVo?MiMt*-_OW&Fh-o!Cnwfxyt0^-mc5A+0qoqYWy*=D9F zwFWa-*I8sNC~{t)j8LxQz%D3&+-*RhX5=in0)(J82gRpJ53U4v)FIx!Ug6K3Q$N7@ zj6Ode0{uJ9Xly#k%ZwL@LX+f_5_@_zLGksCZk}obbh-!-IrSUl!HkR0MBOqHI4pSa%D&dnH~}SauLyAf+NOPkRwgIzP;{I7 zS-r^*2sq{~=>A-N*)eDz)f)Fi0*)8yOe!745*L9ieet$Wf+QqE=H5?H(1|F0M3K`4 z%=N#O?$$aW*am1&_k#z7kQhmuO)%80Q%Lt-mDDcUW`?^p9v&ZY31i29F@{Th!FwoZ z@D-{CS3(F!eX0#d@bWSwV!DH=I5^KP1KJkU(AiXv*K6!-Oo5S81|hq!K;6|R8(<3L zR$~lz8vslRF{vdkl@|DE!C*>tq_RU0c)1+RR5aH%7ebMEi*>~@BZe2u@ML_+SZ)XI-g0}=!IlIS)@5*Qy<#}<)V}oF3 zG0WwE8t-E~3I&=O10c)%@Zm#&Ow1L)U0_Io4)dd8aK{cJB0gNkTzZLOo|=sMq1;RT zNy^O|&>14M z`)}EZs)`Cb00sfSF&vCVgp{`5pWoln&h$gjgwMt^c0<<&$1O5m2Zlfs3damI%uwZ| z5)l1DNOnmEq@8hDTHx2tz$cZgtUfm+pujPgBl@JfWn8FQV(JSZ1I#tAH$c(k4|)Ya zt8n_uB#wlHWN)ec`r?%d`zI7R+sxwt24X*(x;~}g?%H3W1qg)qTvK5@-tjg>{z)R{ zvgal>>|LTsu+FC&1j4(N=;ki>!N zyz!(7eieu!+MMu94l_6HFh5I~^>6IR_4AW`N7+)UQp6VLH1DAyeMC9KrP$OOL+tYo zP3|ek%m9lEYyB{FT@)PG5vP1L$pdo=yP!{{2t<*vALoYNfm}cVq8+FX0G--oF`DhL z2E>;HqKhsdFR#dib#vLy@wP4k9g0g>_qZa11V`e7$n_5qas+8&<*j+DGQ8ZZ6D&6< zB0DIFk>(NqKt~WX8hx*}OLqSL1p*d70LBTS|95pAmC9jgprr*0W^G;FtKUKRZj+c} zQTZP{9+7)7W}0FRF?+9n!^21=UY80e{8p#?@E9CU`_0iH(8=&ZL81N#jE;cONYI!6 z_xsz6Fg!5FajxutHQ9N8d*JEmiQxUerz=}UjQM4N^rSpD*9g#x`uieQ6NM|?VX`^E zKsVOce?yuzrY9y6v$HFHx(k%fKI+4_Gkg&rK7sym@+w2w>vq|VOEw-lPV&b`PT1+~ z0^ozvfST;Tbs~G}D+08#>A9pRWFtCzqxyU?=Ir~lG^xJJxHKs=;n^V2d}-^ul0c__ z{#5?Rxso7D!@|a<4-|H`jf)ND!xXU6@^Us-R)%~BQqCJ}F3JM9{9L2GA(90$_-`|N zYf^=o7&`<+T(R3{KBS-bQlJ;wbi=Ha9q+|2$7;!C04%v zNegfKcitFg|F+#A$0vew7ddSRI>E^4P9T~)^k>bTIl|^L!$6<3Yeo11YK-@!fhB+E+9ue<+haAHJU0iP<#0|wI zC$w8=^Q>JyK(Y}L{YIQ*F})7ns;a6Wh5r5)1Uh?BQBkc{Xj^O@y&(QR=`88AI3D^k zCgp07NIbXnqwkNgg{TDK*cYY~FbqGi-ajX0Y? zw-C%eg>qzr8JEA)WkQ=}+LhUWmK2DAvlA4-+tvEb0?0D|u2xQBEGkf{+WrO|logpaN7kN=n zusa!;F-&2Eiuqh?#4=i=H9QGipov*L191ZQX3S>VvQ1MVBRTgWV=~xDET6xl=ObA0N$*Ua!cq#!}&7Y=FU5&|I~MB{)zE zs1V#-x>C=ki%uWo;=9o2!GGFLP6qiN)LSNlLa5U3`32t2qP1NVPk43Fzsc62)k#e7 z(P%s)Y!(B5lpMwx7>-`78XJ**yPj(G28TB82@fO!nKLS$KLRwD(5Q!xyqA2!lK6#V zeeDe85sO{|@c_AluYRNFUUp-r{oFRrC7H>%(u#J>%hC}sNFkEzthiCkB3y~{l*&HE z5HCIFrMcG}3D}u$Iar##@96qaJv#&%7krmi;v>J&QCQ>{0wNb*Jxk@HW9 zSz521*~ZLAAb(2g+>Q?O_)hl|kKi|b8khBC68}sLsRPRCe+(TPa$%#H*0^%t?y0Um z_53XTXHq846TMAxJ2G6m;db{lD_2D1{!91X^d5?Z3SLM1fjG&Nq);>S0|$c5n@Myt zH=$yBfDV>2A$`oCXYQi0Iy~dAdu*1}D3tzCQFyIcdd(a!ZSDz9D3-!U6%V(IYMw2x zgRdCf6K}ed{Vo6e(!-Ch0nY-*sLfqN|^&_inW%e0Wh3(@##Z z!~j*7_c~lplt&+zKwxXT@%pJ5pF$J5wrkPB(Vzh!;h=DmyJzI}57&nL=znVgGFlG0 z;$+uxvxL@D*RXqodGyZF%^rOeyWmb5K_J8iMx|(3U&e}`cUul(a_7qx8fe9>{L^woLqIx_;|2*7;0=hl}7ld zIm0yqYJ@4lBhn8BW5chvBG%s=KfO{k{vOUe`fFk9CRuKFLLpY7QuYzV0!-S{bEaB9O1!FJQqPN?0s=_4`^mLE$&e9l%r8 z98(jTyLqBh0=E^^Zem81#VhgmY-LLb=;(p|)^M}pY+8hpq(Ux5#au}@p`4D!eH^Dn zUV80VG1(U0IW@Jq)OJQ-j}Ie7wZxAgxZ)l0oXl%5H^hNHbhLbTIYrhMf%Oa#B?q{c!x7wdhYdYNZx<~f<(##gioEa6*!ycYV*9CI zBL48#jHSfy!txb|efH>Mx1}J{;IWsF6c^p~R?)-8&8ub=b*#+NT`{_QNume1%?QT> zTxN$l8CMZ?x?z?^ zY%Lk8b8$}k7|n(HU@*(pXIklQMfFJ`9X0BA976gNl56TPU0=KxWjdsUI5wC0@>P%1 z>+qf$yX<4O3MGY0MHXr|ED1{q4vvtSAmA)FYr=Q;w%QFMf{(``-+`?B1nW_Dab=tx zOsQDrRrV8Ej;)Eoa)mMDdBihRBF4wDIO0poZp`pTjWg1XM6dLvw`vr?qSX zru=vK{#G2Lykj42+*0)W<&*K)B%FYs5N|%ZrT>V{4WLwUK~QqdHeXL93Ps*f_8Jols843p!LhiYp#69 zW}Ct++b?T|0*>-4h^fbgaXVlh-zhd?qz1=gHf@pYXA?w?ijcmLTj?e#ox_Ko7HU>! zfyal>AMPdDH!;YT>3lz89~9=Ebs|k%Ip67B>wj)Oo?bD?Izy7Y!|l8ZwQc!-+B(l@ zxT1ECPY5OiqlO7#NOXzbTSkrOy(GFIiB5Ea(TQLXHF^!Agy=#LJz5ZD^p<4w-tP9k z_rv{g*Rsr)S!d1J=h@GmIs5nj9bS8b!+H9F#t2*2i&}rXPJm8Xk#CInzeYX;%Wmx# zmkLT+I{U-XFvUdDSgm&vF+Bwl_5Exty=ISO$U!Per?&M%Be?Df>}Ft8hhGPAPG&eC z{_mUgd;gAEJgq#A`FOeeM9l7Q5L52+=gK=c-ugSO5WV3-Xswt_ejD{DK~n7`i{H~W zxdp>G`q^2faO>c0_j1h4v^QfOite&jvg|C>n)KbJZc^NHJ*4!X?!%g$EqdRN2{~bI z!e=K0U-k_p88SQZ3#-ZR=5NH2-S7sBlU9=YuH&mI1YC{@&Q4tCL`1fslJiAr>jJx^ zA?tq3=VxATy?=5)eE8AW3gsqIU&^;1Zr)nU^TWZ}zj0lBo_gL)biMa!j#C`Yy=KBe z0qa?6@*J@ojoHKI9h(V%?HT|)*N8?f25jTZD3;1Y3 z4swG(XSvUwJ+3n)d~J7rIg{he`)Kr*0AEy0zePM!TI87ZKsoAa5+fE2G#nZBlu{*K zY*o)FhWHa^mEJJ-3Gqg~OOr3?r~-HXkV?8?msf{a0ip6z2b$xnbl18mo2D(bzu%{h zmhDF$`2Cg|nhs$hLvAz4C>1HaMH6a_lP1C#a!MX75b2_B;siy$XQO)0${r}dJvGBp zqnaRq5GnoVX=?L#YRhHNOZr*2VDYp_t) z53UN61-85O$hH5aQq?(P4aQhdM`L*h34`+>!F>;fJsp z(|DKMdzyknRjM!DI|Rr*Fo`Wr=JA%_LR;Vs}h@X8dxkA^U3%|&OSVHXLJHb?nWw6{}~G@cWvQdGyo8z!tqtz1u@J%i#R zdWDgZxx#Y;Vup}yj=9d_&KE45ieXd(zi?^GN^Y0TDfMZ2>@{s^LHk*pen5Ih^!bUjA`~G9zfKc*~{DK9e+{vmNrv4JZ ztr|$-;|Z(s0xw5#$Z=GHkzJzAKybAS)t9Cu2Y(LNRT}lqeDvyajacvMtXyZyR}pm^i+3iXyXAaWVFuD;K8B;H zWc;3sfS^!R{)7aK2WNASzX#nt$R}>2^5(RfTtAd}>I5IoGt&lV>Wa>D1ZI_WbZyQ( z)Em-<-Ey+H@V?N}(-P#wCDu=T*n01khtGiTme-9TRXG%_mC!#?=S)iUaAWi< znwr2El6=3<+_yzrTjes##(AEc?#5DV95P5Wdm#R)#gNwX7kumj!~(==yn6{LDYiT*ez=W(=RG0Wex5zm%%tg#>FTaZmg1W>hR7Jb zINa=ZI5*op&Q{U>nG;QAvnSc4o-TZ4yuPN`I1cqH9Tru$0!H?0>%Vy4C zVGG{wB~4;n#n9zK&ve|+(;tN`Jy}C`QSTQ$yM1nP-hwpT=WI;$EL>?>el&nTfhk1m zVG@ZbEV!oEXSdf`nIA&>OV|Ep)}|CbrzkR_DaVDduk@6YzIOhj;{?r4>5vKE4MgwC zb@vQ<3M<(i%^3{eQ#Dblm*kdoe?Vn=9%ST4kfB=en7edGx@Nr5A&Q*ceJ`Qjsh1X; z;njPj>+mxLA99QHWGL;qIT^D0x^M}&JM@1mh|4H9R#>JKhvd2kX+zAiWj2=jBKYp8 zLQw24<(oY^EV*F#5O&YgerG8@fetIllC_r2%7TGcm9hh7a|lHb`Qyr6lRQa^<|F)xAp#zJ^VV0p;AjJ&1R8;S;T35X+V6<(c{bv z!;38HUYk7@aqiZHX4X4#_?-0LzLVTq;UXJR2<=Kms#{nh{(Fk%^gGx(qu38`y0CV+ z5ph?zM2bF3T_2>EG3S&-?^I)6)SC30oUf@^Aaei4H4x|);ItLd zc6T9BFUUY!Ds7->?iQP)YOnPEy|1#`YMU^sujZSt{DewZX`_KBZDPTC?C$pL70Sru z57sDS;?t`&n|Lz~(izi(CzcDH+0zwy;jmOfP>rm_dHAt2wyW)xXJY3Cdm>z+EgbL? zt=^YK$UY&3{U3iHQF|6bwI%-4Mtc|xn23Ko-DWtHnW&+7Mrrsp&-PR0w%bTOwHK?y-o4rCO9I(WgF3#GcAF5UYN&aU2EWPGyRoqP*t@S~wl z@uRx0^9|XlgUG*&RFG@*<8Y0D4gC&FtV*ps$js|c4^TInnr^mtLI3RDtfTa52mMxJ z*m-w%Tg4}zNoSr1mXmG{3i&9^@e93RS*`#-T%W=qGD^-RYaOpDe@*p2MB?FtDkioQ z->duMXbNwzAbw-~FL~c;m#k85UoVhar|(rUvR5ed%g<&lW-<0nVoyEkb*VdI!prErZ3He_98V9-(4+pdTY8;dL|KQs1?t^CgC0cD5OAAWr%lpX%~+PCQk#SO^A zez=@tQNog;u5H3ROXqu zdlng;<5Q{Nrsds1*lZrs$ZgL*>LPZqAl}}u!pxpna@A}WrN|3ubNkd`uh>XY&C|$^ z3;`q2plCQFChg>WmDqZakMH@q4QsED=VegA9V0xckf7HXej4O0SN644iD-H9rG@vX z7+5+}9<5`=I{Y?b-ziIF^jP?oY(<22Hj#eh_+4BX$@Qz)*Hs zvF|-)Xj3WnrQ`+;GYSRwdr&ItVKcB-Uog%!a#z28+SiJ0s!7`Cz!J8oHhSx2AS?Wy zN4E|{M!jll;8mDY1|h0|sT;1ZVG^$=G<8}L>pl4F$qXzV7lC5uv?}^$lo5%~AE{VY zo*jAzvi})ww0wkKR+;!v%#->{Yc|2|1eS+>XK5ln6y`1Q>R#s8n$cH07r!D>Ryz(OsNe)-3yBwCeV$u~M}@akF# z!;JoyV|R2oH{WV-XUQeuM=v%J1}@c{J`jNQ)cUq9@j{#wLgQIUz4aXQI5)9u^vdg} zk>d~Ma#jZejAj<&KmHRBsNM3duc#?5a(-N-mVKP4xUP3xCbP$Amw!s`cTr~J<6{)+ z`SM(ZtcFEbKdnRvWv*R<)~nK}+|))!`L+-;OK&2jqqKBZ1LlcdoaO&bn9*{Uu`H8Z9ygc`@JD5e{2Hbki2kYw=Ez0yH&XAxPY;bNo2=NI6UJb@J~Ytb z8D9EQ`~9xO^@DE}M-opGA z`0|Um{IDn`)*EfKSl7_ABI&%Oi7KaJa(3oTbY_IC_dHR|RUPx(xX{RO;yRfY5M^!Rleq`t7v0*amcB1KHN*lS6mnFXF{C>RtJwzl7t(Kv+hv=&7>p zb0uO;>XAGWV(=NX^?Oa(i$a*ySMF}A&4LzOmUjl4# zE}J`k{$hl>@OC2bSEY9N^3#FxzW0m@L`Hx@e9k$Z+-Q;81XfbIn|!8I(Y0GWNSj^U z1{x9$h>b558%+O9ynCU4N`X64nP(qJ36Z%u&KyXxrB=djPckyls>u1| zZ0{SCX5R1Dq~a`k;b$)XZ22bhST26#Sc&r26J|9iZ=`NO%!GCUl?yaI z9ByLS!7mCz0#s|P|M0m;ntIZYwtxi$Q}Si1ykG)-!-YRICW_bBJ{-|Jq7P7g7)dJOAqHoF3vz6JxX1eUeIP>L|zMtR4 zN1)*VHW>dS?Cf`bex>IOgMU^#jAjlBwXF0=fN6}dAU*! zTU!KoNS>V7yR*<84!(JuuV|!LeDKX4`}t>tHy|^sNT(a|Pd6ZIL9X8(!*0wg4L&Ah zmm!>v)8Uz?%R@s{ioRdMbZOk%f>VpX&fLr4n>$NVT@9mI4g zhW))&p?5Vn*UwwB;YZLJ6`@qd`WKoH2!hs}=(@Af zT9Ju_ClS!&fcz-5x}c}JvhKKD0J)0@?2U)V#KZ)yjGv#M<5pSUXKTKcYk1=tDC6#K z-OJc|JzZ<>E1aQLsKx&9xaOC_00SiyAp^BUX)#7?WJUAoBBIH9DK%&`WJhss$O_+{ zH3Q8BZHH!)p+wRk2ze68-50qs;dZEB_eyTrtS{+ZpCcu!0EX}=)yZvZ76+XY@wTlB_V>6 zrT+qf$Eu@sOAg1}?eF=HFpTi_+aM$xEK3DXc~*k0M42rg#nVf}6T+dQ83?hILzE!d znF%!t?s90;juRg}SIJeeQDH{KJ=rZkc9EU+B;)W#$}x(OSk1odQJj_ z3`FKvKSyK^4<3Z;oAXYw1ap0~9Fr8rKD2-E83{o@2__lvM3AuP=+FOe!6%be_yM% zKLa7%x_^GJQddE;Na`Ppf?I5qLM{R6y(X|n?`v~&mMSA710-I%FZoV3uQ&8PJdPZJ zlA$>L9E8p$#>Z8+koQelt%1O;9Xs3TC@!qdk+|#Kj9NbY?7VL{vQcABBZ8;j()*%1 zGDpRk@FCh&Wi$`1=8TL6NfZYVRU2*8n8Qb+U`ShzZ8cg1O5-tDH~-HE<$*DwU>vr1 z^w&$%uQFp$f?$iEI;wM3T-;VcWbJA4!wgTWk=;(@ko?)vmTA3FMb)$6dny2c@P5hldW+wf~GUr%66^eZtaEL<<<qTXe|8ZZ9DFa96^KZalZU35-mgDIEKC3I!LWnY7b7O+a;fY!euDwd^qHB8@^a6b>+@@Un zbO(dtTdzSzkCLz%=m4-}To~WQqqBsbWgzANQj zfDT9hy|kt7*r)7Q$KBH9#&v^|QiUtx#xXJVY}8Sb7yF~YPXdliPfMEu4w%xgvM2H1 zV_xebMohW6Fip;2B?4+JMW#5Q)oS!JU!DO&>yh*ria-%Iyre{+VD0~3&Cx)?#Gw+n zjkm7Wv!6O7JuAdQ*tS0e6 zg{9f#QNF>K;Gg>o6bPhf|JKov2Q{qM%ab`mgCuQIK?y4Ay!id_-!zyXAWi54EPX&d z4^H>&;u3T;1~IoElB&ulKp0^$Rb_2b;Q<;J0Jh*(*)9=P_GD~|%aK)4eG@}^8Lca!(h z>`|+CYRQ<;cUkP2(>>qAb^)pA3j!VZZ-J~IBtkcUycTfu^ceTnzjuXR1Abc=e)sMy zWhO9_fShj@&?%Q+-9uq%Cl$gqE)D8k@*5Xw>B~XjXR-Xx?n+-2HFxT9IZ!9p_c9`n zn81};Aw~XJ``gfD;^^vH-My4js)BH<03Afb+_2I@9&{`IAqiZFRxcpy0q%XBJZ{+w z`Pl^SuV|Q`ERY5qf2r`ZUmMIIqUM^cbHrSqBd~(Fw(y7i^aVwsVLk=A4G=+BUw=mg z%>cw2&cIyzD@D%)yl)e1|0#y0{}f8i73sjTSLmNL3w-c^1;`V5HMw%6Ss;$NjCwr_a59% zyoAfJCZ`ppu5^jBw05s(_!e5fRL{oOkhNy%cLQlz&13xuvnI3B9P(1VJhM~Xn&CT~ zWTmwllhUk_7Z?~gu&PvVcXL=Dp5EnSk^RKOP~E?JINIIqyxq&=wve&8eW(;_iVH)U zlN1@c3O}V?iPzxA_Qh607?axn=|92DLsu2*Mn*>R3_2a_#HeG+%F3LD(_i8*U=%86bA7O#TvQQb#!cL`*ZEDc8w!y`LM2JyKQjF=Q>@gi6hHRj}VR(&v6 zWl|jEk2bN6{HWkHO8*Z*2iSTJFNg-FlSz-p`v1p&D)JUP*QQ$nIwEg0qSk%R4i|e9 z{aXTti!}A?9IuA8|L%-6{@^_GtMz%J7cGLkd6Sphxe+b&^C0W|Fl%LH#b|M}Y5!+? z7!kLA?OJlnNq*0K!|xa|cSE&VZv+VpN{BHbCk)$cKHeBolae^Ic=Tv!!l~tHufXUF zT8W0DBHNj^kmLQ$=~@TE@H(WvsECIMJhrQYuh6GF)+=fX;_?rJ ziMf({cn-qWl-J(usZ{(xMQkvW&bKcj~Fz2758mE@sQ7BYVkwo>OaN#mTHhwlL z%49Wyj)SdjW!TF>2V#=AcuUYMfaDVgoQ&kbrWKuqWmg7?)p{o43-Sm^m=&CNWc|=}8!EI{7 z&7V!alOJ4UaI^YHzkla(nf;tC8+IGk@OjbSU*EXXQd1KK{fme11b^pu_)aeR$N8&o zZA{Pi5ZagT1MQi`bFR#-mA(v3(zUYpc{B3n!xAZY)E7h&D3K#?hUGc>#C zPHP{j_Z>_~SjI(_mX@X#c(}WV>y$ynv9z?Tw(9ly^$drM+sM9pjMjTDzS6u?HI-j6 zAulgot$p)`DQEsB!`F3Gm`t__eO_1$VGx5NMFQrH6G zFE-{$Fob>&N}x@8PslvUP)y_cK?Seoj%`?u$JdB`LcJ&tUrV&0LQV3@UTaZDVl({) zs*#59zP>(HfNh#Mt(vwrImG1OTWI^*q$Dy}W25rq%4IL3a_xsN7Zw(njH+{TZbfLz zYAN2Y=(%&T@rR;o#cCql&5`Yg1zsJSk2K-&oODKYgb?#5=)3$J!Nj4so?SCm%GMdZEkgw!oto`@ za@M7#)gxA0Pv)x|B0F&+Jdwaj`3hOAxZvSjeF=uqCH0QQyuJ0kGCki4-H2&?)m^r* zGmW*06^`?d(|3bgbrEURTj=Zx1+sQAfnOPv#4_&dH8u9GmkIyaJB&R2UbVSz)SoBa zu_$KA?pB9|h=iJiwarsrbB)FgNqtqz*%w1ZJ#hU_=)Vr07YX&)`}fDbvT5KVUCbgM zc5lZ$u61?zm;AJy+sPw(N!Ogp_912Fc5Uzh;F6$zf zo1U%Id(JVw|9-Tk=iWzbWbR@R&G+`FO3nvDDoK;o|A zqCP$3pe;RGb+F7@PMZBm-P)dn-T#W(yOedS^c#XGNWm4-^1`deGKQ0D>pMecd&X;8 zHpTx`b$);Aj)Qb*Ton6tu=f1N*YbmV1_LX!6V-3qT6${Fbz{lsC$NyJYpsM!Q831j zpM;j|TSR!NgiWT-&p&Q;L}MXc*ZqXCShQSi-)yr>c3(H7h8gZjskP7`^sB^cfx)EF zcvl-g7^38~)q+zwaLzybi6PP`1~gWL>*Jzf^5btZp3k0-6a;+WonS(c*=uWo{uP>U zWn0GiZcm&wSG(15R;yeKG#5ed9-zXDq|^J$#upJGYH z2&={zA{rXHF+LcyGy_}@dzPB4OnlVI-+NB8ZoKstIF%Jl|JfZ%at;vzVv&*OgV`+& zA@O5mSjZL9RziiKNRfQ+jcm$FJ%32L@vHX| zq97#c8#q@%^iWx9ibiClU1MUxo)I5D4x)+U&(B(~N|M8|cuI$E_y0PMg$zcT;4nq! zQRHVupvG^ex*r&G#9l)3Zost*X7R9;UEIYY7kbHR*sFW75K=O@#)E`gK33x)a=#0{ z3F08?I=Cq51n=88q}K0;%C?N#)KhG55CsxA&?2FOHHETNy956XWpSP+qzZ+36%M#0y{y?g)*~yK((<#ZDZ1*-`*ENE(Mw3+ zKjGW=qV^J^&I-3v(uu4|*cveFcy>?u*BgQAbr{(NxZ$1WQpG8q?wDBx!kLkFuZ_fS z`K(Pl;MY`LyM)l!z`0khN-&}ROO!6<&N5Isw2~LfS zn9ku&>|yA+E^+ce)CzS_vfZL>4~oq>jEJ^WMpn z{0btS0Gr`YrRLk1?3peX>r$0nwiE{n1Sa04>e9R`a$F+ZtBZT9y`id%Q9!F6hOSw|$S*3wxNWd~AOfxB@ z>+gpyTyIo|aRhZsNL!IcUllm7W_6vc>0F?s?E_bNlw20}!r#e?n*T*$W-w=*K6Y!2 zI(jJpdt1|vUii!WS9kU}KCqP)T1lW-8^4ZCCcIBizazcxK^<;NHszOVns!%0^gNn$ zHT4Ayg$NjejYl=xpTx@N2bSRw$l_ib*}bP?_s}>5BEZDiG2y3c;%dCw#z%rmF2N~l&Stfkn|_{mC>;F#^>2h+0Mmfb%0UQ zF4G5qyne$kWBi=kw zKK$0<+g)c``J{aROUgy$SZX1N&h>x7ZaTUbGdZ1k-@Gt7lHDPo)YXbyJ`FI%a}v%T5UF2lx9LOF>P$8 zRdvn#_e(xXqK616#=#WJ1{fIdOmP|H7HNYF32~RdaL4kWHoV*YP^^NZ`_e{r(b^zp zS+!Fx%sftBF#sQnloxYW&=XvFDY-@ zSNc`IpW7Zxm=Uy9!R}&$(@gsYS`{jWE@)H?th~+9a6#cMf2nSc2}{+h#qrrM)Y9cF zY&0N$MH=w#L)ZAZ0Yduox{b(l5G~_&R9a)F}jV@tl5|ObVN7* ztZ!=!QU{hmh~WLERi+myP$PQ{!=YYfb+6Qwd?&s#?f2{Z^hwjXnC)8aA#)_dvPXvS%ZA4%YwQ*(MBhv@jXR?)bHO>^PFSKdu)gFXU5 z0_5l(+@<`9J3ktapIPLJyF!m}Am7 z@4l6a`b+XGtz2$xp)NbmWLxYUg!+G=9oR!P{gaGD5s{#;SELsdBb}qeRr@!8It@Sn z*3}<~QaQeNdUo*G)1!WW*d@}lm#OBK&LkxT znUg17Z?dk^m=%WO1*U^Fs$>S<#)Zp=_xU907igk+nunZ!oo-0aDW`Fq`smE>Mz1ei zoIAAERvNjo*pza+#mT{VYLHB%wtMh*dogB=$rjX3bgSY8Hr?-tZ!0En^fZ)_kCUKr zbd#)=|RLl38k+!*aCc-pmZI@MUosQYEi+51;+0Nl{+9Hzrpx)0+=q)g&e3HFgO z85fG$?I*LQsfLu|KPDSQYE8^ihg^K;-#|D*F2_JXxK=Qh-@9S*KzHsi%ov&rIFm{PlX7%q&igBrIABO!xq=9JJZWGuwy@2!jXXmC4Lo*3vG`DAxyjNQhP zc7^1&Hv5)PxpJR*Xf0uNU|}RwonNT`j_cX$quaiYD`5Ofb#+ZAH7Dg7(1rJ7F`iALTah#?>LIV2<=vR4qxt8}r z+pRn^v>!I#e@cRQ1D>*=xv!}v(1^4;ej;Efn;u2qoOrS8dn2EDEs&624aQZHD@@?) z?f$*u7>;@4KQXu$+gH}LB^UPe+LQ;fO%6l57gMzK#Qv@PK!bNyrg%%)`K-FTnobnc zlu${6gelhCT}hrmdyC6rrr{gd4|b%y+0*pC36S9TD66@NVxX1+8w9K9*-^EN6wwm8 zoT+>2Zgz7Y+FFxRZdqge$Jx-dQ==-JAh>jciMk5c9E>8$r z%JoILmXXizbKHAvV|rR}^ULOhU;J+dvYz32_ff2_0L&pNLu&+v7YX@#%chN1*F-5| zLVvR>DW~(!P)MHv&ei?;@TOF6jLE2zT1{b^x2N@xG_$Fbn{wbc2XY)iB@kLCfv&z5C{}Dv{ZiwVd@c5jw9(!k9QqSbH&p z?8O{Vttt0BBU^DsOLSe;#Ld&h&XeBN@1f#d-*7BeelTJ27|w1<7A`eILHZ{WPKSl9 zSC(L1R^h*2U4FN46roNcfqJ?;xNAKjcB_+wX0QJPH3p~U(Se)TMov{U>~^^<;kK4> zmmi6V?Jl|P_G&m;QDGxD0cBNXa0*gV<#m>+aUY5@;v^6oZ++mKpg_8CVF}j1*`W05 z@{YXwX|rr8$`5kW+Wp7pORBC1VUgaFWD2ym=6Z2M=Hkuh(~DGMjrwMdD(U(LFUP(h z(gk2#duzHMk6L1EP+4>HF@!q@ene^Q7g*I{+!MMIsrG!gIvX4x^l$VvT*2U6wShy9G(`Oqn2WH2D54;#LT#kMdt$G)Id@20vQwo3 zTm8d9Fyb0$t}uBNf$^918v*=iZ&L5e9uZii7)*h^=F-X~T_L6yR?spvOd}#WVQBFx zubGYr@qS@~Glvx4f0RD3OVZkYu`&1K_}ERs9JRjWNm5ZP_3v<3uDIZ*&VZG_D^!Sm zJwp5F=!SEX@wF04{{uc;-zq6gE%Lp=VlRs)98w$ZX|0HY+CU3w`E(k)N8e9J?;LbI^7@h$c`5_MPi<*msjYb03Zo z36u=A1mUqwvfIn(kN9uCLug2!p`gsLA{Vx}`@We@pV(;EGxc|cv1L0R0;E9X^Id*X zO1rljZzEL2wvy4IBniaiJ``b>5HNw*H(D_UxnK0{F|)l8Oo8Jl1tqnVSrhYYPxYp;F$dayR}ntgs9m)1 zU9xa-PAk_M`ybv8D)ZxZC7E>9SQ-SE0qo{jsr^NzntcuP4awRUu{C>PEaV#I9BR#i z5B1K^4U3DOlH%Trxd}rAy4uB@bjz^z{-|28-j%vETXXGXTCvOyVGiUo_*42VJbm5w zOim0qjVgv%JFjWQ5FRiHwK;oqY1R`>f~L*Rg;JHuS0uUiBT9BNgo@bG+;FST*Al4E z+wayx&^F{eFC3mdiJh{B+XZ4aP$wER#)zweVv= z>`SOVz6&X@f6$b5iU|(l0@I4ABwMZGtmUbt_gxe0xP$h-k^jZ9AG4zY!Uh^J;_2JW zaJ>)+_Tm<7bu8#%Q%-RpL@Yq+it~jXm7Nr%PtnLoY_FNya%OGtpaMHE7fzcrSFPsb zSKPg!RhXf>B!_!95f6np^J7k0vy{L$$9G80xVcu6z~8I*-)Fcz?nu0lW@TNL{(8lo zr=1Y-fuL01sZpXhvebqSD)Jhn(4uM^Fn#jH6zi7`ObDlg`vqrSHaeFDUFmuO@d57@ zVe>aF;o+S~`ZM-p*pfCN6wE4o8J0qEWDwn^qp2ZwC4Xq66rD+8ZeQD)bb<2u<-m&= zKeXWfNMqjUVeU&$A(E*p=ShQ5<6utPf}vWZPVGrc3*_YX@ug$t_Z#Dz-75o3%BGwz zrpQ*yNMs%`qp?11VdnkV3*WrX<30;om&qolJrffJP`6+nMc>K3q)MO!1d9!G`0xJb z>Y7%u8MH}{12S8ZHQNt($ktRXS?(eS7roC+fmGYs!1f;zr;DDtc?HLuoki7ymk=N6 z#O$e8rEx)1wHuidEUK1J@A1RP0mUWxsieL*VLMW2`A$=2hT9}-$S)Gi3No{WY5=Lk zubcPoAaR?Qs~Miv+!pV+@JSJ4v2R*r_$cowb8Fnnj8`N`9AOQAskcRslA}! z!1JR(K455wRfPb_;xKO)ny7VX+#S*P&G@)CZr8H?s+_~<NQG?<~yA+l7a_lcW^rCSMqCGjl(Z7?27 zk4{Azk7*l}R&4#f5B{B@J3r{mI{HxL#-Mw!6hPKKzCPPom{vVqf8T@`b^Y(Khr)BGmP?2rTI=-X#ALEj#)28oSZHG$ALr zv`lzROw8A>N;~?Xhs%T)6cp4=`yazSZc6yLYibU+h2TR)sKsHTR!ubP-88;JVXo3x z&D=VFV{fG%3!}pbukz2cRD{P_w=w}!i^9yV%CaYzc*a?ng1`|f1HGvNG&D57zeG1~ ze`OE5N>%&6N=Q;JjZ?$J!*oyoJk-`6b?H~j5EXD;`1A}L3LWw0@(&XPl&F@kJtpli z>yBLHq3WvoMsi&(fr%kF;VW}GS$Uj8C@l~}+cf6mEI-ABqvPPWp_LNEk<@CQBGu=f zYveofZS>C-6PThp%qT8Zs2G_69vAnWXY}Abml^Ol?PkgP_-9a=v3$I&j0;$5(Mpbd zR4}pKXqjPy`|@)l$)&&5sr(ODZz(G&0icGzV|;&}xXyolwK`H7MV*|KRA$^F84=BW z=Z@0s@OEIYRgXJKm8y%2i&FU}HIwK*K11+AwRe-qzbE>oBmNTpQ7zTVql}%_FOz+n zevdpPmQ zIJ|axh2+=DlgytE9)|b(E%0$Av%9Xj)?augO-H1f-eFd$!!hHmGxVNBs)0wRR7+*( z589fiM5{Q5HCvrEzdxe%$9TQ*HJOX4a&N@wt9)%rdaWL5))=dGrE!)nY&{O+)ODKS zFs&Z5&?UV5++97zUQnNv6hxG&@F~Y+Cbs%=zp&@^Mc(W?tsBGI#u*a6do0m?!Wn)4 zJija;AP{|%@5|!O%}~=XANKb41_w3DM|~%E7H%x`Wr%rh80_?bf93H{EW7J*ByDUs zI!Z&um*z@{m&^mlI{k+)VHq@4W>PPAuU~It4*o8av+kUn&szMvrt|mmCdqdBNNv}% zTZ#gq8~ewPhTebs*GpV5t+cv2u_YXe7sIQ{a0!gJ?1wvhX=;S>b-Xs zQuwS>tyfl8H(SpAcbe&NFUC-dXz1$dK6*q#80NY8lSX87=a7<;^0sRFf#TxONfeTD zy@f}RyN5K*S2f+NuKsoSW#s8s=h&$-!$y7;DpB{h-UTHk_Tbe;MMgf$`Kbk^Mor`E zsQyfe3CFtrRDsoJIJ7z+y()XHeCOite~FqNSK{>ypYXsF4P2CuWK7q0NORou3ce(n$HA z^aq@|HBNB_!)>;TG>iRDe$&~d3VLtP(VhJp7C$qpCQ3wlLI2%tCI$kA?aEF^Z64C_ ztKBN7xle<{NEgSu?+bUCTw)CWR+r3`QX)i9O&_Kl!`cT%Mv?|aK$~i~-}8e|7k7s8 zW>G^|@?e&L^l66qzJ257cuhyb~gI6T2;$(eP} zJWXI--Cpn~DGR_JXS2Vj6?rAJCNU+85VGrB$44Um-bb%QIce#-ObzGGL^o3pjtg9G z?C&TrU{CG(NCLVIEuLz=?{Dw+pphxMddM6HVM&t8!jfjFPLeBr^RD^iX5`blVlmf$ z*$Ss*hFuT^1TrHInOe!LVqrSn4K+Q@Qc2P&+Vvq-YYY&t2OWD3Tfd}JmEu+vzI>T4 zH!+VV?dt_IMGl0CiB1wh0K>?HJNrt0Ebn#E`3K+?6UX0=-M~UKA75M5iD<3neam@K zq5BuS-+;N%ecngUw;tiihVM7zv^q8n#S^(*#-is0{2~dZw%He`@%dJD`=_jvIr6zH z?f?YH z?cg!I=|~WwioB6>J>DStL~8t1)uDfew$Vz(E{ZdP#yq!^5IK4VhQW){Pc(B{ za^}Km95+FW7hpaQ!F;ZGEmCZJ;D%$*j7goCqaugf8uG>%rgv81o!iRwBemUWeO$du zoK_hS$XVA+qg0?#N&bKhs>t~6dxKIhvk}p)J4z`D?S`>PoIhAB0Ib~BH51)o>ua0A z1AQ$=EZR<|NQ~v~-ed9ZDI1ip4}1=Y;uM7P?XViA#phEDn!Bq5SQtq02gAzg$YO7I z%o@a87IW*zWB9BSYKHYD3p1oRQq#NanR8ZbjWo|P^;iT@zL)hcAoU=p&fRcJHH_Iq zuZQoV*%BVhmXaV#EMO>Y`=3h}Yn;Q#?(I6ABIBqO#aYeGJ)|kycg{kq|X7YeKg~Y#z)oH`kURKtc|h{d}-y!dq1Wgaxwy%yITXbo1JMQl<@a( z%q_YHB3ZU1P>l9T1hp3tSB#Z~5;!GZGLCFiw5)d@)_fU$?UR?c?+te_O3 zu&G}7reTD1@xoY$#>`q(*I!0EJAP(zV?|wLXF+~hfK|lZ0YC3id!>b4{VlB)ON05G zY5o%popgY%1o%6D0O5--w7A8orgAa&bui$c1`GuTc4A$opz2e-eqdZN`|Ov z5KeAk{n7S|%}B+UKrMWQ#aGxP!46Es?2 zDki8R_kgU{%XL5Fx`%YBia2-TIA79W zg1~3NNQ~nVKnqrvn#3v#LAHmLN1@>-o|w0lw@`on?=#pobScv2ht^ht7#LCCV1+2c zOPZ&!g>4pQ@fhSjFcwcQFIbrcW$PdmumAJKeFw?-sa2MkJ7%5g90&m>dZ|S|O6C~2 z*2h5?SxR&-3atnV|24qNbC$d7w4b^YeG0}b0W4RKDCQ5FCFfzPPp*`3p8kkVMbEYf zY8P5n9QpzK)JJ+g`=LP1m4C&Y5O ziT2Z{j#1XW@sP^h>^N`nztf`tAF1PzZ^-+sG-hcRo1vS5zO5|Fi8&?E0#1>>uF!T} zUn<+`l)BM2O0ysotV;klupU7_v1iryU9&Zpt;|J3^t;TVyt#`cv>8Zcd)x{Axo^%# zZ$W`$CR=Hai$Zuz!0WP7Zm1Ecyge)NZ5a(|OTCtHNqD?30c`xXq;UXS;a2s%%C4`l z2WFE##}r^@h?$A?mOx~+^Xccz54ZkK>HI~638S65Ewt&BJ`w~mAx#VR<8X;b8+eGqWw6vD2nMp`MN(0s>$Az9udgBW zY_K6S#cWMWxTAhiU&UC@m-Tk;(SpWbxABG+6;?c5p!J6IBjDCTHXFt zuWjO6j|+&RNw+)pVCmbptZbuzKV@*k+D-F|Y+rPk#apJZd?xjd7tT;M9928`MSACY zq~Vi)7=nqX_HuF_++&r0_>Cp+pJ)_wjE8W-?w4;OkvX^w23*P4^zUELO^S+)1ZY^r zp`7rzV)NP`?bb_Tnwp8OG`dM4#Hj_$t3lq<4@ooQyy8s?p#jL!>u%9-uHAhL2Du6W z8>eT9_7TI-f>gE|O1ul(2DnPl(=oX-Vhzn#)aKB1CC;$5hH5mWxO7bWPXIIJT0=tv zVEiybnmfTu8yjb*n*r04lj2T4Ki)O}l2_&3O-^w6@4eSizQWXm9V!U7vsUpd7N*Q$ z+Zw%6fY-l0E%MP^G3a38Y!sU=41mOY^lgz3PYJ41l(+Z>b9L!gdJJI04UxIIG17Y* zYH$<;*Vi7X7Cutk^UeG4LHKXm&6BoXfQ$EHX-_An&$Mu}i&oM_+?r3Qx4L4s0<2@aZ)I@^k6R!(|B zBc_GBwN~A)n!-EZIDNW-t~77iZ`yPif6vyzd67q5qLs^z?8}#Z$Y9mKE+Ywy+4_F^ z`uY~Ai~^hTroHjQ#Vk4zsVCpx$c7Q-S9l-^t+U+?kOm-NIO=jes>)GB;&85CLCJ;^ zyeloeA!CoO$gZi`opkGuPIr3pgq53H&2$xElJ$$8W{dO~pKT`x z9JJGIjMvz$kJp%Y#$@nW#}Lo{JJa5BG+f>%{QCuI9q}h=HdWc$n?4HHW!}>04oGOx zMV67$T3SPBWm1u8-C&VA?A}|S2-u1;e*F0H$A8=K<0Dg}$hphP%L8U3STrVOz_oXm zT5rqaW?TIeYgp$<9q}sgrlPzZqL2x8`kpN-(2cH2vQ%ee3LUBJ$B*JLwPfN2xeRl$lAU7!|=zm&hW_azd2 z)tZ_NNw_o6xRP~#vIs)L##E#BsQIG`0f*zgbyTB-r2}>xzf$~P+7YaNdXo@k6+4BC z30E4-q-&WzEAO2Aep8V}>`!@SnNnmOPcC9E zpg8boizzov?MD~@JAy*dy9kpeEcowOspgG_RbW$$#+0F^l{(Gmr<+-*aU11iE)~li zgem&EK1JFXZDZ3#F+?FHcw-Y(jH>9@#5r%@zAY`~boJZnAeY*obbDt@8JJh~h3t#% zR8_X6J!g^bD(HGadMrq=@Xj|r5{`^05+zo&O1kitP|KkTE9rF^0y@bP?tnw(IX`F{ z_4W0=qK`xG&9MPW9An}t3ni-=4#JlB{oDNc+2;A#f>6uY`1sLR_VRC8Qs>rE$73_? zVa3J8+NF8|9xFc{3tf}e(24Z5B`v0@s*zj$-TKaa5B=~nA(FtA-7;SOVKx#L#(!Da z___>-Zq*#@VgG}fFi?qZ_iUH@?-s-6kapFn%6&;A4``{@|MUpRg>(`qqG3+=VJGp0fwB^hLl$9B0FA#;a79_DnZZ+SlOsx;8 zw2J*ZjA|Ih`9bWt@M5|ftzwXgPvqwqwp} zLm8p{NVSD6FN{}qGXR;rddxdyUMEDsAN$VZ!dxPBTzdZWUi`Sz7nLW<@cCN`-}BaA zvmH@H)WQ`I)^_@(rpZRt0%k(UL)&KpPFIb$$Q4iGvp!o@8#=dM>OKf@)szXio8`Tb z($q&S?&S=MB%F47vM7}mq=lt`r(8*9`%rFS0WI*EywaSNtcwwch?Z1_fL8nf?X*7K zVvKti!tOyLgy`Ipd7aj8clv3Pt08sjsTtiOv02wzl^64}NmT6J7p;b=(vy08s}dowp3DvZY|};W;#b) z30!k=kDev?112U@Bgkze>=KhYKkQFSOY0X|#7M1@C;zs)E%wofd;ME8YQ!F_)9mLB zCY`KzJO5KCRSM1h13B^_C^oLwPQ(}njqNjHl9-@?0H<;D2_zX%YMVi)?0j)E@tLte z6f=Kknf6_2hTsC5=;&w_705g8kFMxlqG#s)X>Lu}L0F@{da+B$`0%T?k=IN}*2x@; zwxP$XiFL`}FZhzUjg545*@A`7Pj*I2^*uXjJPlA|mPJL-_q;rCpYC+8uI1^P{E`2h zXUp+alkfh|fb&xfAYgg$`ro0fGxwFl!Hn!Kw&c;S$jd1$f- z>yRZ|Dz(mjEMWzOC=f;6ClatOm{p8|=HFR-V1V>DUVkJYB`anT?d3WZh}`cKBq5O@ zs0OM-e|WS~2~rx%$v#H4)>fjGPT~{F`YviIOQJzJGvx?bxh{l_8ll>o$ z)Z_^>VYjYN)Qygg-ml#aKL9u4YFNsF5l`id}SLq}sbN)6p@K`8z*_Mp_jq6) zTJfBIy3h^xpKxq+7^|{mv!eoh@*%fXRmHqQETFQ8j@-&ah_N&1fU5a6jm zv8AHA+D^g$^%Pqr}D;uQ7Z@;K&6|u=yN*jq%iA=cd0&v;;L+_>O<38ixiJWy7PVj2IFrZzrK~Qba+SzOSZ5$L>(%pk1jn)obMd32J(k*<|t1bMLezSAi-!rD@^WcbRw>EkvG^2 zRMG@3zrLLBNfzSg&uh>{G!~b7Sq5*c0e5X*ul;i(hpTcG^B~X8p~jRXqR28qFh<77mYiwW5fnO5a!=cy03+II+#Zk`x&MN~Wk^K` zD2Bf8-r8XYxBtxk@%d`YnH}I>ND_)l6FBrYz73%N5Oi$dheV_A4o6_odmKGgqZ6?G z!C5!Cy*J?`1y2;g-cge}b-$B(i9VmS`ksqks2N5Ay#~lD|7>bVK*e{xX0)tvqrtR2 zv^PttrL=T?rMO)6VGok0nktkfOiUGagCi4Br+~+gm=urpTh22UveLf44lgPyZ$4V# z>lfcS+3BZ~^h3|P8bTaQHbjkiFJ@TJ(_WpUcVpEeQu5JBD7`lwOZVm}gU=emH2vZx z-_NJ}Q${S18XAEsy?D<;1#~Ku;O5}qAXHZRAe{GbHQGaNhn}r>jyD5;hyZ0aPExLs zq!o9z@-QppNY>}jo7^))c!;$PTsk1p&Gw`1FE#y<%r+6S8O*~#Ukt!vzjH@piXO3f zL%Pc(GR&?2h;}VU(ecC7JqI)T*lraSvwmsc9(T{m*TN#LIPg%^3o4-v^bQ2x=Ch+! z&o%U2i!Ne@&oG`x8X8qry_AJR^|r%B0(K)mMn|baU8bMz_hyJ`U@VH)Hp2gY8A;8+$_L(R4_8(_LsW8ttK?Ua~ zpH+!YrPCWxnNF zYsq`|vG8PzXt1>jyZHs_(Tp07R|I?c$892@ZC8aRD^Tm>EKsjJ-Jb>y(AZ&iO{T=4 z-W8GykU{UY%FeSLsdG2@>NyTkrkH2h=;~CJWz@uaGo;8qsq>SmM$cov=1spvvDMM? z^EUEkb-)S$&dXu6%Y*pr@F|MUZ}Lt2Apgi z@Oe&oj6%Ke)^w`4_ck!4r@y0xB>#MueSZ0>hNdQNrAcd$g3!-b+D6_mVGOy%P9IzMhX_dT3XW>L$ur?{u9o07w7{^bR@sVAwtHv~pOhw(qahhHTp z<1;{IHwK5+>lfxcAiAq7D`$|b;b|@SWeDp9lv{5+D^~J(#^|btXh!^V_Zl2&QC2R) zgph3f_#?`WFiimyIdbb4CKGswqDMD#@}E?5A)x17t#J&p{(vow0jt9n?mju(>BRy1 zFX;M)RSEW~tgNh}VgyHzl~B^qGPQ`Sg`wfp4e)Q+pkPb4g>NYU+53Pl7(IHlv(-t5 z&j7m1Y`_x-hf-phguHmh`}g{O{P>YKM=lu;q_*X3x7-K^*?!K1-|_B#Bs#z0<?P-y~P--|A5FeHANW4c$QUS)TD>YpqSu2|2ZIvDd(cN z`WudpN|Vv}ag#dkNjFa_8*4zu)<=I*;CG6n{13o+$=t@U)yj>%=U=rPK$HWu;a=b7 zWIdlNG492^&1osK&*7=5l!l{H2fvdz4GIB4e0zNtz(c4hY}!~_2|e7cnJ_x5U!EI{(v@OZD90gb zMY8__&rheprviZ4ZNiiRN8UT@CQ%cwgkrrk zeTCnltI819hhIVPU}j&Y#PLF!lcS^K-tlSOq^q)v%a%O3;d`ImmF1zrmg9}ahB6^R zLC5Llrh)>i!8}EvFnhqPK0s~MS@`7Fb0Q3H$04MCEnuhR?R~gjH~ka%DJ-?rzn`#g zddmQSYWx+1|Lr$Ki60{)AZ_Fp6)6q92Tg5%Iv@Z72;ga@r;J!kSs*&CCS5gDU{m&l zo)680BKr{&sA(fi&?o@3PIqW^E({O^7|GMqbJ}OMR3==v+Un_|*t9Ne*EFYQw%~)G z`_21PoBlxhr)hXCx~lsnso3UgA*OUhk*mQ2e51Qi@onDvLPZ<9s6TzAB`e$h(R+uG zM)a|fk^e^hA|}ksgoC8zi2+fClDljmPXakeHue|co!`KaVOTqGVq05VOvD6-QXAd< z$*Fp`n@82a)k|M>oi+1 zlsf#yf4_$Sz2+yw+xA~i>?Qq~KCMm~U3GABQk$!OC+*c_B>ylqEiKWj_wnO=P0gCd zMzIL;_c|Q$WA=)9MMcB5Pa(ea19zV@67gmFbN>hy?<|+@lvQ#VkKs!!9Yl`NY1D+n zI~$6?A62A>J^P|b52eWaOD_LAMMJ=n&Nk7i%5v9 z?Q9T*%3!Syt;dfs)oJ6CS@Pd%z>U7~^-~M|i`C_ik&ZyhW-J;nz2Er*G<4n`v&y+s z)&O9akk6aJjCGDvJ|nu;@+)To;DhLjnRX&6gDML}5IO0YV<;n4blDmYZlT&se`sF_ z{GqfY+4%nn980z9t&w_}DvHP{csx?UGS*Pm;9BD~ds2LaElIs1@qfaNG5RGprOVVO z8^|8ZDLprwyki4sfPVPMCF_4jj*0mS_yX*=UZttMmS5vYc#P@R0s~3qL^z#ZUvs0SLy%@<(s;~M7D-OHjA0Q8#^GQ zK^`~X$i}B1O@UgECOk~qk#Zt6xYwyHBWe8Ky#PLIp^rWjc6lmpF2x_%Rh(Z}vVkP# zwUA;B%@t`YBM5Zn*paeF@*Psi!1zKR0td7csoarcPu2**-=ee&^t~}FmC8_Lu5MKQ4pnfQ`0u5D z@LamoK`W7<J%i8YiVRnmAN@TKyS7JJV&TVcBESGK~u1_5O7n_dad^LKYF z>#{H!XgSENtK}`3KLQ3Wv430K83X3@R#0U}}N}q;3bD$Unp8``=}Wm|Y`6@X2q#yNe9= z+K#Y}Fmcke_x;rGA^6<dy~uCvgr!L!BGE&sO7IEzEimJDvobPM1# z2-TqGZ2j)!Hu&KD@2^%C7urvFyU?-l*~A*xg{SsTZ7LLPZw`)(2*UH!06x#o+I=Bx z1>tkOzH1)Jq-cE5My~Pw{mUhGG;C})w$riyM`M`rS66p~1CXY6k57R%R8Op{NgmG8 zcurzqVRzN!^bVVYcpTkJsH{O_Tjs}>h?uvwthFt~K$7!bmaRtSh#$@+#!8)eLEg8v zUW79-Ux^S-(gd)*e4tm{V@zIUrA-|Hs9?oLHsj;IQu5ypsXu4Vb|}h%B=_jt@32IU?pQE-rUgl z`0)D_%V@45U^V2C>H?krPTKT~ZyiUotbTjjmEkkE z%ho4sqLXE{07~dmf;UVwL1KoN0$gFp^qP&p1{AS>1StIHf3Ps|A)D0cvf4RD7sLq8 z@P!NA^vHTQFWccZTX>S3Kh}y1*2^95wP?2N4*gbZ?-W2L6Zh&{oH?U(C#9-ije=yDP&B z$$;Q`fUNxV+fiYV^HYi%o!+?yFE@a9cf?XdU*TM+rPcQC;QqOMc7!<9*!iu>WVz>t zZw-}ZsXiNsFyP&tTvoTx1wgE^C&jP~<=MQM*aPZYirs!R3s^=>5v#|1UCZuQ7#bjJ zM5mw45Css+q)*bNHYb{2meI$BvD>e zEp+?-<{!`jfz50k`h}XlK9~5<+bf_^&v>zy9Ruv@e)<$2S^`e0qBMB?_{YG2%i8&q zRscuY>ftP(=l;I704gOXCok;h{@|Lzt3~QodV4v$8&5W!YC`?+bF@HxNSzN1S9)#J7lXfm-ENRaO1Z@735_^}C*SWljhl&NeL>VWUcoOZdU< zOh00--I1X4#^muUzuKa?>J-P0EftV+q3nafz>Gu7n0H&GIX2iV_GLUOR6T_Pup|d68E5NG0b-DS;Pn+7Em94B7~h0^;|rmxP$dlos0c*PLQ~e-^1Ja6x*^8lGC)4!S;)kCri3p_S9h#Lw;G7x-okLjfZ>mB^YL zx#0b6B?79JAtNd8XK4A*0CJ?04uA=0LnwQv_O$5ZM?atu@WvQdi?37o+#i3rixxge zaRrnFM0E%AP8{M{n6F{I>paxODFZ@4o*%cbRZP4c4X?l{E5o!fhkuL5e2;0mcKQ9~ z>0ys?3i*!p$cSwJ0 zd&V8#k9*ILGtSX>*OPP2IoEnZ1-E{H-#hfE5GA5!Jse=!HVhRa(YPSsar_tk5zu9j zfSRALlA~%d@lB(*6oN>=0~}nXBa_=LAI3hbCv~^{NC^P$lUA$HFutchC+nwPd5R~7ZLQ+G*!@;=d4`jC^sy0Bd0Lw9XLTa6qUzZ;#oX-d zYLYv+@0$z)Is(PM?_679gPJ-h|KbzzGjt!DYt7l~jaVUycTyIzYw)_!&(nN&e zF8qMtV*OHIsKcWWEAl5rPKwU6F?xeIb!+OFRXW%X3(+<6L#Sd8HF*1ubi5Q>_Zqq>8e`Qg>?VCR+QPLxW|>vOu6|y@^RNBPD!9yxzM{GRE$* zty4SBKPN24ZKdaKbrbeXaJ98vv!>^rjJNH+FaA_l_pFn55jPn4C7HQ3nMC*i+= z8B2rzhTSvw}vUcqi=)DP34V9gGdHgpt4S~ z<(@>|=o!R{x%C@Mz$>$MTQHQ=luktP>?#0)y+$Gh5TEH^RjGse3-MqFP(`&P7mzpN zqij(Ri>9T^m;z4wjg_5`S1;mUBbK;yz(2Ymxb)_e_c(a(zW`GL6Aa~F78e%-lOv;| zPz@WlQ#8#%gqHxhaKkG6dI)iVzm)mndPFHj4iSbpwRCvlwm3cZ?ICTr5Qd`jM%~3E z*R}hrv$L%cxXpE)5_bXuUbZ2q;&M?^$iEHy?rVlZ=7a2)bZR*UZ74YBiyy#<)=RcCAIDVqU)gtRm~MP-C0 z7&9mLO0xfnM@xR+40+%j*{y5r$`}Z4^3PnZtB6(^Y1W%sZSu=Sk6UmY5abOGs4f2d`A)yOdxp3Q3R>8df9|?5Aczm@jKufN zZ^@U7ilf(+>}c$`gm_I5U%SSMyA9#9Pii?dBY;TZ!-bUhV^N|-q zX9|5FxFXX7m|=9Do`FFdV211d8lGcSJ#%J@BZzqrn_R49M(`zZ3tnB&&CvFYD(-F8 z4`3pKMy^GwAP#tZ@&IlP(mOP0(tX=oW2=|rK2c2qrN0xzUh{XYYTX5cB=Vw{zF&oD zUH-aQQJM~FT>Q-$D|_AJPm<>;gaeY|BOHd1WCGv;f*jdfy#Q*iQ1E?9WWRGq3y|Be zxxBRWS14gdapfWb08Zd)c1=u7I5|1D=R1#pJ@9`CQ7yoa42LRU39TvAbaW<+JHzRr z5vGIKL0d=DCWP+(1`!qbC$3mo*wkTDQ@|E}|B0#!LL9#CZP=ju7VQE80v@(}uLp4W zaEJ!MCY_-Dn&Z4Q=}wQ4VW@gK6AMQW~!YLTCOb@o^c;Z&! zy`GmGph_#s69Y?zhE$%XVB7*`34CwjRy7Cnz-Y!NCO&`wp3Q8YZ_Uc{XcR!T5Y%8> zyYXpoSuOvWGwjK$V_!>ZYEIMRESLT;k}zeWs_c^|zd*MqtS841NhLVmW~67#k-}|Y zcF#=hm^6Gb!-w;BQ3L6jo6Or&)mS>Iq$+bhRDUyW=?NJN@$!Elpz~jVWE>b7?m$Qr z5)%3^ggv5i21^9G&H(~ggJN~i6IoeV;yV!8!Geie5FkzgfqA;85-&xjKsT!S=7~2*9UF z5TP6=vT}0hXqAXvPe>55hv%b)vws_J9ERp0Wi z5HA!AAR?HVjA1N&eS1ha3$~K8jfSgGJ%Dxu#<_vPG*IJDm6SH?ao9J8a0vC(@pBWR ziUt0(KGBiLB5_~jz)-m0wNPSc&LoiJO+Zebv-{p+?8_#gUTr8f2==odlSB>>pu?=m zAtfdunV*|`cjKOnQsnXRF`y=bo*H+seU0*Zp1Ns70aOFRLY&sr%!z4s@xjKW`mr^)|*>QeUD96~A} z-BD@{Qmek{tOGYJ068(Rn4>&6B<4V%3RH%ysAwHDJvi%l0O&$lLsWtWKn`IP5Z2$D z43sAOOEmMq7{YA>45PkRA`Tk0ELYiy>c-e zH+gw0GBX!o-7VD2GZjMZ8lVvtfi7qfSzPr|U~!8pr3c=Zn(Dp{Ju53z1S>cxI6Gvg z4L3emv0BGSALM*a%XQ-&I8n4AXQ_P-{u`DXC4py%@4{GgIO zw@O!%aUCy#4PNoeTSIJj8jMcUvL(ApKR-W3q29OW;yMS$#wa@0)0rUsj4vdoV14}t z?Q23JA~E$i8Dfcy-s|<3ofFk2mEPDAJ`GLiHwBZN~dMAYLOE+;cEFu>xfZD9fRQvrv-{^}tk(^gxCi(H^?xbsbeWR-=$ zxr=k?gR6uEL6z(Z;{^o&il~qqj9{y8o09e~?&7rFClUv6rWKkOGMlN zCqt?cGhwZibOl?i2UK-ew2xzjs?4YAt*npzAsb9*45EaC0>X9|iZ02f~$rKC% zUMynK0_+3Hc41-QKt7%Zo|`H%{d}#Sp8e$*c^z01~uUE^=LkzcW zna=t6_^hm$uPP>xlW%#bA^w=(G`7At^G8!v*%V~j?|cTQ2F){<%MQAL>OPfWAhZ{) zJ_zlK|Je%BHmQvq!p#N8F#fGSd&gy?tKoglf$^QsakO0#nq$nMf_*vD8RFO&nqS%) zwX_Z>BF2vXe*cv;XoEocEe~&3zPI93f>>_)TN&z=ihqZg)IQ zGAn_i*WoWF~%U1{HUf9+ck zr_}0&(JvOYP>q5y9)g;d89-d9KgbgZOCK|VVjzt*^9F!av!U1rLnCAv+i#5GKP}{r zmA!xeKE@a!;!jK&Rcv-?=^zuU3YUfHGV*2)!YPy^N%TBD09J@8a0{-4%;;75jBNlx zmma&KWTtU@RA>DC2>lok5(t%EI?iBADu%A0ejSjpF~*4zfBa{`sd6zJ<$I@*@2_Qt z9|sMg{d1u`Bgvx@_6Jy8(o<8RlIp~(20T^s*C^p&4J`gc0cOMT3K`tk|<65^g` zN0Tj~)K+(Ifa3$409T^hCB(tj1?cr|T<4PX+Xhi_*hOFpOFw=L9|n^G%$x`TR9W`Z zM{R&uI3%;Pvqmpod-3* z(<0gvY2Dt3qyPNDK(z{={+)r{lb)X5?r;g?s^HHg5=10bpKsd0sOSR&Ewlfu~Tw$gS! zy)hXUq>s)w)R*?3To26HH+zc8ECB!RLnpvLu*`#P2`%Of*0Y5vE#OCpB?3Z2|L{SC zzYYj~j&BW+AUeEZ+?tx+CP4Kma5?}%J_PhIv{Z_NiO|*$Iy9y_TK^8p(QR7PA|DO8-Qj$#V{|Bc`VQ4j%#U4ZK1|YAX1I zZ{E4H43Wy>lor5ecyuKW+ZR2sL!r4CfUR4F6~XnIqg?`0gtzy3TA9a>4axlU$wFq} zCVk5RFF}hleLeG~w6qlBJu1uW)t+q2&KpkF-HwZIKDn%bpAQumqoM}>j3Tu^>yQ2@ zNU^CBT=!dFwAu&>8q#MXp>esS+N9AxDHCJ+jFb7n0}mJ!FbCYgGKA`L=nMr(-#x?3 zXn0@NkZk@d06{46i^i%~AN>92odHPMwk?=Y##X>jwq(Z-$mO@QeM~?3#u$-A(I4k8 zukZcaWn8NtCt>YkCvxaNgl*NEQe@{PWU}70!pR9*|28K}V?iMBT3=F+K){PB>TCV| zm;1MwnZLr^q6T+RZZ6B}ENDCMH46?^yDmZv97~PZw7)KpNhq0{n|Hwa1W_$&=s7#? zK63+l5`LMAcjT7?< zFU5*X&UbTmAUrroExVA=Nn-#Jn1s)vGu@>FHg{OSkAQ*JQd9)0`e{&8xNX#fNpgf%_4gBpiFq9=;E!r6G+Gwr`X(UF-v-v!KahjYkw5j z^Bqd`{&z;e!_sou_V48Z<*Z&_7?); z7G+}wn;!IhTrp&%ES41?9L*)?e&YJ&muVS4MabvBuW|8n`m=i%VIr22deuHJxyQ?E zNNV%0^Z5*4eof5-ANy=(`ciQvJAN_P(6`-^qL0ZGF)GN_r7(9x#vv2vBKQFDmDCgJ zuU~6zRkRXvC`+E*cpKiac6J^U7*G7f&OU@@%cNj<_c%mbT7=r-R(j)k#79L@VT$U| zT!=~ml4BM|Fpx0s3YoPVi7v}UcXrD|bDrx10wP;;N(`MAg^8#$pLgmCOU;%JZqE%m)a-KM!HAbF7&4qxw~9iA>{Lz`mCM=Qy;>{_GtF+ z;E{YdN`v@QJj`VuvfmG(1Q3k)Gl>fMU!~-~`*RiX!fw=J$ezwR`m7E(7dni?3lAB; ztlkz9CZyfr)Ii`KH3U(Yq0aJu02M1 zFo2X2;;0*KfgB476D1E!vxJpN$U!3p(uwiUbsbPvO;1k)KMg)rK^~qxfcrxrpNibY zL1@oeg^`_!CAaITtxY=65^*yk2yHFE{(`|H@YBo3a7;n!j4t#bg!LdPe|v3q9r2-T zAbhd)uGytavn^jVQqx#BTIYgJA+!xr_aF$YZm6G~8t^f??2qM_rH8W2fzGb;5nrC^=V~RzF0JH0b z{ZqMcw91j409Zj=a2X0c^GjPn{EBMt1y;-D-Yh$LY@7^aa=@S6f8BU~hj<0exDqwH zh=`}xrmcLV{G$+Q0QsO^*uBbyM-9}c9O|9$KTS;Dc%EF!8JcNsD#EZ;VSfcPs2= zWo5sR6N;)wHC-h1H`egef4JL@<5!)D zFKX|DS_OzWKKiGZUqtm?Q@D-Gwra!!R3k!*9w>w9tM7g%F|y^ax3*x52A`l9{5dvN z8-mYLcS}hmR6B$U(rJ*ee@{xgP{oxZJannDkmn+T@I!GCFTG1VSszGOy{+u0%_#@? z&msOS(9r0`Cgb+vk$L|b)2NPm4E`)ZF5iFC^zHD!0a6eA2jblnn|7J*-(}DKUFMf2 z6U08Wc{$?Nr*>+DrWpFa_I@VEfw%U@mRe3(C#XS#B>ekBrhRsU==q-!gcIdJa=rL> zwY1Xh`=OfhX53Qpf+Fx8IEn2Dey)uY@yWQI3EP{D>sRrib-n*^A(%NoS9{tPue=$m z_buW?kXJmirtmS>oJUBD+F#vhB>6X5SzzRN>0w={x*J_L>U|L##wl9T26H)Bc!LnL~H7=j<|G`!}k}izdO? zqK9&pUZ0-2O1xcZw>B+QrVk(4z=f8habm&{Q4IWcPT7F+LfP-8K)6X5dTf!mO?rbS zqh#4{3#f+Y>mTW}ly-c-*6L;aP){d= z-~SH4MXGVe7q(*IG`RnzVyGj&~&bjO^b11dh`wDyaJp_aOJ@m9^!TLcW_I} z2V1-I-H&k#m}te+LHMQ#NBi3)V|Qqg?A8ZT|C=`lgguildBQ;s;+NqA77}wDftn&j#NGFCEysah1yDGZILT3x*+BLuekNEyNxuR1-@?=QNSY z=I~JbTuRZzE%~s9pBxCXfcBP)b@Qq!&In(wOdMH`RB)f4JbcXtI$08bTu#`8VLQk< zgw>U_ard`AJj%m~1VcpO_BWkq&%6l1YPOBX4{M(|P{{^k!9ET>{WGFBagVtuW#_P# zeR0~T`3$@6-@t%cCy0v;zg}KM7^Uk9nf#P&3>kEcDB1#yzKMHf@}(z@clpoE91<^} zBjmp~AU=F+&};wjwCL1hD#L(H?|OIQi$J`cr% zk#WLnX?@>U8>JG~R&eYtofBy0*?7~(0-uYne|9-TGrJBY0|7Fm?BSlsfOaU_dmQNZ zT4Lqf|1u7x%u#cSu;S%ZpoE``#K3|iQc=oW)YmECkm@i(KoE8js8nRi4}H|_9d?5j zZdp~wIyR*^vUV9uv>mV+(U((wEj%>0fcbinzjTp<6FTGH?oc8BW!zL>wxzT2yop$m zPr(1&N!u(umA_|@oHsp(x#+gGcdA_Q?!S?sjy`|z@_B~<%DnYMECE^rEMMLuUXq-D zOBLV0zdip(`>I%xc&fq{mH?bK0i^VQ7ag+?af+u@QU@}C9jh*&2@1ez5HhcW0~4UV73AfD zv2W)U6>^vhkX?*j$U!{yF|oFaAb~UaeF+0H`RldK=MWLz`s*vFP-X!{4ai^^dU+R3 z)kkZEfDvy!1oT6EEAMLCe(KOu<%oXCs2F1v@|hAL(m9Y5GOi9UzxJd#Kx zez$Uvs>&;%C{Q-hMPB&f%7F`lkYVdT7KSPdU_kB?Snp_We=H{l(zgY~O(rH;hiPz( zmiYI-f1PN-Xg2!Y^9)ROkQ@*f6$QLk1*8!H=1i^Ho;qAVPeyfltcG-j(3$P^vik#{ zo6OMLl7{DydV2G2-Jqr|Ncu2+3yK&^`>k8IT&i^{MymncL(*rzWko2MRe^v4V+I8A z#F(HzsZ~#y^Sm%Jis!Qiv$LJE2M_`Je+$l&v4x;(uAyt({m;J`{2TF^#l`bAySQGl zVjx~?5{=XY4pk?R47m(6F@Sw|R|_5>gu$$Q5!JU2z;EXUT!EIRCJPBp1ILJCQ*$#9 zFK+9(^8M?)PLB z^M4!_R1HGSrF62Co}r_CGHKErr;lW`gv<7lDPwag6fJm7SB-uH`oz8PCi!=sICYfq zJ4w0+_@Is8Hel`=V&h+`%g@bS0srrJl*t53U4XxVp&`)K#;Z9fH;L8&0ZTNIlAa4r z-?(!>NTWcR8kSLzl2$;n&HH-^QU!y{Zs%SiVnhUCIUl*3Vlv~B+R>=IG$tnI74OaB-x&9`-V6I7`d1v@UZp;rgbW~14Qi@F z?xys_L`FVUQ;Uv{9{lwynJJKD2HFy&BPie){io~(B-WI?ntE84+q<~p;3}n=-@CZu zQr){qEb)zg&5(mkT&eM5GA9|XHx1Obkq&qH&L2+k()?H3eO#;q<%X7J{~d99=ggW^ zInqgqjD((-c2(oWWA>gp#2^(4c2|^_C%=&)A|jf3#aBNbh;6_XOXg={VS%TgK!T$a zO;!#w1EkhH2+bxy+6DdPr#uNMDVjT6K59ARoahghT#)QRvs&m$foTU>NnoRt5MPoF z0xL>JdOGxW&MUA1M%;! z?<7NJypK6?3BAWTNXqs8Y&!9n54{2|=f#T`X8P^sJS{CP>%%3Fh?^i$Nh*A2tDQZr za~`zgrQJgy#ZiYpEGE(N8Lp6t2+YKN{d!D4{YpXV{4+K${ZF+?T{F&X0ay3Zq{VD% zn+?joIm9^6aW`ezz@hI zfYf~`;t)x1GTj&e*6=v~*^%)BHs9=)u7B|ioa$w#XaX@z%S;{gXW&6GzO+X$`yWVX5ZyPrbtZ3X|YpL<0x9c~J=f z`vWEl$TN z%dhY^XA^CC1LY4X39K(L><=84{86A8viH_=PrLU-ty5puuf ze%B$ru0h1J;K7g<;3f4MB1jQ_KB_N|b5F-e;&H~LJG6;T`y&w~84uk^->=)4%x(HT z*c&3?A;CbfFQU7i$Z}E8pDzT*UwyeJXiF|kRvB2LySXU3F;h}(uM@iFkK5mNPqw=E z+!2o_8UrCSM|X{`o9$^-lWavZyOj_6KD}!W%!{90GpQ0r5Nu!-ke7~Qb3Ll#WP=q{ zRrF`4CYPO;IRVyjWTNO{eACM!=#Ymv=dpQ`@KkowOBST|6C7dT<#2FHx+R; z*?3DM%>M`7u+|tuLQQs1G?{1ob{|Lxh@Rq95e~8n8~h^w&8X$E$@KSICUxvvIg`IN z-e@EZOy7>WW+MBmt-bj{`(ZCd1GBf>PT%&wjr$GCE&K$x82O-z~44Xu*H zz56)*9#!5Wjt=qPv_9|QeJUMX5!{XUepiej7YLx~{@(R}QszlISfX2K8-Q1Z<2gCU zOO@ksa$wc$5qZ`-QcmqJweHy|PjKCePNxLgND$iSw=KP1cfch|$AAyS-5FTl?E>(Y zrm(jo?=G(>U1}%WVtqNi#gmxp>bYI_xSVv1xjEWo(*Io(Jd!B!D_s3!m}(`R3{P{I zwcPE!r?N(G^wMXIq;k_XSN<+p@r&(e>(qbe`A8H z#yy=CKo=8q#m4<<&$_P0VmfuS!i_5=qNr`#a1bYjs z+dM>s7Naz4x({RPB4YcB8@1oP#YJj=qxI$fx~;Dl#Tosy4Yms2ec7KQftQqJ9MZ4L zxz-f_x9Rod2lH45(E*{H?jxgNA5V3>;gN#~=Bq?uRZ%U+5Oa#cDFukQIBWQ`*-2UR zz@B~YgmLXdU(b5XhC($3CyS@k#cQTyv9IRdao2PNYJH;O`S?A*VntEBdDIKVx1wnL zAuc{y^=!nOK{;5mtgyi7%_CEl_TFBr!G~IoP6Hf_M-?ObqD!7cVL00WeJM8hus`0 zcIOE`@Om!p91iftzIVfDxlm=llAC)}x>XeHs@*Rur3L5Jj>DiuXpXFg% zD;{wol)?ojCrtL3)m%DaiaH!a)XO-)qF^pwu&Zi1~sLfpl?3p+}s{ ztzjFT+?#*mZ-3+1-)A}CVGs!0Iy$V6dS7-8K`PN{xbvnxFHbs|P43yR9joY})Wquv zUyh&M3BETgFLxTNxwlbPb!Y9Ww7@y!6B?(AObU$hzEyNx2~n+1rs8T0mgfHht9i+z z3358)%(*A0c@g)hcdB9$U`k+od|E%LYFtu(9xrO;7@cG?l%FVF(OI&pj_nePR)8_t{Sa9}ITH%?VbD3b2^}O%+}R z!dnMmuy_@9JX^u^sJ%g8kK(|wL|lf9P<+f5QOLDJWoOkb3Z3HYx%!U^N6OGVJD2OO z(2TgRFLBr=r!G#8Of}9fA89ztUXJUtiPg-1IX<()vsdyEB8hV#NR{^T5Y3Q1_pVbM z`JyER%?G3OB==d;G-Z$52bddz+Evv_*Ulp%SD~kp$CW%o$H}Tg!pN5?TKXDfM~_d{ zx~@ms&2vdk^)*EFQ}2D3ha1CzTp~{+uJKPz+8QK_>W=KBCI20`-Bqeh9ImDQsIj@M zQ>C5J>_M23l~gts;#GovVVOa};LW4(G4<;FRG0~rVzN>$EB;bRD{_0G&6Q2*Tk}FU zvq%u63vImqt&_(@L_JP#YD!!8y|ukfyp^P|TUmp%3}kv`RtpPHXWl=>L68>^5c!+7 zoXix8M`l00TNT)6qv{V9RHFXJ;wVjEulL= zmm*t>gW~#=#@YFt{)Xo-l(e-xGH+i*yhLC?DapZ#nKPJ>>8#AEwX=A=h}3U`jZ=e) zb%-FWoB-At)LkpGvvs@8B$R!~xaggO<5x{8-f4cnOLGl%k<0JQ;^_RXm-IEZ)o$ie zAP73mdX`H^XTsd$0%D&Xm2J;R9y68l0^aow2(a3gE6Fn-ek%ci$OWiQFS2tv{(jxC zyX}o9EZozEl5hXY<2D&NPiv88KGMm`D_=drpFEF1Nl+wtc+*SUU`DX!5}x6s+#CL` zu{PD0_OM3a!Gjpqq=*+2%qINmkV^NuuKF)5G6|YpkH47HtQmLgG`e)nFvPj2!y!Hh z$G>|G>SqAwM7-&vDa9pMyi{^wS|?X0KssXP#5G9e?)ryoCN!3q2!1E}+^28oRa_*> z;+alAk!%sNQGXF=p8ZO+g4198sCclP>iQQ~pvWM`^kT9f8b0;b4s?3LI?M2k^OfV> z(4EGLvhUB;e(fC8j^iLS{OI_|YLL%RmA|HdA10BMXp|`U%5k>SMsvk3AtsZGWWbaE z6&y9}FOT-jlK=M>`3%09SsU6L5vAcbpNm-C;Ej?t-F&yFTH*0$XW;6>>VMn6NF@LC zR%g6alsp%G2`(?gYSinREQ@%-WalhRRpPIiQzfr!=n#>oK5Z3XWx~6ky+2qMt-6<^yfr;as=~~4=JeAN58+rr8z-gOBG2@uoM566#eFXQ zMZF0j3)!fq`=YF*JRYgUa2+Fgk|oHNCab~ zT^S3<)()AN(`d>K0p~cO`tPbvl!jz}p}?xbp)f>L_~mNfMm>B`g1^swhQ z#aIWMJw^(7CBqsn@>3wq|1HpvG71!(rZy&4Ba( z)2|a-R+ksEumUpwh%3_gina!JnN%2{xo_lBb1UT?RTsTk$ zX_(ynSn(KZl8;5~?kF+Q#9ln>IKLLC5|r;4k`LMC4DKW9bLuW-Fs{jTuRpFD$!+=wSn(A)CLvG-3a~$gflRD%~pz z)wFlb<%+K()w82UyB0KY3Uh(3Duh+f?`uSvR{LM(K+jLM<;)M?K%R!T|2J-7hO-*7 zvNIm(eE%VO3=pqj&f>mcE6Qp+%`5k&B#}&XW)y|__!_na zHzJY>6NIcw=7w@m&_ke zcZ(!SXTq?MpG1NT=lt?+ADzpnkk?x9@s1&EPvX~iTGy>Sah1B%P=1vnhdjwGLDSOu zn%c-dLx%h3OpZ1B?wWi_mwZi!PUY~t#kBtqmDWMG z=h8X`jIt3}$bw8CmOxx5Nw|x86ay{jfkeaXta!JgjIki%PgXh$Q)eMzps3b$P;0uX z!X6Y{}&E9UkShf!*ZimdcoQfD&*vdV6RQlD- zKeN&z=@7&0nb^Tus1Z9s*vS_iD`K1c@VAf3XZS+=;k*=7LgWhxdiM^`@eVC^i#2Y8 z&r&oguB#I13UDl9PeOZM1_uOK^HD%zF#WYF7?8KHygQB26C-=;O&w5tP$lg5r2C(& zx7Fb#>M;ylH9D0zyOr{1r@n8Fc9T5%<|^)B9k8mX1ada6&uXxcWb_ViUktZQP*yym zBKW}L(fjjhJ10NaPyeRF?9k3se1d*Tqj5H?t+c$3pPtc;21N^Yl~GYqg{fyhj7o+# zUSmRfDNDQGQgrm~n>TOzl!=N5RO*ptzxCA&O=faB#H_z)Q(owHi#7jOib?@tkBLW= z!5Bb3t5P9loK(D<=MAltzPBat%_r~+%~~w)Vn}aa6p(gMhexmV&mdLDX-}+zn z#p&aA=GP9%Z?L&}yqO{!RB*LcU{P>zPK}^}!?I#=aW|NrFwA2;`k6_QO=t-c2 zBaj@@uB59!)f_VlasAQBFqe{H>d3{+qf5#bx*2^x4tU%5c2v zB@tpaJLTVaT%`Q0HG24Zm*Ya#pSB7A-M*=-PZ5L~*3_x=Qj>~tZF%tw-{Fx~-}x&M zntzjfpCz#82h1=sN9{%LH*H2>6c~NenQ^t^vK&OpztH)`;Kmj7<`)}(PqlM0>*X3q za8coYv4QtkTE6^vRbA~~F(qh|sJ+lOcRtB<3RhT+bwPdpq4HZjMz^X#H3PE!1Ip*$ z15=v)>00m!ifaB~j1J*%A5MPd&bZzq;I(=MB`k`!Wl#3xb>Fq_JC-}H?Me+Iyr7MNmHiy<9pR_dv~6s(+4GX+T+erBB`90;?Jw?`kw12N(UF|b zL{Xq_n9yFJ^4BYoLqh*f+fI@NxqsBfVlpl+3!FY1>6t%yYi%V3Q^7We_d5NIbjy|L z)91Nuo2pb_#EQf`z(#uhZ8GnT)~5nV`)#t;9p8LH^)G>hGzS3sVb&|9v{w zY!2?0P3npu=M)Tu%UB18LREO9!oLH%eTsJ};-*QuYa`EcJh$@yr=HG0vX zvZ->b!Z1iT#Ek!CWPF3cB}2r^7F}K4;_$@6F%o_l`C0=Dy+YZ(SOzGf7Wz zs5<(hp8Lejp3D5|ta_Yn|85Am=X~s+<%e_v0^SRN?uMU=BDL-UmKee&2Twg76NI}BO6~Zyr!-y@O$Y`JMDfq)%>p3 zE?eKNWjuLsFi#e4+|aUaJD0X}y~)UdRbyWLX#2`~H&$KsE9(rZ2M^BPo|ad+rbOfq zwE6BP?YI?jHpFeFq<2vBj-*%eTRiGf&CEIeX*1vSH#vGbyCQD2WtS`s%WLX#knlO& zi&R;=ImwUuxY}PC&-c%+$5s9K#9gz`e%g0wS8>Ye&por$$kGR65;D@Z?3J>7g`xBT z7ACi7%k%wm@}k1S#Wp5iMG?2lro8{XGeD%If70^j#cB4SRS%=gp>N)%?dS+>^$JVS zp0A0R8%eq*>W8=Sa33|xhBCL9No_9?Nj&U;FFy~6g>OiAOFS+^lT|^s`hX!Lm4Z@z7%}Pw#t&9i}iT@;t=bZvq{G?d)AA;hL2LQFbG%F{o3Ds-%;Nc z4#=$B{nVgLltSLK>_|Y6qs(GB9#v%dB35zVw^h6MKr};Ymg(31Ks)iq*x48s_B%|u zI`hGoN$GG@HT;Rn?!7;U_<;w(>t;7ynTPITkj8}vi3*ifrKw6n&$OMAh5Czfw~KT5 zEm(SZpJ@7-zf%!dwVPZu7NpwuCA}kQcxJXn&wI*sZ-_b2EnWXe{Osv4&2{c?v4gzQ zR|Yids%~Sd`TowIyY{u=-V<`O?!ly!YSV8-)AUh{su`~&WBc!jH@>?3;wfK5W1NwN zEjNrnbl}fI#N19-mOY14>~YfVwfn~NshcJ%llN~;hj)CYP*AUxW8zZ8?xdTvIK6cJ zXRG1#3oZ74qAI<^C>=RlmKcWR#50zK`3Lnfz%IVc6zUxL)}NkqhUwQZ&Q2GhXqd|l z@7?mk2@=X{`>FzB@uKqv#1phd4@nc;a394N*>#q4+c* ze($Sa0!0HKMNIpce26|FqhA#PhaChJxXzDmpM55A8sK~0xT~cwnEiHUMDx~goWE3& zdP0un`*80YEx6&1%`8)Wm&&^w+4D2s3v2%#4Pvpw?20sr)9u^1PVnLG$>^NLU2N-< ztoPhZQP!62d=<1|Rg$lWaV%cg8Q?H}jeWpomivCzh=I|0>8RJ8wD*Xir-^Xwf_T)I z9)hs1`cl9zk&WEes>!q1mXo85D78rnD!As}-glCjEYAAnMJJ9$HXSWPb6@$M>eLU> zh8LrK?kqdHE5x>s2*{_u?xhe#=hVrE3uP=-$jfMuhnrpx!OhYU%jWec7ZXZxy57?& zWf5NyU_ZE-$Uo8hBfx0PBAiVW`D;a8VfO4e*@H?Y5kkfC&lSWNPd7soi? z7(U)=j!Ur)Gsn#8W0K?`x7aD5I>bO0_UM=}l#`#*VM^6MOyNq{E$1m_b zwmc43w$}>C{AR3>Q}ruX0Z;#=+Q7+o=2|}Wo3udL;*6kf@y){LB^vlXaGIE{ON+dc zl*3gi^~mv#uXl|^Vmjv`N5%F~#E-XRxMNY>#;1ysLmV9s`u%wqDRm~bEa5{vCI$u; zsNYtX|Kh!}oItU%N9a!1(&Wl0ud<(HOulqbA92&O*K)<*tWPh4$wqX%3TWA@7AF|* z^s8dm^xoU4N@UQ9hJoE{+B?&zj9I3Hv`*fzj5)>=udZR44nF^IEA}?y+AqgA_nE@r z(F+Ft$$m!?3wzR^^fI?2pJE$PZ!o-nB>cq zj;1h6+_Dbx?1@M}G=CA7JXjT#kGop?GJ5u}IHzNz=DbYMm!-C!1KmZ3D_!;(9v_3X7q};*l&i3h3y+2j2fXx+cZ09)>2iA zQ|7s-ESG(Z*^1czsMW`n!*nORU6A{^<5?btpRv%NZl$2$g?G*tL|RHz^-H$XqenCf z1J%^^A7SCegN66=qi~^?>`BFT68H3eo6kJdd-csD1kEvZ>-ow75g8^44#B+y+k0lg zz1OqbB076Z(*i>A`H;Arm|c7C7%W<7A2xnz^b>0GRBfloiF@zXV1_3L zk_ll!9t%N>56V_jn3+{gku<%0dev8KGP~-XZ)0O0wVADAd(&QFcoKR$P>%DK#c)_5XR{Ndf?7~;wFIBD;L~ebyBe|OL47vX zGa)<*Dw(Di5Hc!sREA6bSxo6K$TBW@V6Qsh?z!(cNYKM->Bl}l#Fg7wa5AU+=XB-FdySJxqmwjT|%BsBjP@Nm8 zRRp4y!-yj5_^sw|_3>1n<;0`Y!uB(&QTJVyY2(KYgQaXt&1Cm)DzTQNN!-l6&v;7s znmfxF6&_K-Sxii#o%h4ui7BWAmmLNx*cno@-o{exxA_LanykBAc`NNj7FK?Kl(nyU znnB{d*=F7Bs5_c9b)Y1A!I7M1|U*UXDfLacgMp($;w`>2#@m&-^eEL=My>t<$EdE*r$7<%$@Ji3p=XVQ!rI8!= z@)!*y%T)(fPh|d{(i}McSjZUr%Wz?$!coJcll*2D5u!&1yO+OR_{zBZ;n~Z#C4`ov zD`9PToJ&)3(wA=WJoJ2jEl6dQKk5$qJ-1?&;R9(Y(|Prih15CIuQjVqa?4XFlh4s7 zv9OMT{9Iu^wf%77rP)=i9jPkf*|lwP<2lWtvp1`o+;T!>!r;{3c5PW@Ln%`#VS_T& zt^&!7|DqxhpF1XF_McWv%2?j7ZLt@hDk*C{-?1MYC!>y|aJId5{_7vz6-sWMqUOU8 z38kT36Dd>qqOM@>kf-f10V}>dJh(!Q)Z(MWUr){L!<2_L`@h&&<6qb?oUTjhI%?xG zf4>n%R+Ek;5y1I1N_X&ZTleMTq*pDWenzxdVjbdVdj?cl_AOaeWmhjFG^QwJn_ryH zURKf4%rh@n5W6!NUv!Uu5_2f2N%N7ogQK=Uls)?ntK!4Jpu|<%bzxvX;;YwM2Z+z^ul#8I1TLew! z3y-i!vKHGZGi}{3B-)bk1)YcN4n9V$(@&Q>n6u74M~w=qJj&5o_Dle@0OuEr(Axya zQO}({bu}@UpDQ&;k=CjLd${GhmDWP-@EIbLJzvvUYkps=eZSO^?Glg9lA5VStM;?o zt%?8om>6vq3Jn6`wlkBI?NXPRiI4Gv@h782$_b}y`L5xF2DJ98m5H1<>}h0^JOz~) zM-P9QkkZl1$!O$6t>zccl$|a8dzZfV$Kwdcw^jCW#gS4i))s%x!T4{-oM9 zfms^*>4#HBcR1mrOylyetzYJnf(J*t`HAFaxMxT*=fa!2mq)gaG;YF51e+T^GyQPY zccV9&^Vd$7l!LAtc<`QnGd&|@6nhtVC{P)*k6`hn#`51er>a9II;?3*)JI} zF! zlD&_WEjuGC#33sye68%w{XRYJ`*Gio`}g1P@%!s{{%~BzwLasz&h`1cp3lKkkKLd_ zZre0B;SBTIL6a)Sov&Ia1;(*$`q)yvW?X~swcnvmy^qu1Un$fPc1usbd_AGHx5HJH zOQB@9`RLKV^fwOlZa~wAp>~uxG(MM))sNhnIs2}ho{rXR?q%n>+y0tQoV@LR{asi9 z>wPAaRDWjwx6F3xJTpi4&(rD(DNO|cl`T+F73-z18em9U-F)ZA;o_VnOb*}TVtMA=;Y?tDd8LGsCb z;Y3mMYUt-#^z^2j^P}N2YIS0Q)l3}pM>c=xmAj88XmPdeF6b4H&4mhqaCbFC0~%jU zDg`GdHQ|Ndx3G>Dn+?%S0e>B{@+rXR`#$eacJ zmm}26v-c<#ho;*xvcI-`UwL0OO-3L(;8QLWMl9u3Qq1lv%@?K>MJ8k8S|PJ)Gp89Z zpVbUGzgc)-m9t4#zBedL7hUMVRsH;+jiHIeeUenqj+1NuT}w6h-mczwVOr-H0?~>e z(q&{GG_;>Jvd!iz`LNPiJ2T4_-61+ZuHUy9ED#=lu@aWeeAp-3I9h!Xu(tEdsLf^BErKTrhW+IpEx{|oF#(w=v zg1(@8$)ev{AGYvVS)OpEA0{R29C@NwW!B4T8FlBdolJ~khe7<$y%{~=IFT4>4+{iq z!tpkbX2t3on@5_PB{K>uPabXS)Rlja^wM4w37N+Jh~9Vc=V^LqmFCc-ktI`Z#cO=< zr=EB+i*?vM?9tVc-v-|EEi9|X|X@1iOb2^Z0MNvfai zmS?M1HDfvCmP$*fbxi02Y!llws+9@fU-0Z1OY&bUHT`i+$&Z1F6Vc^3ipgM@K!HDX zy!ra0J8L2vs#^lXBilF{r{Bq)T}HZYo=TN@_Mcf-Z?^aHuErO|wy?1a zFVjb1I&U2RG>b=#te*e4zce)prOCW_1;KeU07ZbpN@8Soxg9I2 zySuYKD1sxNgpmva{2kN-&L>#>&mCM=^} z<5r%YHQ$}Q{)~%s6NQ94zNm|hj9KM54ga$`zmcXS^lZ4Yv7kgSo{ z&2S#ZX1#U2R#LDyCG^%SuiUfuZ&kPnRRQqGGkTO!$d&ipa#0-H!(4=G z{T*{{aQjo(mHETp6`%WD`>6LfJ>S>cr1{qnpG#|+W-pw*YrEifnZavmubJfPDQ~tu zoSVN72=bm!madeJBoBR|eID;t=cF|bq2!OA=|x)|j@|mZvl?}*tF*BagU`Y>GJ+L) zyLTr~lfEl$rg2TjKO61jc`Zvpp7|(PFZMkqq-WF~yLRu(9k*gjgpVoyZaLcTS(~Vq z#ITy{i$~caKZOfjhPYBl>MLhz$V5H7ZR&aFKi~Yi?lo0;n@ruXzG=YrJXd9m>OUhH zQ$=&OqTRMys!Cy1DzJ9teGRoC!$`xP?bG}NqtZeL(r+-+UkHD1>sY(U<9%c^RGhie zM;%G_xbQJ=#-HHiuE!n^Rz}W_lMG&zV(3)#cI~pv;w`~S(fR-RVRd3QIW*9p#-%57xI5Lii(B+fZ7`OeuA#X`cEM z;be(`iQaS<-hTFui1=AmKlQcus*&nvGGue6ZvFb#F`Fkt35Ap81uLmD$60Yo^}U_( zV(Ka}XgRs{!{gk4W~6eRrsJ$|%DFfDsJTgh&PILTy1Km;N-MGz^ub8<5BZDi@;tH4 zVK$AExF;Op1+}yQqG&G}8yd=7Iw<;L=?62*SC*IQtR|IWf!}$HR0;@YsGa!8i=As^ ztVDbhL$lRsCEv zpB4>^nR@Z6V%hSr^1Y8}vO$6McII{64E2MU?@DBqUvGc9P~b4M^4M+VlwOxAKF^WF z`lQzT#Bx4#I^X@e#dz~g>ThS5I*ePnAI23gSYmzW>7P7cq3ISgBQz8m zMl(h-}C~=V4xv%JAe(+i%6%)bla#4UPT4M5s=ZRIJvo178Tf^LN9y-e) zr3wGbF`aJQX_Qj^`R~lb4i^Kq0{z*y-|(8?Xv~-08bj&NllmEkqLvSCdlU^g%}H;D zpAD{Jx?YU@d*Ol!wfh6DzK*g5PLyq`jd0&u2Y( zd-e*^1NUjRst09^N&C3m-?+PL^yTVYGn}Xv^YB73rvDLB#l@eV2z@djqjtD zpTge7p7Bds#XQG);vOAZ)y%(4`m&z*g}sYP>UEGg9e=mPH7-l))}Y0?3%$MXGPD-4 zBnHZ&CV=s=xx+HN?G)x`7@&F>Xtjo!GB7E0xi^@hd`tUAtYw-5wywhb@tj1R?&E>F z!zhWejuHM=aka#4C13Je6aPn<$hR7|iHHW2lIts&c#clII|$P1p~OTE$(up8F*)5W zAXNKKc~Y46;$^I|`m;OZt4^GD!wOxQ3+#oYE}n)1#|mTIo+E!Id@Zqf2KW8E2~PEIky>n#=6!dNEGb zOvm6ydJfkN!+Vl)(vq5nAW8qiG~DPz%RKD*WdcyFbRte@wdmB;RG{x!m~Fe$o%b6r zdl%Ojo_lNk@Thts*PiW%{g8&<3?`r4eU#9f|8h@%are{eCQW76*FU9x{LWJL8l+j} zzS9ws7%rN`PN@{T_fWQIX(@q3REm^YfHq>slhyl#{Y!OUyNsNQ!hF2mzYAgopHyFD z?zr98-5hdRwp!TBPT6ce!HAnvYd9vA<~w9|s>i)^@O)JuZK_kJN9XrHce~(m{lwBX zR=@0<>1}`p;#t_h3O8TwpX?@e!S&b?izZoP2FJ1X^|#9Qk5&vQ*y&R~)w8634j`D{ z_W3|KdQ+6c^fTFoQ!S5rBl4gI>fz^K%{9VVGsyD0o-(i*t;$D00g$T{g?vi+r0V`K zyYR9KoylqsheXPfl_tHA5!bE0e*T;W()lsdX>;o>K#mz7&y&}SdaTA6-O$}yd^Iv_ z^N=kv9;zyRrh!~hhu=77W;`2BTGW8pkXigM`EKc=C89~NNH44g6!bsFee`6oPSoZ@oMq*BWdq^IA3l@C}DGpOHKQ{+d1sQ)sCX{Nm?R{zXj0aBeI7K45{{zLE7Bl&`Q}0m~X}oet<~vR)bC*BaFx1kZ+%ykV z3{%lOwXlD0$_d;=JV*9bpi%=GiD=1+Lls_u!|dT4)O^v@!H0bL={dUsq;%v<)!%1g zCw}!`>i(6P@ipyQu7@1pc5b1Z*8;!ik zz+8I$O(2H+C9@wT1C>86m4PWbD=Vw5h7^4P_8q-DtLJ@PF^(7LdF|!n7#+7UaSvWv z6F(-)gjaKZoe{1+k$L(~lvPi!8Ii3;Z(#!sTWidBXrK7?bcwM#VA9S!tW2_w;{KMf zfNHwKZ26S_cArK-m%s>y+A~e#cIm*m{^x822+%=8MFIupYsee}D$h$u%0bkq%bMSVd`LNoKT@p=y;3`m!Fbnk!Z*Kpn%dH$rjF zp2OZ~>J6RA{I;8YsG+7ucyWj?hkqrp2kMfR*1wyVq+X}0DzT-Y`UG>W3{XgBO`I-M z#HI5QJ`yab_E^@YIL=N#CPM#4^zdL6LpTFjo^|f@V9lw(In`w4AG}CPsiV}%PLb_Z z6Gx(J-xBUuGF)R;=I;7zrAhYAS20EHAz|xXii@X#cfKhm1aDPoJ3fBm(3hp!Mc68k zDBthj5XYqNhLt8~2ruR@g07kJhO#DA1}LhEiXu?cE;SG<10-osfsaLDjrXt-M@Og4K})VLj^Ud`cdo* z@g0F1d|%Z79s<`cz#&e0K^hFgr+5M&Nanyai#<|Az{^DL;EJeJJ9rnXf%yacAFBjy zb@dJ4c2BcP!|!Q*;f6C`dkK$?U%Q3>573~;K0O29Fu^k%cxzySPl@n4|Np_FpF_`# z;RE%bK)wR&37+BxLD{w%YP2e(c5}0{U&2`g04mj*K9gjDVa*P>yeEoHf(8~tUvNcy z($3el2TB$sVZYX(&==y0L)3)n;I8jYY6~nIq^P#9xL7ApuSqf46A_%L7!8vsn!4>F zp4>JQ{Ni$i!2ddpEiY*z@>|2M0!|t)ad}BY5S#}F@Y-52;A~C=-k-k3!2yiD63#aK z$|22YX>A>XUyt1eAryy?q%k|B9sWo0v<;KT{Z$xt0{WLqhW*wp{V#6Lpr@$~@vF45 zw8Y;Y0E-eZbyuD*+eR4w3B3<#NQeOfK+zcH6@o_vx&aoPU<;FPHdI)^M9o1mIdRj^ z&kq8!b{n%Dg#Lt2{Y;jLZGb3mRQO^rSL^yaD`3EZ_+X^gmER=pkS-ViX#RLd9-eOl zbl_fN+$2-uuPeR~4rS@w0IH`=u`W>K%Dqod;Lkd2?wCZ}56I00z8WV7M-4E&XidQ3 zgBLfJI4^03eD#wgDE`HZ0+tGJatpB7@MSl#kHGgi25R(r!MSO(-PLh`c;P9};IN_o zuS3IB9MaV9$-ohsRzNTj5Mwu#6C2>j!o$M>-Zs9rE9(L#y;x2?bwk52*oI^SV;o@5 zUO@@ZVkSpZz+4`-81U9^o5 zPEtPqF|uoB{Rn*Qc;A~LHw`gzD|P7rymJLN<$;q9%tQ{kOT@?)Vt$viLz_6{uc(8+ zJEHCBd5m{m!pC~h0Nm_{Q+1E86;GUoYcPbgfu#wVYWOK%W9WDT03aW(4$~ih`FDBQ zsmcHj?2^2$?Ef>KNZ&geSzTyC}y@m+Xn6!9LU+OVe&4( zxLuaX!Iwn!_$pKsh*a-s6CpF|CH)%tZ_@)b9AL_Gz*|qv35WAS0rWw=`XPJui3!osBgy{f_oP~#IL&ZL*c@lA71)O)Osnc7F0|100CnNwTN?~p; zUchZ`ejQFB0#|&M7X(?*86F?*TH`yz5;vHx?E6+1Y9L6Q{v9j+UG=099u)=wE=FI}N&#ES2OFyrsdQ^82$gd~x9~R}fj> zg`D<7hFSo>12r_Dc?!A&Elo{D*a*-p@zlxbL+Ib42*LsPG6m+EfYA#X&X4ZT6zUYMfb)*MG0P9oFO&2)x%;|M?UX>xl2=pD@H$*-G zn@J#%t(iQ=6t*@sHC0lbMMOx$)qu$tiuDyL)#@j_PaBdU?r$`zb0SzH09^?{LOg6A zB=SG^fD8)I&v&`Gt;M`h?l5x(5j+Q+!Og>Cz=XR(c6<^DfOz0Pa4O*@AocZSVuTMz z0|^^~^*v<9YXKOEk9OAswVuSk5xR5GBzUax%)&SSe$_{{YVr!>a%Q literal 0 HcmV?d00001 diff --git a/notebooks/erlang/intro.ipynb b/notebooks/erlang/intro.ipynb new file mode 100644 index 000000000..8091acbc1 --- /dev/null +++ b/notebooks/erlang/intro.ipynb @@ -0,0 +1,39 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discrete time Erlang models\n", + "\n", + "[Getz and Dougherty (2017)](https://doi.org/10.1080/17513758.2017.1401677) formulate deterministic, discrete-time analogues of Erlang models, that model non-exponential passage times using the method of stages ([Cox and Miller (1965)](https://www.crcpress.com/The-Theory-of-Stochastic-Processes/Cox-Miller/p/book/9780412151705)).\n", + "\n", + "### References\n", + "\n", + "- [Cox and Miller (1965)](https://www.crcpress.com/The-Theory-of-Stochastic-Processes/Cox-Miller/p/book/9780412151705)\n", + "- [Getz and Dougherty (2017)](https://doi.org/10.1080/17513758.2017.1401677)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/erlang/intro.md b/notebooks/erlang/intro.md new file mode 100644 index 000000000..c0310f226 --- /dev/null +++ b/notebooks/erlang/intro.md @@ -0,0 +1,10 @@ + +## Discrete time Erlang models + +[Getz and Dougherty (2017)](https://doi.org/10.1080/17513758.2017.1401677) formulate deterministic, discrete-time analogues of Erlang models, that model non-exponential passage times using the method of stages ([Cox and Miller (1965)](https://www.crcpress.com/The-Theory-of-Stochastic-Processes/Cox-Miller/p/book/9780412151705)). + +### References + +- [Cox and Miller (1965)](https://www.crcpress.com/The-Theory-of-Stochastic-Processes/Cox-Miller/p/book/9780412151705) +- [Getz and Dougherty (2017)](https://doi.org/10.1080/17513758.2017.1401677) + diff --git a/notebooks/erlang/julia.ipynb b/notebooks/erlang/julia.ipynb new file mode 100644 index 000000000..6e04336d7 --- /dev/null +++ b/notebooks/erlang/julia.ipynb @@ -0,0 +1,385 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Discrete stochastic Erlang epidemic model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Author: Lam Ha @lamhm\n", + "\n", + "Date: 2018-10-03" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Packages for Julia" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "using DataFrames\n", + "using Distributions\n", + "using Plots" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Calculate Discrete Erlang Probabilities\n", + "\n", + "The following function is to calculate the discrete truncated Erlang probability, given $k$ and $\\gamma$:\n", + "\n", + "\\begin{equation*}\n", + "p_i =\n", + "\\frac{1}{C(n^{E})}\n", + "\\Bigl(\\sum_{j=0}^{k-1}\n", + " \\frac{e^{-(i-1)\\gamma} \\times ((i-1)\\gamma)^{j}} {j!}\n", + "-\\sum_{j=0}^{k-1}\n", + " \\frac{e^{-i\\gamma} \\times (i\\gamma)^{j}} {j!}\\Bigr),\\quad\\text{for $i=1,...,n^{E}$}.\n", + "\\end{equation*}\n", + "\n", + "where\n", + "\n", + "\\begin{equation*}\n", + "n^{E} = argmin_n\\Bigl(C(n) = 1 - \\sum_{j=0}^{k-1}\n", + " \\frac{e^{-n\\gamma} \\times (n\\gamma)^{j}} {j!} > 0.99 \\Bigr)\n", + "\\end{equation*}\n", + "\n", + "**N.B. The formula of $p_i$ here is slightly different from what is shown in the original paper because the latter (which is likely to be wrong) would lead to negative probabilities.**" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "compute_erlang_discrete_prob (generic function with 1 method)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#' @param k The shape parameter of the Erlang distribution.\n", + "#' @param gamma The rate parameter of the Erlang distribution.\n", + "#' @return A vector containing all p_i values, for i = 1 : n.\n", + "function compute_erlang_discrete_prob(k::Int64, gamma::Float64)\n", + " n_bin = 0\n", + " factorials = zeros(Int64, k + 1)\n", + " factorials[1] = 1 ## factorials[1] = 0!\n", + " for i = 1 : k\n", + " factorials[i + 1] = factorials[i] * i ## factorial[i + 1] = i!\n", + " end\n", + "\n", + " one_sub_cummulative_probs = Float64[]\n", + " cummulative_prob = 0\n", + " while cummulative_prob <= 0.99\n", + " n_bin = n_bin + 1\n", + " push!(one_sub_cummulative_probs, 0)\n", + " \n", + " for j = 0 : (k - 1)\n", + " one_sub_cummulative_probs[end] =\n", + " one_sub_cummulative_probs[end] +\n", + " (\n", + " exp( -n_bin * gamma )\n", + " * ( (n_bin * gamma) ^ j )\n", + " / factorials[j + 1] ## factorials[j + 1] = j!\n", + " )\n", + " end\n", + " cummulative_prob = 1 - one_sub_cummulative_probs[end]\n", + " end\n", + " one_sub_cummulative_probs = unshift!(one_sub_cummulative_probs, 1)\n", + " \n", + " density_prob = one_sub_cummulative_probs[1 : end - 1] - one_sub_cummulative_probs[2 : end]\n", + " density_prob = density_prob / cummulative_prob\n", + "\n", + " return density_prob\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The implementation above calculates discrete probabilities $p_i$'s base on the cummulative density function of the Erlang distribution:\n", + "\n", + "\\begin{equation*}\n", + "p_i = CDF_{Erlang}(x = i) - CDF_{Erlang}(x = i-1)\n", + "\\end{equation*}\n", + "\n", + "Meanwhile, the estimates of $p_i$'s in the original paper seems to be based on the probability density function:\n", + "\n", + "\\begin{equation*}\n", + "p_i = PDF_{Erlang}(x = i)\n", + "\\end{equation*}\n", + "\n", + "While the two methods give slightly different estimates, they do not lead to any visible differences in the results of the subsequent simulations. This implementation uses the CDF function since it leads to faster runs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simulate the SEIR Dynamics\n", + "\n", + "The next function is to simulate the SEIR (susceptible, exposed, infectious, recovered) dynamics of an epidemic, assuming that transmission is frequency-dependent, i.e.\n", + "\n", + "\\begin{equation*}\n", + "\\beta = \\beta_0 \\frac{I(t)}{N}\n", + "\\end{equation*}\n", + "\n", + "where $N$ is the population size, $I(t)$ is the number of infectious people at time $t$, and $\\beta_0$ is the base transmission rate.\n", + "\n", + "This model does not consider births and deads (i.e. $N$ is constant).\n", + "\n", + "The rates at which individuals move through the E and the I classes are assumed to follow Erlang distributions of given shapes ($k^E$, $k^I$) and rates ($\\gamma^E$, $\\gamma^I$)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "seir_simulation (generic function with 1 method)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function seir_simulation( initial_state::Dict, parameters::Dict, max_time::Int64 )\n", + " S_1 = get(initial_state, \"S\", -1)\n", + " E_1 = get(initial_state, \"E\", -1)\n", + " I_1 = get(initial_state, \"I\", -1)\n", + " R_1 = get(initial_state, \"R\", -1) \n", + " (S_1 != -1) || error(\"An initial value for S is required.\") \n", + " (E_1 != -1) || error(\"An initial value for E is required.\") \n", + " (I_1 != -1) || error(\"An initial value for I is required.\") \n", + " (R_1 != -1) || error(\"An initial value for R is required.\") \n", + "\n", + " k_E = get(parameters, \"k_E\", -1)\n", + " gamma_E = get(parameters, \"gamma_E\", -1.0)\n", + " k_I = get(parameters, \"k_I\", -1)\n", + " gamma_I = get(parameters, \"gamma_I\", -1.0)\n", + " beta = get(parameters, \"beta\", -1.0)\n", + " (k_E != -1) || error(\"Parameter k_E must be specified.\") \n", + " (gamma_E != -1.0) || error(\"Parameter gamma_E must be specified.\") \n", + " (k_I != -1) || error(\"Parameter k_I must be specified.\") \n", + " (gamma_I != -1.0) || error(\"Parameter gamma_I must be specified.\") \n", + " (beta != -1.0) || error(\"Parameter beta must be specified.\") \n", + " \n", + " population_size = S_1 + E_1 + I_1 + R_1 \n", + " sim_data = DataFrame( S = Int64[], E = Int64[], I = Int64[], R = Int64[] )\n", + " push!( sim_data, (S_1, E_1, I_1, R_1) )\n", + "\n", + " \n", + " ## Initialise a matrix to store the states of the exposed sub-blocks over time.\n", + " exposed_block_adm_rates = compute_erlang_discrete_prob(k_E, gamma_E)\n", + " n_exposed_blocks = length(exposed_block_adm_rates)\n", + " exposed_blocks = zeros(Int64, max_time, n_exposed_blocks)\n", + " exposed_blocks[1, n_exposed_blocks] = sim_data[1, :E]\n", + "\n", + " \n", + " ## Initialise a matrix to store the states of the infectious sub-blocks over time.\n", + " infectious_block_adm_rates = compute_erlang_discrete_prob(k_I, gamma_I)\n", + " n_infectious_blocks = length(infectious_block_adm_rates)\n", + " infectious_blocks = zeros(Int64, max_time, n_infectious_blocks)\n", + " infectious_blocks[1, n_infectious_blocks] = sim_data[1, :I]\n", + "\n", + " \n", + " ## Run the simulation from time t = 2 to t = max_time\n", + " for time = 2 : max_time\n", + " transmission_rate = beta * sim_data[(time - 1), :I] / population_size\n", + " exposure_prob = 1 - exp(-transmission_rate) \n", + " distribution = Binomial(sim_data[(time - 1), :S], exposure_prob)\n", + " new_exposed = rand(distribution)\n", + " new_infectious = exposed_blocks[time - 1, 1]\n", + " new_recovered = infectious_blocks[time - 1, 1]\n", + "\n", + " if new_exposed > 0\n", + " distribution = Multinomial(new_exposed, exposed_block_adm_rates) \n", + " exposed_blocks[time, :] = rand(distribution)\n", + " end\n", + " exposed_blocks[time, (1 : end - 1)] =\n", + " exposed_blocks[time, (1 : end - 1)] + exposed_blocks[(time - 1), (2 : end)]\n", + "\n", + " if new_infectious > 0\n", + " distribution = Multinomial(new_infectious, infectious_block_adm_rates) \n", + " infectious_blocks[time, :] = rand(distribution)\n", + " end\n", + " infectious_blocks[time, (1 : end - 1)] =\n", + " infectious_blocks[time, (1 : end - 1)] + infectious_blocks[(time - 1), (2 : end)]\n", + "\n", + " push!( sim_data, ( sim_data[time - 1, :S] - new_exposed,\n", + " sum(exposed_blocks[time, :]),\n", + " sum(infectious_blocks[time, :]),\n", + " sim_data[time - 1, :R] + new_recovered )\n", + " )\n", + " end\n", + " \n", + " sim_data[:time] = collect(1 : max_time) \n", + " return sim_data\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run a simulation, simply call the $seir\\_simulation(\\dots)$ method above.\n", + "\n", + "Below is an example simulation where $k^E = 5$, $\\gamma^E = 1$, $k^I = 10$, $\\gamma^I = 1$, and $\\beta_0 = 0.25$ ($R_0 = \\beta_0\\frac{k^I}{\\gamma^I} = 2.5$). The population size is $N = 10,000$. The simmulation starts with 1 exposed case and everyone else belongs to the susceptible class. These settings are the same the the simulation 11 of the original paper.\n", + "\n", + "**N.B. Since this is a stochastic model, there is chance for the outbreak not to occur even with a high $R_0$.**" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10×5 DataFrames.DataFrame\n", + "│ Row │ S │ E │ I │ R │ time │\n", + "├─────┼─────┼───┼───┼──────┼──────┤\n", + "│ 1 │ 981 │ 0 │ 0 │ 9019 │ 291 │\n", + "│ 2 │ 981 │ 0 │ 0 │ 9019 │ 292 │\n", + "│ 3 │ 981 │ 0 │ 0 │ 9019 │ 293 │\n", + "│ 4 │ 981 │ 0 │ 0 │ 9019 │ 294 │\n", + "│ 5 │ 981 │ 0 │ 0 │ 9019 │ 295 │\n", + "│ 6 │ 981 │ 0 │ 0 │ 9019 │ 296 │\n", + "│ 7 │ 981 │ 0 │ 0 │ 9019 │ 297 │\n", + "│ 8 │ 981 │ 0 │ 0 │ 9019 │ 298 │\n", + "│ 9 │ 981 │ 0 │ 0 │ 9019 │ 299 │\n", + "│ 10 │ 981 │ 0 │ 0 │ 9019 │ 300 │" + ] + } + ], + "source": [ + "sim = seir_simulation( Dict(\"S\" => 9999, \"E\" => 1, \"I\" => 0, \"R\" => 0),\n", + " Dict(\"k_E\" => 5, \"gamma_E\" => 1.0,\n", + " \"k_I\" => 10, \"gamma_I\" => 1.0,\n", + " \"beta\" => 0.25),\n", + " 300 )\n", + "print(sim[end - 9 : end, :])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualisation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gr(fmt = :png)\n", + "plot( sim[:, :time],\n", + " [sim[:, :S], sim[:, :E], sim[:, :I], sim[:, :R]],\n", + " label = [\"Susceptible\", \"Exposed\", \"Infectious\", \"Recovered\"],\n", + " xlabel = \"Time\", ylabel = \"Number of Individuals\",\n", + " linealpha = 0.5, linewidth = 3 )\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test Case" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "-------------------\n", + " Test PASSED\n", + "-------------------\n", + "\n" + ] + } + ], + "source": [ + "srand(12345)\n", + "test_sim = seir_simulation( Dict(\"S\" => 9999, \"E\" => 1, \"I\" => 0, \"R\" => 0),\n", + " Dict(\"k_E\" => 5, \"gamma_E\" => 1.0,\n", + " \"k_I\" => 10, \"gamma_I\" => 1.0,\n", + " \"beta\" => 0.25),\n", + " 100 )\n", + "test_result = convert(Array, test_sim[end-2 : end, :])\n", + "\n", + "correct_result = [ 6416 1017 1298 1269 98 ;\n", + " 6210 1045 1379 1366 99 ;\n", + " 6010 1086 1442 1462 100 ]\n", + "\n", + "println(\"\\n-------------------\")\n", + "if correct_result == test_result\n", + " println(\" Test PASSED\") \n", + "else\n", + " println(\" Test FAILED\") \n", + "end\n", + "println(\"-------------------\\n\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.6.3", + "language": "julia", + "name": "julia-0.6" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/erlang/r.ipynb b/notebooks/erlang/r.ipynb new file mode 100644 index 000000000..c52303e72 --- /dev/null +++ b/notebooks/erlang/r.ipynb @@ -0,0 +1,343 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Discrete stochastic Erlang SEIR model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Author: Lam Ha @lamhm\n", + "\n", + "Date: 2018-10-03" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Calculate Discrete Erlang Probabilities\n", + "\n", + "The following function is to calculate the discrete truncated Erlang probability, given $k$ and $\\gamma$:\n", + "\n", + "\\begin{equation*}\n", + "p_i =\n", + "\\frac{1}{C(n^{E})}\n", + "\\Bigl(\\sum_{j=0}^{k-1}\n", + " \\frac{e^{-(i-1)\\gamma} \\times ((i-1)\\gamma)^{j}} {j!}\n", + "-\\sum_{j=0}^{k-1}\n", + " \\frac{e^{-i\\gamma} \\times (i\\gamma)^{j}} {j!}\\Bigr),\\quad\\text{for $i=1,...,n^{E}$}.\n", + "\\end{equation*}\n", + "\n", + "where\n", + "\n", + "\\begin{equation*}\n", + "n^{E} = argmin_n\\Bigl(C(n) = 1 - \\sum_{j=0}^{k-1}\n", + " \\frac{e^{-n\\gamma} \\times (n\\gamma)^{j}} {j!} > 0.99 \\Bigr)\n", + "\\end{equation*}\n", + "\n", + "**N.B. The formula of $p_i$ here is slightly different from what is shown in the original paper because the latter (which is likely to be wrong) would lead to negative probabilities.**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#' @param k The shape parameter of the Erlang distribution.\n", + "#' @param gamma The rate parameter of the Erlang distribution.\n", + "#' @return A vector containing all p_i values, for i = 1 : n.\n", + "compute_erlang_discrete_prob <- function(k, gamma) {\n", + " n_bin <- 0\n", + " factorials <- 1 ## 0! = 1\n", + " for (i in 1 : k) {\n", + " factorials[i + 1] <- factorials[i] * i ## factorial[i + 1] = i!\n", + " }\n", + "\n", + " one_sub_cummulative_probs <- NULL\n", + " cummulative_prob <- 0\n", + " while (cummulative_prob <= 0.99) {\n", + " n_bin <- n_bin + 1\n", + "\n", + " one_sub_cummulative_probs[n_bin] <- 0\n", + " for ( j in 0 : (k - 1) ) {\n", + " one_sub_cummulative_probs[n_bin] <-\n", + " one_sub_cummulative_probs[n_bin] +\n", + " (\n", + " exp( -n_bin * gamma )\n", + " * ( (n_bin * gamma) ^ j )\n", + " / factorials[j + 1] ## factorials[j + 1] = j!\n", + " )\n", + " }\n", + " cummulative_prob <- 1 - one_sub_cummulative_probs[n_bin]\n", + " }\n", + " one_sub_cummulative_probs <- c(1, one_sub_cummulative_probs)\n", + "\n", + " density_prob <-\n", + " head(one_sub_cummulative_probs, -1) - tail(one_sub_cummulative_probs, -1)\n", + " density_prob <- density_prob / cummulative_prob\n", + "\n", + " return(density_prob)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The implementation above calculates discrete probabilities $p_i$'s base on the cummulative density function of the Erlang distribution:\n", + "\n", + "\\begin{equation*}\n", + "p_i = CDF_{Erlang}(x = i) - CDF_{Erlang}(x = i-1)\n", + "\\end{equation*}\n", + "\n", + "Meanwhile, the estimates of $p_i$'s in the original paper seems to be based on the probability density function:\n", + "\n", + "\\begin{equation*}\n", + "p_i = PDF_{Erlang}(x = i)\n", + "\\end{equation*}\n", + "\n", + "While the two methods give slightly different estimates, they do not lead to any visible differences in the results of the subsequent simulations. This implementation uses the CDF function since it leads to faster runs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simulate the SEIR Dynamics\n", + "\n", + "The next function is to simulate the SEIR (susceptible, exposed, infectious, recovered) dynamics of an epidemic, assuming that transmission is frequency-dependent, i.e.\n", + "\n", + "\\begin{equation*}\n", + "\\beta = \\beta_0 \\frac{I(t)}{N}\n", + "\\end{equation*}\n", + "\n", + "where $N$ is the population size, $I(t)$ is the number of infectious people at time $t$, and $\\beta_0$ is the base transmission rate.\n", + "\n", + "This model does not consider births and deads (i.e. $N$ is constant).\n", + "\n", + "The rates at which individuals move through the E and the I classes are assumed to follow Erlang distributions of given shapes ($k^E$, $k^I$) and rates ($\\gamma^E$, $\\gamma^I$)." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "#' @param initial_state A vector that contains 4 numbers corresponding to the\n", + "#' initial values of the 4 classes: S, E, I, and R.\n", + "#' @param parameters A vector that contains 5 numbers corresponding to the\n", + "#' following parameters: the shape and the rate parameters\n", + "#' of the Erlang distribution that will be used to\n", + "#' calculate the transition rates between the E components\n", + "#' (i.e. k[E] and gamma[E]), the shape and the rate parameters\n", + "#' of the Erlang distribution that will be used to\n", + "#' calculate the transition rates between the I components\n", + "#' (i.e. k[I] and gamma[I]), and the base transmission rate\n", + "#' (i.e. beta).\n", + "#' @param max_time The length of the simulation.\n", + "#' @return A data frame containing the values of S, E, I, and R over time\n", + "#' (from 1 to max_time).\n", + "seir_simulation <- function(initial_state, parameters, max_time) {\n", + " names(initial_state) <- c(\"S\", \"E\", \"I\", \"R\")\n", + " names(parameters) <- c( \"erlang_shape_for_E\", \"erlang_rate_for_E\",\n", + " \"erlang_shape_for_I\", \"erlang_rate_for_I\",\n", + " \"base_transmission_rate\" )\n", + "\n", + " population_size <- sum(initial_state)\n", + " sim_data <- data.frame( time = c(1 : max_time),\n", + " S = NA, E = NA, I = NA, R = NA )\n", + " sim_data[1, 2:5] <- initial_state\n", + "\n", + " ## Initialise a matrix to store the states of the exposed sub-blocks over time.\n", + " exposed_block_adm_rates <- compute_erlang_discrete_prob(\n", + " k = parameters[\"erlang_shape_for_E\"],\n", + " gamma = parameters[\"erlang_rate_for_E\"]\n", + " )\n", + " n_exposed_blocks <- length(exposed_block_adm_rates)\n", + " exposed_blocks <- matrix( data = 0, nrow = max_time,\n", + " ncol = n_exposed_blocks )\n", + " exposed_blocks[1, n_exposed_blocks] <- sim_data$E[1]\n", + "\n", + " ## Initialise a matrix to store the states of the infectious sub-blocks over time.\n", + " infectious_block_adm_rates <- compute_erlang_discrete_prob(\n", + " k = parameters[\"erlang_shape_for_I\"],\n", + " gamma = parameters[\"erlang_rate_for_I\"]\n", + " )\n", + " n_infectious_blocks <- length(infectious_block_adm_rates)\n", + " infectious_blocks <- matrix( data = 0, nrow = max_time,\n", + " ncol = n_infectious_blocks )\n", + " infectious_blocks[1, n_infectious_blocks] <- sim_data$I[1]\n", + "\n", + " ## Run the simulation from time t = 2 to t = max_time\n", + " for (time in 2 : max_time) {\n", + " transmission_rate <-\n", + " parameters[\"base_transmission_rate\"] * sim_data$I[time - 1] /\n", + " population_size\n", + " exposure_prob <- 1 - exp(-transmission_rate)\n", + "\n", + " new_exposed <- rbinom(1, sim_data$S[time - 1], exposure_prob)\n", + " new_infectious <- exposed_blocks[time - 1, 1]\n", + " new_recovered <- infectious_blocks[time - 1, 1]\n", + " \n", + " if (new_exposed > 0) {\n", + " exposed_blocks[time, ] <- t(\n", + " rmultinom(1, size = new_exposed,\n", + " prob = exposed_block_adm_rates)\n", + " )\n", + " }\n", + " exposed_blocks[time, ] <-\n", + " exposed_blocks[time, ] +\n", + " c( exposed_blocks[time - 1, 2 : n_exposed_blocks], 0 )\n", + "\n", + " if (new_infectious > 0) {\n", + " infectious_blocks[time, ] <- t(\n", + " rmultinom(1, size = new_infectious,\n", + " prob = infectious_block_adm_rates)\n", + " )\n", + " }\n", + " infectious_blocks[time, ] <-\n", + " infectious_blocks[time, ] +\n", + " c( infectious_blocks[time - 1, 2 : n_infectious_blocks], 0 )\n", + "\n", + " sim_data$S[time] <- sim_data$S[time - 1] - new_exposed\n", + " sim_data$E[time] <- sum(exposed_blocks[time, ])\n", + " sim_data$I[time] <- sum(infectious_blocks[time, ])\n", + " sim_data$R[time] <- sim_data$R[time - 1] + new_recovered\n", + " }\n", + "\n", + " return(sim_data)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run a simulation, simply call the $seir\\_simulation(\\dots)$ method above.\n", + "\n", + "Below is an example simulation where $k^E = 5$, $\\gamma^E = 1$, $k^I = 10$, $\\gamma^I = 1$, and $\\beta_0 = 0.25$ ($R_0 = \\beta_0\\frac{k^I}{\\gamma^I} = 2.5$). The population size is $N = 10,000$. The simmulation starts with 1 exposed case and everyone else belongs to the susceptible class. These settings are the same the the simulation 11 of the original paper.\n", + "\n", + "**N.B. Since this is a stochastic model, there is chance for the outbreak not to occur even with a high $R_0$.**" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "sim <- seir_simulation( initial_state = c(S = 9999, E = 1, I = 0, R = 0),\n", + " parameters = c(5, 1, 10, 1, 0.25),\n", + " max_time = 300 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualisation" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nsfNEIUho/KW7u3v27NmpbgqANLO4NfM4FesnOjS9Q4tmx2HWVNVABgCYErqVf/rTn96+fXuq\nmwIgzY7qsUvB+gmzu07QYwcAaZHQrXzFihU/+MEPNm7cmOrWAEin+GCXil3F9scVsSPYAUAa\nJDTH7vrrrz948ODs2bNdLldk54l4dXV1yW8XgNSTrYZsN/SgJIQIp6DHbv9RPXasuwKAlEvo\nVivL8imnnHLKKaekujUA0sxarAeDqSplt5+hWABIr4SC3euvv57qdgDICKVIE02p2nxifzi6\nOMMtyx6FjWoAIOW41QIFzZxmp/plkewydmaPHUXsAGTKW2+9NW7cOIfDceTIkZO7gqqqkiS9\n8soryW1YivTVY/fQQw8lcomFCxcmqTEA0s1q1ijWJC0gK87eW8sMxL64bSeSeFkAiLjiiiua\nmprWrVvXx2N+/etfDxs27O233y4pKenXxTds2ODxeGbMmKEoyquvvjp16tSBNTZN+rrbfve7\n303kEicd7BYvXhy/8MLhcDz99NNCCL/fv2rVqq1bt4bD4fHjxy9cuHDw4MEncR7ACfWqeJLE\nYGcIcTC2KraaHjsAGdLW1jZx4sTS0tL+/sN77rnnggsumDFjhiRJX/jCF1LQtJToK9g999xz\nKf3Zfr//mmuuOf300yNfynJ0XPjee+/1+/3Lli2z2+1PPvnkHXfccd9998my3N/zKW08kB+U\nuBrF4Q7Znry/iY6oaii2vxArJwCklK7riqI8+eSTjz/+eENDQ2dn5x133LFgwYI5c+a8+eab\nkiStWbOmtrZW1/Ubbrjh9ddfb29vnzFjxooVK6ZPny6E2Ldv3/e///3169e73e758+fffffd\nF1xwwWuvvfbKK688/PDDmzZtslqt69ev/9KXvnTo0KEbbrjh73//e1tb27Rp0+66664zzjjD\n7/cXFxe/+uqrkfy3a9eumpqanTt3jhs37vHHH1++fHldXV1JScn8+fPvueceh8OR0qeir2B3\n0UUXpfRnd3R0VFZWVlRUxJ9samp6++23V6xYMXr0aCHEwoULv/nNb27bti3Sj5r4+VzpMgUy\ny+pOVSm7faGeInZVFradAArC9gO/f7vh/gFepLxozIVTftuvfyLLsqIo//u///vSSy8NHjz4\nN7/5zaJFi772ta+9/vrrF1xwQXV1dWR22emnnz5q1Kht27a5XK4777zzvPPOq6urczqd8+fP\n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\n5ptL/T766KPY2NjFixefOXMm3O0Km6Ae308//fSLL7747rvvegMWlAeAYYa3asGu70OxpV70\n2AHA4DGZTBl+559//muvvUZE2jBjVVXVmjVr0tLSTCbTggULDhw4oJ4vKytbuXKl2WxOSUm5\n4447HA4HEVVXV19//fVpaWkxMTHz5s376quviGj27Nl33nmndrtdu3ZxHFdeXt5lzZIkMQzz\n4osv5ubm3nLLLT004NChQ7NmzTKZTFOmTNmzZ08IP5CgHruPP/44z/MrV67U6XSJiYlCx7/C\ni4qKQtggAAgX3iK5q3nq33ax5QE9dhnosQOIMo+UVz1XU9/PSpJ57uDkcX37XpZlOY7z+JdJ\nX7FiRU5OzpEjR2JiYv70pz9dccUVRUVFRqPxmmuuycnJOXnyZGtr68qVK++///6nnnpq+fLl\nNpvt0KFDZrP5d7/73ZVXXnn69Okbbrjhf/7nf/7617+yLEtEb7755sUXX5yenj579uwua+Y4\n7m9/+9vbb789evTo7hqg1+tXrlx50UUX7dy5s76+/qabburnJxYoqGAny3JSUtIll1wSwhsD\nQKQR/PMnJCerSAzDKX2opMzfY2fjOAuH6VkA0eXfrfZWWer9uh61efpYg91uf+SRR5xO54oV\nK4jowIEDe/fufeeddxISEojokUceefrpp99///2xY8fu379/8+bNqampRPTKK69UVFQcPHhw\n7969x44dGzFiBBH98Y9//Nvf/rZt27bVq1fffffdX3311fz58yVJevvttx999NHual69ejUR\nrVixYvr06T00IDMzs6ioaMeOHSaTyWQy/fKXv9y1a1c/PzRNUMHuyy+/DNX9ACBitU+MVUhs\nZYXYvjxbtckTGRiHBYCB9/zzz//9739Xy21tbVOmTNm6dWtubi4RFRQUEFGnHbMKCws5jmMY\nRr2GiKZNmzZt2rS33nqLZdlx43w9hUajMTs7u6ioKDk5edGiRW+99db8+fN37dplt9tXrVr1\n4YcfdlmzWhg1apRa6K4BRMQwTHZ2tnpG7dsLlXP4e9rlcu3fv/+dd96pq6sjIlEUe/0WABhC\nApey6/NorNZjh11iAWAQrF69+tChQ4cOHdq9e3dcXNy6deuWLFmifsloNBKR0+lUAjz44IMM\nwxCRovQyKCHLsjqke8MNN2zZskVRlDfeeGP58uUWi6W7mtVv1Ov1PTfA7XYTEePfmCe0gSrY\n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\nGjZu3JiWltbn2wDA0ML7509ILlYRGYbv6W/wjovYYSgWIHoJVsVZ1d9KmHNcMSk+Pn7lypUr\nV6587LHHfv3rX99+++3XX399p2tk2fdMYxjmueeee+CBBz766KMPPvjgT3/606uvvsrzPJ21\nLq86GOp0Og0GQ+B5dZjVG/DcE0Wx53m4gTWwLKvX63u9S58F9QieMGFCbW0tgh1A9Ghfyk4h\nbwuri++85UwgbRE7gWFGYBE7gCiWucI5aPcqKSm59957H3/88aysLO3kvHnzNm7c6Ha79Xo9\nwzDqxAgi0gYYRVFsbGzMycm544477rjjjv/8z/985plnNm7cqChKfn7+pEmTiGjfvn379u1b\ntGgRER06dGj27Nnq9xYWFubl5anlkydPqgWXy1VeXh7YhrOdOHFi2bJlROTxeCoqKjIzM7Uv\njR49uoe79EFQQ7EbNmy4++67v//++z7fBgCGFt7SnuTE3uZPaEOxaQLPMcwANgsAwC89Pf3E\niRNXXXXV1q1bi4qKSkpK3n///QceeGDJkiUmk0kQhJEjR+7YsYOIHA7HU089pX7Xyy+/PH36\n9O+++06W5aqqqqNHj44ePXrq1KmzZs265557zpw5U1BQsG7dumPHjk2YMGHRokX33HNPSUmJ\n1+t99tlnJ0+eXFFRodbzyiuvHDlyxOVyPfroo5IkqbktJibm1KlTTU1NnZq6adOmI0eOeDye\n9evXi6J49dVXa1/q+S59EFSw++1vf1tQUDB16lSLxZJzlj7fGwAiVuBSdt7mXh4U5f75X9hM\nDAAGjboI8OLFi++5556JEyeOHj36vvvuu/baa9988031gmeeeea9994bNWrUkiVL7rjjDiIS\nRfHmm2/+2c9+tnLlSqPROH369Nzc3Mcff5yItm7dajQaJ02adOGFF15wwQWPPfYYEb322msZ\nGRlTpkxJSEh49dVXt23bpo1e3nnnnbfffntcXNxLL720ZcuWxMREIlq3bt0zzzwzefJkrZHq\niO1vfvObdevW2Wy2V155ZcuWLZ0WGOnhLn3ABLPT60UXXaTTdfuK0b/MAAAgAElEQVRCtLZM\ny5BQV1cXknqMRqPJZGppafF4gp69M9yZzWaPx4MPRGM2mw0GQ1NT0+AvUNl/socpfNb36Imb\n6UyY18U+0ZrsYycdskxE19usGzNSe7jSarU6HI6h+IEMEKvVqtPpGhoatBeAwGazNTc3Yxdy\n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\nRU5ErkJggg==", + "text/plain": [ + "plot without title" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "library(ggplot2)\n", + "\n", + "ggplot(sim, aes(time)) + \n", + " geom_line(aes(y = S, colour = \"Susceptible\"), lwd = 1) + \n", + " geom_line(aes(y = E, colour = \"Exposed\"), lwd = 1) +\n", + " geom_line(aes(y = I, colour = \"Infectious\"), lwd = 1) +\n", + " geom_line(aes(y = R, colour = \"Recovered\"), lwd = 1) +\n", + " xlab(\"Time\") + ylab(\"Number of Individuals\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test Case" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "-------------------\n", + " Test PASSED\n", + "-------------------\n", + "\n" + ] + } + ], + "source": [ + "set.seed(12345)\n", + "test_sim <- seir_simulation( initial_state = c(S = 9999, E = 1, I = 0, R = 0),\n", + " parameters = c(5, 1, 10, 1, 0.25),\n", + " max_time = 100 )\n", + "test_result <- as.matrix( tail(test_sim, 3) )\n", + "\n", + "correct_result <- matrix( c( 98, 7384, 794, 1015, 807,\n", + " 99, 7184, 864, 1068, 884,\n", + " 100, 6986, 920, 1144, 950), nrow = 3, byrow = T )\n", + "\n", + "n_correct_cells <- sum(correct_result == test_result)\n", + "cat(\"\\n--------------------\\n\")\n", + "if (n_correct_cells == 15) {\n", + " cat(\" Test PASSED\\n\")\n", + "} else {\n", + " cat(\" Test FAILED\\n\")\n", + "}\n", + "cat(\"--------------------\\n\\n\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/nonexponential.md b/notebooks/nonexponential.md new file mode 100644 index 000000000..3b72aa95a --- /dev/null +++ b/notebooks/nonexponential.md @@ -0,0 +1,15 @@ +## Nonexponential passage times + +Author: Simon Frost @sdwfrost + +Date: 2018-10-19 + +Simple models (see e.g. [the standard SIR model](http://epirecip.es/epicookbook/chapters/sir/intro)) assume that individuals transition from infectious to recovered at a constant rate, such that the distribution of infectious periods follows [an exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution). For many infectious, this is an unrealistic assumption, and the distribution of infectious periods has a smaller variance than the exponential. + +A number of approaches can be used to incorporate non-exponential distributions in deterministic epidemic models. + +- The method of stages +- Partial differential equation models +- Integral equation models + +For stochastic models, the method of stages can also be used. Alternatively, discrete-event simulation offers a simpler approach to implement these models, although at greater computational expense.