This report documents the results of a simulation based calibration
(SBC) run for OncoBayes2
. TODO
The calibration data presented here has been generated at and with
the OncoBayes
git version as:
## Created: 2025-03-14 18:24:03 UTC
## git hash: 93931c92e5ab1b5d4e91a56633979bda3a3a6036
## MD5: 3b0d717520a54320f4f7b35a0dbdeb3d
The MD5 hash of the calibration data file presented here must match the above listed MD5:
## /Users/weberse2/rwork/OncoBayes2/inst/sbc/calibration.rds
## "3b0d717520a54320f4f7b35a0dbdeb3d"
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}.\]
The fake data simulation function returns … TODO. 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.
data_scenario | N | total_divergent | min_ess_bulk | min_ess_tail | max_Rhat | total_large_Rhat | min_lp_ess_bulk | min_lp_ess_tail |
---|---|---|---|---|---|---|---|---|
combo2_EX | 10000 | 0 | 137.142 | 41.504 | 1.019 | 0 | 396.903 | 388.595 |
combo2_EXNEX | 10000 | 0 | 44.494 | 34.822 | 1.058 | 0 | 345.659 | 284.837 |
combo3_EXNEX | 10000 | 0 | 10.145 | 36.984 | 1.153 | 1 | 300.542 | 396.677 |
log2bayes_EX | 10000 | 0 | 901.675 | 705.767 | 1.019 | 0 | 325.927 | 463.457 |
log2bayes_EXNEX | 10000 | 0 | 255.437 | 385.463 | 1.016 | 0 | 410.029 | 571.638 |
Large Rhat is defined as exceeding \(1.1\).
ESS speed is in units of ESS per second.
param | statistic | df | p.value |
---|---|---|---|
beta_group[A,I(log(drug_A/1)),intercept] | 25.811 | 31 | 0.730 |
beta_group[A,I(log(drug_A/1)),log_slope] | 41.958 | 31 | 0.091 |
beta_group[B,I(log(drug_A/1)),intercept] | 21.178 | 31 | 0.907 |
beta_group[B,I(log(drug_A/1)),log_slope] | 29.222 | 31 | 0.558 |
beta_group[C,I(log(drug_A/1)),intercept] | 17.754 | 31 | 0.973 |
beta_group[C,I(log(drug_A/1)),log_slope] | 28.614 | 31 | 0.589 |
beta_group[D,I(log(drug_A/1)),intercept] | 28.269 | 31 | 0.607 |
beta_group[D,I(log(drug_A/1)),log_slope] | 36.307 | 31 | 0.235 |
beta_group[E,I(log(drug_A/1)),intercept] | 41.325 | 31 | 0.102 |
beta_group[E,I(log(drug_A/1)),log_slope] | 24.128 | 31 | 0.805 |
beta_group[F,I(log(drug_A/1)),intercept] | 26.643 | 31 | 0.690 |
beta_group[F,I(log(drug_A/1)),log_slope] | 35.533 | 31 | 0.263 |
mu_log_beta[I(log(drug_A/1)),intercept] | 44.339 | 31 | 0.057 |
mu_log_beta[I(log(drug_A/1)),log_slope] | 27.782 | 31 | 0.632 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_intercept] | 25.504 | 31 | 0.745 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_log_slope] | 24.755 | 31 | 0.779 |
tau_log_beta[stratum_2,I(log(drug_A/1)),tau_intercept] | 23.731 | 31 | 0.821 |
tau_log_beta[stratum_2,I(log(drug_A/1)),tau_log_slope] | 23.718 | 31 | 0.822 |
param | statistic | df | p.value |
---|---|---|---|
beta_group[A,I(log(drug_A/1)),intercept] | 23.744 | 31 | 0.821 |
beta_group[A,I(log(drug_A/1)),log_slope] | 30.227 | 31 | 0.506 |
beta_group[B,I(log(drug_A/1)),intercept] | 23.635 | 31 | 0.825 |
beta_group[B,I(log(drug_A/1)),log_slope] | 25.869 | 31 | 0.728 |
beta_group[C,I(log(drug_A/1)),intercept] | 18.944 | 31 | 0.956 |
beta_group[C,I(log(drug_A/1)),log_slope] | 31.386 | 31 | 0.447 |
mu_log_beta[I(log(drug_A/1)),intercept] | 28.083 | 31 | 0.617 |
mu_log_beta[I(log(drug_A/1)),log_slope] | 26.874 | 31 | 0.679 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_intercept] | 38.496 | 31 | 0.167 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_log_slope] | 25.210 | 31 | 0.758 |
param | statistic | df | p.value |
---|---|---|---|
beta_group[A,I(log(drug_A/1)),intercept] | 37.011 | 31 | 0.211 |
beta_group[A,I(log(drug_A/1)),log_slope] | 21.811 | 31 | 0.889 |
beta_group[A,I(log(drug_B/2)),intercept] | 39.789 | 31 | 0.134 |
beta_group[A,I(log(drug_B/2)),log_slope] | 23.456 | 31 | 0.832 |
beta_group[B,I(log(drug_A/1)),intercept] | 22.317 | 31 | 0.873 |
beta_group[B,I(log(drug_A/1)),log_slope] | 27.066 | 31 | 0.669 |
beta_group[B,I(log(drug_B/2)),intercept] | 43.053 | 31 | 0.073 |
beta_group[B,I(log(drug_B/2)),log_slope] | 32.736 | 31 | 0.382 |
beta_group[C,I(log(drug_A/1)),intercept] | 27.034 | 31 | 0.670 |
beta_group[C,I(log(drug_A/1)),log_slope] | 20.493 | 31 | 0.925 |
beta_group[C,I(log(drug_B/2)),intercept] | 33.933 | 31 | 0.328 |
beta_group[C,I(log(drug_B/2)),log_slope] | 23.206 | 31 | 0.842 |
beta_group[D,I(log(drug_A/1)),intercept] | 28.915 | 31 | 0.574 |
beta_group[D,I(log(drug_A/1)),log_slope] | 16.461 | 31 | 0.985 |
beta_group[D,I(log(drug_B/2)),intercept] | 42.400 | 31 | 0.083 |
beta_group[D,I(log(drug_B/2)),log_slope] | 44.774 | 31 | 0.052 |
eta_group[A,I(drug_A/1 * drug_B/2)] | 36.128 | 31 | 0.241 |
eta_group[B,I(drug_A/1 * drug_B/2)] | 28.154 | 31 | 0.613 |
eta_group[C,I(drug_A/1 * drug_B/2)] | 35.904 | 31 | 0.249 |
eta_group[D,I(drug_A/1 * drug_B/2)] | 33.549 | 31 | 0.345 |
mu_eta[m[1]] | 32.954 | 31 | 0.372 |
mu_log_beta[I(log(drug_A/1)),intercept] | 23.642 | 31 | 0.825 |
mu_log_beta[I(log(drug_A/1)),log_slope] | 20.877 | 31 | 0.915 |
mu_log_beta[I(log(drug_B/2)),intercept] | 52.454 | 31 | 0.009 |
mu_log_beta[I(log(drug_B/2)),log_slope] | 35.859 | 31 | 0.251 |
tau_eta[stratum_1,m[1]] | 31.539 | 31 | 0.439 |
tau_eta[stratum_2,m[1]] | 26.470 | 31 | 0.698 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_intercept] | 24.141 | 31 | 0.805 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_log_slope] | 27.366 | 31 | 0.654 |
tau_log_beta[stratum_1,I(log(drug_B/2)),tau_intercept] | 30.080 | 31 | 0.513 |
tau_log_beta[stratum_1,I(log(drug_B/2)),tau_log_slope] | 36.685 | 31 | 0.222 |
tau_log_beta[stratum_2,I(log(drug_A/1)),tau_intercept] | 26.515 | 31 | 0.696 |
tau_log_beta[stratum_2,I(log(drug_A/1)),tau_log_slope] | 25.638 | 31 | 0.738 |
tau_log_beta[stratum_2,I(log(drug_B/2)),tau_intercept] | 30.310 | 31 | 0.501 |
tau_log_beta[stratum_2,I(log(drug_B/2)),tau_log_slope] | 38.931 | 31 | 0.155 |
param | statistic | df | p.value |
---|---|---|---|
beta_group[A,I(log(drug_A/1)),intercept] | 30.010 | 31 | 0.517 |
beta_group[A,I(log(drug_A/1)),log_slope] | 28.704 | 31 | 0.585 |
beta_group[A,I(log(drug_B/2)),intercept] | 55.987 | 31 | 0.004 |
beta_group[A,I(log(drug_B/2)),log_slope] | 35.859 | 31 | 0.251 |
beta_group[B,I(log(drug_A/1)),intercept] | 28.032 | 31 | 0.620 |
beta_group[B,I(log(drug_A/1)),log_slope] | 29.773 | 31 | 0.529 |
beta_group[B,I(log(drug_B/2)),intercept] | 31.514 | 31 | 0.441 |
beta_group[B,I(log(drug_B/2)),log_slope] | 22.880 | 31 | 0.853 |
beta_group[C,I(log(drug_A/1)),intercept] | 34.157 | 31 | 0.318 |
beta_group[C,I(log(drug_A/1)),log_slope] | 32.730 | 31 | 0.382 |
beta_group[C,I(log(drug_B/2)),intercept] | 36.954 | 31 | 0.213 |
beta_group[C,I(log(drug_B/2)),log_slope] | 22.662 | 31 | 0.861 |
eta_group[A,I(drug_A/1 * drug_B/2)] | 30.803 | 31 | 0.476 |
eta_group[B,I(drug_A/1 * drug_B/2)] | 16.941 | 31 | 0.981 |
eta_group[C,I(drug_A/1 * drug_B/2)] | 40.141 | 31 | 0.126 |
mu_eta[m[1]] | 30.374 | 31 | 0.498 |
mu_log_beta[I(log(drug_A/1)),intercept] | 31.200 | 31 | 0.456 |
mu_log_beta[I(log(drug_A/1)),log_slope] | 38.246 | 31 | 0.174 |
mu_log_beta[I(log(drug_B/2)),intercept] | 35.872 | 31 | 0.251 |
mu_log_beta[I(log(drug_B/2)),log_slope] | 22.042 | 31 | 0.882 |
tau_eta[stratum_1,m[1]] | 23.347 | 31 | 0.836 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_intercept] | 26.074 | 31 | 0.718 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_log_slope] | 31.277 | 31 | 0.452 |
tau_log_beta[stratum_1,I(log(drug_B/2)),tau_intercept] | 35.789 | 31 | 0.254 |
tau_log_beta[stratum_1,I(log(drug_B/2)),tau_log_slope] | 27.834 | 31 | 0.630 |
param | statistic | df | p.value |
---|---|---|---|
beta_group[A,I(log(drug_A/1)),intercept] | 32.678 | 31 | 0.384 |
beta_group[A,I(log(drug_A/1)),log_slope] | 19.565 | 31 | 0.945 |
beta_group[A,I(log(drug_B/2)),intercept] | 34.298 | 31 | 0.312 |
beta_group[A,I(log(drug_B/2)),log_slope] | 27.168 | 31 | 0.664 |
beta_group[A,I(log(drug_C/4)),intercept] | 35.750 | 31 | 0.255 |
beta_group[A,I(log(drug_C/4)),log_slope] | 21.235 | 31 | 0.906 |
beta_group[B,I(log(drug_A/1)),intercept] | 30.573 | 31 | 0.488 |
beta_group[B,I(log(drug_A/1)),log_slope] | 32.429 | 31 | 0.396 |
beta_group[B,I(log(drug_B/2)),intercept] | 40.211 | 31 | 0.124 |
beta_group[B,I(log(drug_B/2)),log_slope] | 27.136 | 31 | 0.665 |
beta_group[B,I(log(drug_C/4)),intercept] | 26.752 | 31 | 0.685 |
beta_group[B,I(log(drug_C/4)),log_slope] | 32.486 | 31 | 0.393 |
beta_group[C,I(log(drug_A/1)),intercept] | 39.846 | 31 | 0.133 |
beta_group[C,I(log(drug_A/1)),log_slope] | 41.907 | 31 | 0.091 |
beta_group[C,I(log(drug_B/2)),intercept] | 47.046 | 31 | 0.032 |
beta_group[C,I(log(drug_B/2)),log_slope] | 16.160 | 31 | 0.987 |
beta_group[C,I(log(drug_C/4)),intercept] | 29.664 | 31 | 0.535 |
beta_group[C,I(log(drug_C/4)),log_slope] | 25.882 | 31 | 0.727 |
eta_group[A,I(drug_A/1 * drug_B/2 * drug_C/4)] | 15.398 | 31 | 0.991 |
eta_group[A,I(drug_A/1 * drug_B/2)] | 27.686 | 31 | 0.637 |
eta_group[A,I(drug_A/1 * drug_C/4)] | 22.899 | 31 | 0.853 |
eta_group[A,I(drug_B/2 * drug_C/4)] | 38.829 | 31 | 0.158 |
eta_group[B,I(drug_A/1 * drug_B/2 * drug_C/4)] | 27.264 | 31 | 0.659 |
eta_group[B,I(drug_A/1 * drug_B/2)] | 36.986 | 31 | 0.212 |
eta_group[B,I(drug_A/1 * drug_C/4)] | 28.256 | 31 | 0.608 |
eta_group[B,I(drug_B/2 * drug_C/4)] | 32.838 | 31 | 0.377 |
eta_group[C,I(drug_A/1 * drug_B/2 * drug_C/4)] | 21.888 | 31 | 0.886 |
eta_group[C,I(drug_A/1 * drug_B/2)] | 39.770 | 31 | 0.134 |
eta_group[C,I(drug_A/1 * drug_C/4)] | 40.499 | 31 | 0.118 |
eta_group[C,I(drug_B/2 * drug_C/4)] | 21.338 | 31 | 0.903 |
mu_eta[m[1]] | 33.357 | 31 | 0.353 |
mu_eta[m[2]] | 31.917 | 31 | 0.421 |
mu_eta[m[3]] | 29.562 | 31 | 0.540 |
mu_eta[m[4]] | 47.590 | 31 | 0.029 |
mu_log_beta[I(log(drug_A/1)),intercept] | 32.288 | 31 | 0.403 |
mu_log_beta[I(log(drug_A/1)),log_slope] | 38.899 | 31 | 0.156 |
mu_log_beta[I(log(drug_B/2)),intercept] | 22.259 | 31 | 0.875 |
mu_log_beta[I(log(drug_B/2)),log_slope] | 29.869 | 31 | 0.524 |
mu_log_beta[I(log(drug_C/4)),intercept] | 50.182 | 31 | 0.016 |
mu_log_beta[I(log(drug_C/4)),log_slope] | 32.858 | 31 | 0.376 |
tau_eta[stratum_1,m[1]] | 34.381 | 31 | 0.309 |
tau_eta[stratum_1,m[2]] | 29.786 | 31 | 0.528 |
tau_eta[stratum_1,m[3]] | 29.030 | 31 | 0.568 |
tau_eta[stratum_1,m[4]] | 25.248 | 31 | 0.757 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_intercept] | 25.990 | 31 | 0.722 |
tau_log_beta[stratum_1,I(log(drug_A/1)),tau_log_slope] | 34.573 | 31 | 0.301 |
tau_log_beta[stratum_1,I(log(drug_B/2)),tau_intercept] | 37.050 | 31 | 0.210 |
tau_log_beta[stratum_1,I(log(drug_B/2)),tau_log_slope] | 44.774 | 31 | 0.052 |
tau_log_beta[stratum_1,I(log(drug_C/4)),tau_intercept] | 43.821 | 31 | 0.063 |
tau_log_beta[stratum_1,I(log(drug_C/4)),tau_log_slope] | 31.763 | 31 | 0.428 |
## R version 4.4.2 (2024-10-31)
## Platform: aarch64-apple-darwin20
## Running under: macOS Sequoia 15.3.1
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## time zone: Europe/Zurich
## tzcode source: internal
##
## attached base packages:
## [1] tools stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] ggplot2_3.5.1 broom_1.0.6 tidyr_1.3.1 dplyr_1.1.4
## [5] assertthat_0.2.1 knitr_1.47 here_1.0.1
##
## loaded via a namespace (and not attached):
## [1] gtable_0.3.5 jsonlite_1.8.8 compiler_4.4.2 tidyselect_1.2.1
## [5] jquerylib_0.1.4 scales_1.3.0 yaml_2.3.8 fastmap_1.2.0
## [9] R6_2.5.1 generics_0.1.3 backports_1.5.0 tibble_3.2.1
## [13] munsell_0.5.1 rprojroot_2.0.4 bslib_0.7.0 pillar_1.9.0
## [17] rlang_1.1.4 utf8_1.2.4 cachem_1.1.0 xfun_0.45
## [21] sass_0.4.9 cli_3.6.2 withr_3.0.0 magrittr_2.0.3
## [25] digest_0.6.35 grid_4.4.2 lifecycle_1.0.4 vctrs_0.6.5
## [29] evaluate_0.24.0 glue_1.7.0 colorspace_2.1-0 fansi_1.0.6
## [33] rmarkdown_2.27 purrr_1.0.2 pkgconfig_2.0.3 htmltools_0.5.8.1