This report documents the results of a simulation based calibration (SBC) run for RBesT
. The calibration data will be generated whenever relevant changes to the gMAP
function were made. The calibration runs are performed for typical use cases of gMAP
. These include the three likelihoods (binomial, gaussian & Poisson), a sparse (\(2\) trials) and dense (\(10\) trials) data situation and finally a run with a very/less conservative prior choice for between-trial heterogeniety parameter.
The calibration data presented here has been generated at and with the RBesT
git version as:
## Created: 2021-09-03 08:43:14 UTC
## git hash: 3b254d41091496843b68a39477b149202796a5f5
## MD5: 8f363c657046968a77eee164222f45dd
The MD5 hash of the calibration data file presented here must match the above listed MD5:
## calibration.rds
## "8f363c657046968a77eee164222f45dd"
Simulation based calibration (SBC) is a necessary condition which must be met for any Bayesian analysis with proper priors. The details are presented in Talts, et. al (see https://arxiv.org/abs/1804.06788).
Self-consistency of any Bayesian analysis with a proper prior:
\[ p(\theta) = \iint \mbox{d}\tilde{y} \, \mbox{d}\tilde{\theta} \, p(\theta|\tilde{y}) \, p(\tilde{y}|\tilde{\theta}) \, p(\tilde{\theta}) \] \[ \Leftrightarrow p(\theta) = \iint \mbox{d}\tilde{y} \, \mbox{d}\tilde{\theta} \, p(\theta,\tilde{y},\tilde{\theta}) \]
SBC procedure:
Repeat \(s=1, ..., S\) times:
Sample from the prior \[\tilde{\theta} \sim p(\theta)\]
Sample fake data \[\tilde{y} \sim p(y|\tilde{\theta})\]
Obtain \(L\) posterior samples \[\{\theta_1, ..., \theta_L\} \sim p(\tilde{\theta}|\tilde{y})\]
Calculate the rank \(r_s\) of the prior draw \(\tilde{\theta}\) wrt to the posterior sample \(\{\theta_1, ..., \theta_L\} \sim p(\tilde{\theta}|\tilde{y})\) which falls into the range \([0,L]\) out of the possible \(L+1\) ranks. The rank is calculated as \[r_s = \sum_{l=1}^L \mathbb{I}[ \theta_l < \tilde{\theta}]\]
The \(S\) ranks then form a uniform \(0-1\) density and the count in each bin has a binomial distribution with probability of \[p(r \in \mbox{Any Bin}) =\frac{(L+1)}{S}.\]
Likelihood:
Hierarchical prior:
\[ g(\theta_j)|\mu,\tau \sim \mbox{Normal}(\mu, \tau^2)\]
\[\mu \sim \mbox{Normal}(m_\mu, s^2_\mu)\] \[\tau \sim \mbox{Normal}^+(0, s^2_\tau)\]
The fake data simulation function returns for binomial and Poisson data the sum of the responses while for normal the mean summary is used. Please refer to the sbc_tools.R
and make_reference_rankhist.R
R programs for the implementation details.
The reference runs are created with \(L=1023\) posterior draws for each replication and a total of \(S=10^4\) replications are run per case. For the evaluation here the results are reduced to \(B=L'+1=64\) bins to ensure a sufficiently large sample size per bin.
family | problem | sd_tau | N | total_divergent | min_ess | max_Rhat | total_large_Rhat | min_lp_ess_bulk | min_lp_ess_tail |
---|---|---|---|---|---|---|---|---|---|
binomial | dense | 0.5 | 10000 | 0 | 917 | 1.012595 | 0 | 407 | 244 |
binomial | dense | 1.0 | 10000 | 0 | 571 | 1.012849 | 0 | 388 | 391 |
binomial | sparse | 0.5 | 10000 | 11 | 465 | 1.009765 | 0 | 390 | 261 |
binomial | sparse | 1.0 | 10000 | 11 | 162 | 1.012056 | 0 | 325 | 281 |
gaussian | dense | 0.5 | 10000 | 0 | 395 | 1.015950 | 0 | 343 | 319 |
gaussian | dense | 1.0 | 10000 | 3 | 436 | 1.019491 | 0 | 317 | 271 |
gaussian | sparse | 0.5 | 10000 | 1532 | 16 | 1.167858 | 0 | 41 | 31 |
gaussian | sparse | 1.0 | 10000 | 2831 | 2 | 2.434608 | 1 | 3 | 23 |
poisson | dense | 0.5 | 10000 | 1 | 451 | 1.011987 | 0 | 265 | 327 |
poisson | dense | 1.0 | 10000 | 0 | 384 | 1.012953 | 0 | 266 | 340 |
poisson | sparse | 0.5 | 10000 | 3018 | 5 | 1.714576 | 1 | 10 | 50 |
poisson | sparse | 1.0 | 10000 | 3326 | 6 | 1.531513 | 1 | 8 | 110 |
Note: Large Rhat is defined as exceeding 1.2.
problem | likelihood | sd_tau | parameter | statistic | df | p.value | |
---|---|---|---|---|---|---|---|
1 | dense | binomial | 0.5 | mu | 37.747 | 63 | 0.995 |
13 | dense | binomial | 1 | mu | 64.026 | 63 | 0.440 |
25 | dense | gaussian | 0.5 | mu | 65.011 | 63 | 0.406 |
37 | dense | gaussian | 1 | mu | 46.362 | 63 | 0.943 |
49 | dense | poisson | 0.5 | mu | 62.490 | 63 | 0.494 |
61 | dense | poisson | 1 | mu | 59.021 | 63 | 0.619 |
73 | sparse | binomial | 0.5 | mu | 62.298 | 63 | 0.501 |
77 | sparse | binomial | 1 | mu | 73.485 | 63 | 0.172 |
81 | sparse | gaussian | 0.5 | mu | 59.904 | 63 | 0.587 |
85 | sparse | gaussian | 1 | mu | 71.680 | 63 | 0.212 |
89 | sparse | poisson | 0.5 | mu | 57.024 | 63 | 0.688 |
93 | sparse | poisson | 1 | mu | 66.240 | 63 | 0.366 |
problem | likelihood | sd_tau | parameter | statistic | df | p.value | |
---|---|---|---|---|---|---|---|
2 | dense | binomial | 0.5 | tau | 58.624 | 63 | 0.633 |
14 | dense | binomial | 1 | tau | 84.032 | 63 | 0.040 |
26 | dense | gaussian | 0.5 | tau | 69.683 | 63 | 0.263 |
38 | dense | gaussian | 1 | tau | 53.555 | 63 | 0.796 |
50 | dense | poisson | 0.5 | tau | 67.430 | 63 | 0.328 |
62 | dense | poisson | 1 | tau | 79.309 | 63 | 0.080 |
74 | sparse | binomial | 0.5 | tau | 51.635 | 63 | 0.846 |
78 | sparse | binomial | 1 | tau | 61.517 | 63 | 0.529 |
82 | sparse | gaussian | 0.5 | tau | 63.424 | 63 | 0.461 |
86 | sparse | gaussian | 1 | tau | 63.757 | 63 | 0.450 |
90 | sparse | poisson | 0.5 | tau | 51.251 | 63 | 0.855 |
94 | sparse | poisson | 1 | tau | 61.773 | 63 | 0.520 |
problem | likelihood | sd_tau | parameter | statistic | df | p.value | |
---|---|---|---|---|---|---|---|
3 | dense | binomial | 0.5 | theta[1] | 69.709 | 63 | 0.262 |
4 | dense | binomial | 0.5 | theta[10] | 62.925 | 63 | 0.479 |
5 | dense | binomial | 0.5 | theta[2] | 49.830 | 63 | 0.886 |
6 | dense | binomial | 0.5 | theta[3] | 56.115 | 63 | 0.718 |
7 | dense | binomial | 0.5 | theta[4] | 59.789 | 63 | 0.591 |
8 | dense | binomial | 0.5 | theta[5] | 65.203 | 63 | 0.400 |
9 | dense | binomial | 0.5 | theta[6] | 73.779 | 63 | 0.166 |
10 | dense | binomial | 0.5 | theta[7] | 75.750 | 63 | 0.130 |
11 | dense | binomial | 0.5 | theta[8] | 59.763 | 63 | 0.592 |
12 | dense | binomial | 0.5 | theta[9] | 71.859 | 63 | 0.208 |
15 | dense | binomial | 1 | theta[1] | 59.648 | 63 | 0.597 |
16 | dense | binomial | 1 | theta[10] | 79.834 | 63 | 0.075 |
17 | dense | binomial | 1 | theta[2] | 62.016 | 63 | 0.511 |
18 | dense | binomial | 1 | theta[3] | 48.115 | 63 | 0.917 |
19 | dense | binomial | 1 | theta[4] | 52.698 | 63 | 0.819 |
20 | dense | binomial | 1 | theta[5] | 57.254 | 63 | 0.680 |
21 | dense | binomial | 1 | theta[6] | 66.970 | 63 | 0.343 |
22 | dense | binomial | 1 | theta[7] | 88.947 | 63 | 0.017 |
23 | dense | binomial | 1 | theta[8] | 53.261 | 63 | 0.804 |
24 | dense | binomial | 1 | theta[9] | 71.706 | 63 | 0.211 |
27 | dense | gaussian | 0.5 | theta[1] | 54.208 | 63 | 0.777 |
28 | dense | gaussian | 0.5 | theta[10] | 66.317 | 63 | 0.363 |
29 | dense | gaussian | 0.5 | theta[2] | 75.597 | 63 | 0.133 |
30 | dense | gaussian | 0.5 | theta[3] | 44.134 | 63 | 0.966 |
31 | dense | gaussian | 0.5 | theta[4] | 54.784 | 63 | 0.760 |
32 | dense | gaussian | 0.5 | theta[5] | 66.854 | 63 | 0.346 |
33 | dense | gaussian | 0.5 | theta[6] | 63.027 | 63 | 0.475 |
34 | dense | gaussian | 0.5 | theta[7] | 51.046 | 63 | 0.860 |
35 | dense | gaussian | 0.5 | theta[8] | 64.166 | 63 | 0.435 |
36 | dense | gaussian | 0.5 | theta[9] | 50.829 | 63 | 0.865 |
39 | dense | gaussian | 1 | theta[1] | 51.917 | 63 | 0.839 |
40 | dense | gaussian | 1 | theta[10] | 79.616 | 63 | 0.077 |
41 | dense | gaussian | 1 | theta[2] | 68.928 | 63 | 0.284 |
42 | dense | gaussian | 1 | theta[3] | 69.274 | 63 | 0.274 |
43 | dense | gaussian | 1 | theta[4] | 64.243 | 63 | 0.433 |
44 | dense | gaussian | 1 | theta[5] | 44.442 | 63 | 0.963 |
45 | dense | gaussian | 1 | theta[6] | 80.691 | 63 | 0.066 |
46 | dense | gaussian | 1 | theta[7] | 52.326 | 63 | 0.829 |
47 | dense | gaussian | 1 | theta[8] | 59.123 | 63 | 0.615 |
48 | dense | gaussian | 1 | theta[9] | 71.437 | 63 | 0.218 |
51 | dense | poisson | 0.5 | theta[1] | 61.760 | 63 | 0.521 |
52 | dense | poisson | 0.5 | theta[10] | 66.995 | 63 | 0.342 |
53 | dense | poisson | 0.5 | theta[2] | 63.642 | 63 | 0.454 |
54 | dense | poisson | 0.5 | theta[3] | 65.382 | 63 | 0.394 |
55 | dense | poisson | 0.5 | theta[4] | 72.870 | 63 | 0.185 |
56 | dense | poisson | 0.5 | theta[5] | 69.760 | 63 | 0.261 |
57 | dense | poisson | 0.5 | theta[6] | 63.898 | 63 | 0.445 |
58 | dense | poisson | 0.5 | theta[7] | 61.120 | 63 | 0.544 |
59 | dense | poisson | 0.5 | theta[8] | 81.203 | 63 | 0.061 |
60 | dense | poisson | 0.5 | theta[9] | 62.797 | 63 | 0.484 |
63 | dense | poisson | 1 | theta[1] | 54.938 | 63 | 0.755 |
64 | dense | poisson | 1 | theta[10] | 57.626 | 63 | 0.668 |
65 | dense | poisson | 1 | theta[2] | 57.114 | 63 | 0.685 |
66 | dense | poisson | 1 | theta[3] | 81.946 | 63 | 0.055 |
67 | dense | poisson | 1 | theta[4] | 68.224 | 63 | 0.304 |
68 | dense | poisson | 1 | theta[5] | 82.010 | 63 | 0.054 |
69 | dense | poisson | 1 | theta[6] | 53.222 | 63 | 0.805 |
70 | dense | poisson | 1 | theta[7] | 87.322 | 63 | 0.023 |
71 | dense | poisson | 1 | theta[8] | 59.776 | 63 | 0.592 |
72 | dense | poisson | 1 | theta[9] | 80.909 | 63 | 0.064 |
75 | sparse | binomial | 0.5 | theta[1] | 73.523 | 63 | 0.171 |
76 | sparse | binomial | 0.5 | theta[2] | 54.541 | 63 | 0.767 |
79 | sparse | binomial | 1 | theta[1] | 58.957 | 63 | 0.621 |
80 | sparse | binomial | 1 | theta[2] | 60.083 | 63 | 0.581 |
83 | sparse | gaussian | 0.5 | theta[1] | 66.061 | 63 | 0.372 |
84 | sparse | gaussian | 0.5 | theta[2] | 54.656 | 63 | 0.764 |
87 | sparse | gaussian | 1 | theta[1] | 51.494 | 63 | 0.850 |
88 | sparse | gaussian | 1 | theta[2] | 58.010 | 63 | 0.654 |
91 | sparse | poisson | 0.5 | theta[1] | 71.987 | 63 | 0.205 |
92 | sparse | poisson | 0.5 | theta[2] | 51.085 | 63 | 0.859 |
95 | sparse | poisson | 1 | theta[1] | 68.352 | 63 | 0.301 |
96 | sparse | poisson | 1 | theta[2] | 50.701 | 63 | 0.868 |
## R version 3.6.3 (2020-02-29)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.5 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] tools stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] purrr_0.3.4 rstan_2.19.3 StanHeaders_2.19.2 RBesT_1.6-3
## [5] testthat_2.3.2 devtools_2.3.0 usethis_1.6.0 ggplot2_3.3.0
## [9] broom_0.5.5 tidyr_1.0.2 dplyr_0.8.5 assertthat_0.2.1
## [13] knitr_1.28 rmarkdown_2.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.4.6 mvtnorm_1.1-0 lattice_0.20-44 prettyunits_1.1.1
## [5] ps_1.3.2 rprojroot_1.3-2 digest_0.6.25 plyr_1.8.6
## [9] R6_2.4.1 ggridges_0.5.2 backports_1.1.6 stats4_3.6.3
## [13] evaluate_0.14 highr_0.8 pillar_1.4.3 rlang_0.4.5
## [17] rstudioapi_0.11 callr_3.4.3 checkmate_2.0.0 desc_1.2.0
## [21] stringr_1.4.0 loo_2.2.0 munsell_0.5.0 compiler_3.6.3
## [25] xfun_0.13 pkgconfig_2.0.3 pkgbuild_1.0.6 rstantools_2.1.1
## [29] htmltools_0.4.0 tidyselect_1.0.0 tibble_3.0.0 gridExtra_2.3
## [33] codetools_0.2-18 matrixStats_0.56.0 fansi_0.4.1 crayon_1.3.4
## [37] withr_2.1.2 grid_3.6.3 nlme_3.1-152 gtable_0.3.0
## [41] lifecycle_0.2.0 magrittr_1.5 scales_1.1.0 RcppParallel_5.1.4
## [45] cli_2.0.2 stringi_1.4.6 fs_1.4.1 remotes_2.1.1
## [49] ellipsis_0.3.0 generics_0.0.2 vctrs_0.2.4 Formula_1.2-3
## [53] glue_1.4.0 processx_3.4.2 pkgload_1.0.2 parallel_3.6.3
## [57] yaml_2.2.1 inline_0.3.15 colorspace_1.4-1 sessioninfo_1.1.1
## [61] bayesplot_1.7.1 memoise_1.1.0