knitr::opts_chunk$set(cache = TRUE, echo = FALSE, message = FALSE, warning = FALSE)
We are interested in finding the closest mechanistic model $q(\cdot|\lambda)$, parameterised by $\lambda$ to a known statistical model $p(\cdot|\theta)$, where $\theta$ is known.
$$ \begin{aligned} KL[q(\cdot)||p(\cdot|\theta)] &= \sum_{y \in \mathcal{Y}} q(y) \log \frac{ q(y) }{p(y|\theta)} \ &= \log[z(\theta)] - \sum_{y \in \mathcal{Y}} q(y) \left[ \sum_i \theta_i s_i(y) \right] + \sum_{y \in \mathcal{Y}} q(y) \log q(y) \end{aligned} $$
set.seed(1) library(StartNetwork) library(parallel)
cl <- makeCluster(detectCores()) param_range_large <- rep(seq(0.025, 0.975, by = 0.025), 20) x1 <- parSapply(cl, param_range_large, er_KL, nl = 5, pl = 0.3, include_entropy = TRUE, replicates = 1000) x2 <- parSapply(cl, param_range_large, er_graphs_KL, nl = 5, pl = 0.3, include_entropy = TRUE, replicates = 1000)
library(ggplot2) df <- data.frame(x = c(x1, x2), parameter = rep(param_range_large, 2), summary_statistic = c(rep("a", length(param_range_large)), rep("b", length(param_range_large)))) ggplot(df) + aes(x = parameter, y = x, group = parameter, col = summary_statistic) + geom_boxplot()
replicates <- 10 G_4 <- replicate(replicates,er_graphs_KL(0.3, pl = 0.3, nl = 4, replicates = 1000)) G_8 <- replicate(replicates,er_graphs_KL(0.3, pl = 0.3, nl = 8, replicates = 1000)) G_12 <- replicate(replicates,er_graphs_KL(0.3, pl = 0.3, nl = 12, replicates = 1000)) G_16 <- replicate(replicates,er_graphs_KL(0.3, pl = 0.3, nl = 16, replicates = 1000)) G <- data.frame(value = c(G_4, G_8, G_12, G_15), nodes = rep(c(4, 8, 12, 16), replicates), space = "G") S2_4 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 4, replicates = 1000, sorted = FALSE)) S2_8 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 8, replicates = 1000, sorted = FALSE)) S2_12 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 12, replicates = 1000, sorted = FALSE)) S2_16 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 16, replicates = 1000, sorted = FALSE)) S2 <- data.frame(value = c(S2_4, S2_8, S2_12, S2_16), nodes = rep(c(4, 8, 12, 16), replicates), space = "S2") S3_4 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 4, replicates = 1000, sorted = TRUE)) S3_8 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 8, replicates = 1000, sorted = TRUE)) S3_12 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 12, replicates = 1000, sorted = TRUE)) S3_16 <- replicate(replicates,er_dd_KL(0.3, pl = 0.3, nl = 16, replicates = 1000, sorted = TRUE)) S3 <- data.frame(value = c(S3_4, S3_8, S3_12, S3_16), nodes = rep(c(4, 8, 12, 16), replicates), space = "S3") df <- dplyr::bind_rows(G, S2, S3) ggplot(df) + aes(x = factor(nodes), y = value, col = space) + geom_boxplot()
param_range_large <- rep(seq(0.2, 0.4, by = 0.05), 10) g <- parSapply(cl, param_range_large, er_graphs_KL, nl = 8, pl = 0.3, include_entropy = TRUE, replicates = 2000) s_2 <- parSapply(cl, param_range_large, er_dd_KL, nl = 8, pl = 0.3, replicates = 2000, sorted = FALSE) s_3 <- parSapply(cl, param_range_large, er_dd_KL, nl = 8, pl = 0.3, replicates = 2000, sorted = TRUE) df <- data.frame(x = c(g, s_2, s_3), parameter = rep(param_range_large, 3), space = c(rep("g", length(param_range_large)), rep("s_2", length(param_range_large)), rep("s_3", length(param_range_large)) )) ggplot(df) + aes(x = parameter, y = x, group = parameter) + geom_boxplot() + facet_wrap(~space) param_range_large <- rep(seq(1, 9), 10) s_3 <- parSapply(cl, param_range_large, ba_dd_KL_m, nl = 15, pl = 1, replicates = 20, sorted = TRUE) df <- data.frame(x = s_3, parameter = param_range_large) ggplot(df) + aes(x = parameter, y = x, group = parameter) + geom_boxplot()
ba_dd_KL_m(2, nl = 30, pl = -15)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.