## ----setup, include = F------------------------------------------------------- knitr::opts_chunk$set( echo = T, collapse = T, warning = F, message = F, prompt = T, comment = "#", out.width = "100%" ) library(ggplot2) ggplot2::theme_set(theme_bw()) ## ----eval=T, echo=T----------------------------------------------------------- library(tipmap) prior_data <- create_prior_data( n_total = c(160, 240, 320), est = c(1.16, 1.43, 1.59), se = c(0.46, 0.35, 0.28) ) ## ----eval=F, echo=F----------------------------------------------------------- # # compute standard deviation of change in each arm (assumed equal); # # for two-sample data: # sd <- prior_data$se / sqrt(1/(prior_data$n_total/2) + 1/(prior_data$n_total/2)) # sigma1 <- mean(sd) # sigma1 # = 2.70826 # nt <- 15; nc <- 15 # f <- (nt+nc)^2 / (nt*nc) # sigma2 <- sqrt(f)*sigma1 # sigma2 # = 5.41652 ## ----eval=T, echo=T----------------------------------------------------------- print(prior_data) ## ----eval=T, echo=T----------------------------------------------------------- set.seed(123) uisd <- 5.42 map_mcmc <- RBesT::gMAP( formula = cbind(est, se) ~ 1 | study_label, data = prior_data, family = gaussian, weights = n_total, tau.dist = "HalfNormal", tau.prior = cbind(0, uisd / 16), beta.prior = cbind(0, uisd) ) ## ----eval=T, echo=T----------------------------------------------------------- summary(map_mcmc) ## ----forest_plot, eval=T, echo=T, fig.width=6, fig.height=3, dev=c('png'), out.width="70%", fig.cap='Figure 1: Forest plot.'---- plot(map_mcmc)$forest_model ## ----eval=T, echo=T----------------------------------------------------------- map_prior <- RBesT::automixfit( sample = map_mcmc, Nc = seq(1, 4), k = 6, thresh = -Inf ) ## ----eval=T, echo=T----------------------------------------------------------- print(map_prior) ## ----map_prior_dens, eval=T, echo=T, fig.width=6, fig.height=3, dev=c('png'), out.width="70%", fig.cap='Figure 2: Overlay of the MCMC histogram of the MAP prior and the fitted parametric mixture approximation.'---- plot(map_prior)$mix ## ----eval=T, echo=T----------------------------------------------------------- pediatric_trial <- create_new_trial_data(n_total = 30, est = 1.02, se = 1.4) ## ----eval=T, echo=T----------------------------------------------------------- print(pediatric_trial) ## ----eval=T, echo=T----------------------------------------------------------- posterior <- create_posterior_data( map_prior = map_prior, new_trial_data = pediatric_trial, sigma = uisd) ## ----eval=T, echo=T----------------------------------------------------------- head(posterior, 4) ## ----eval=T, echo=T----------------------------------------------------------- tail(posterior, 4) ## ----eval=F, echo=F----------------------------------------------------------- # length(posterior$weight) # dim(posterior)[1] # class(posterior) # colnames(posterior)[-1] ## ----eval=T, echo=T----------------------------------------------------------- colnames(posterior)[-1] ## ----eval=T, echo=T----------------------------------------------------------- tipmap_data <- create_tipmap_data( new_trial_data = pediatric_trial, posterior = posterior, map_prior = map_prior) ## ----tipmap_plot, eval=T, echo=T, fig.width=8, fig.height=5, dev=c('png'), out.width="95%", fig.cap='Figure 3: Tipping point plot.'---- (p1 <- tipmap_plot(tipmap_data = tipmap_data)) ## ----tipmap_plot_refline, eval=T, echo=T, fig.width=8, fig.height=5, dev=c('png'), out.width="95%", fig.cap='Figure 4: Tipping point plot with reference line.'---- primary_weight <- 0.38 (p2 <- p1 + ggplot2::geom_vline(xintercept = primary_weight, col="green4")) ## ----eval=T, echo=T----------------------------------------------------------- get_posterior_by_weight( posterior = posterior, weight = c(primary_weight) ) ## ----eval=T, echo=T----------------------------------------------------------- tipp_points <- get_tipping_points( tipmap_data = tipmap_data, quantile = c(0.2, 0.1, 0.05, 0.025) ) tipp_points ## ----eval=T, echo=T----------------------------------------------------------- prior_primary <- RBesT::robustify( priormix = map_prior, weight = (1 - primary_weight), m = 0, n = 1, sigma = uisd ) ## ----eval=T, echo=T----------------------------------------------------------- posterior_primary <- RBesT::postmix( priormix = prior_primary, m = pediatric_trial["mean"], se = pediatric_trial["se"] ) ## ----eval=F, echo=F----------------------------------------------------------- # summary(posterior_primary) ## ----eval=T, echo=T----------------------------------------------------------- round(1 - RBesT::pmix(posterior_primary, q = 0), 3) round(1 - RBesT::pmix(posterior_primary, q = 0.5), 3) round(1 - RBesT::pmix(posterior_primary, q = 1), 3) ## ----cumulative_dens, eval=T, echo=T, fig.width=7, fig.height=4.5, dev=c('png'), out.width="80%", fig.cap='Figure 5: Cumulative density of posterior with weight w=0.38.'---- library(ggplot2) plot(posterior_primary, fun = RBesT::pmix) + scale_x_continuous(breaks = seq(-1, 2, 0.5)) + scale_y_continuous(breaks = 1-c(1, 0.927, 0.879, 0.782, 0.5, 0), limits = c(0,1), expand = c(0,0) ) + ylab("Cumulative density of posterior with w=0.38") + xlab("Quantile") + geom_segment(aes(x = 0, y = RBesT::pmix(mix = posterior_primary, q = 0), xend = 0, yend = 1), col="red") + geom_segment(aes(x = 0.5, y = RBesT::pmix(mix = posterior_primary, q = 0.5), xend = 0.5, yend = 1), col="red") + geom_segment(aes(x = 1, y = RBesT::pmix(mix = posterior_primary, q = 1), xend = 1, yend = 1), col="red") + theme_bw() ## ----eval=T, echo=T----------------------------------------------------------- tipp_points[3] ## ----eval=T, echo=T----------------------------------------------------------- prior_95p <- RBesT::robustify( priormix = map_prior, weight = (1 - tipp_points[3]), m = 0, n = 1, sigma = uisd ) ## ----eval=T, echo=T----------------------------------------------------------- posterior_95p <- RBesT::postmix( priormix = prior_95p, m = pediatric_trial["mean"], se = pediatric_trial["se"] ) ## ----eval=T, echo=T----------------------------------------------------------- round(1 - RBesT::pmix(posterior_95p, q = 0), 3)