-
-
Save MJacobs1985/434e98a381f7dec468a0d0fe4d65249e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| rm(list = ls()) | |
| ## Visualizing Tidy Draws from brms models | |
| library(magrittr) | |
| library(dplyr) | |
| library(purrr) | |
| library(forcats) | |
| library(tidyr) | |
| library(modelr) | |
| library(ggdist) | |
| library(tidybayes) | |
| library(ggplot2) | |
| library(cowplot) | |
| library(rstan) | |
| library(brms) | |
| library(ggrepel) | |
| library(RColorBrewer) | |
| library(gganimate) | |
| library(posterior) | |
| library(ggpubr) | |
| library(MCMCglmm) | |
| library(ggstatsplot) | |
| library(bayesplot) | |
| theme_set(theme_tidybayes() + panel_border()) | |
| rstan_options(auto_write = TRUE) | |
| options(mc.cores = parallel::detectCores()) | |
| set.seed(5) | |
| n = 10 | |
| n_condition = 5 | |
| ABC = | |
| tibble( | |
| condition = rep(c("A","B","C","D","E"), n), | |
| response = rnorm(n * 5, c(0,1,2,1,-1), 0.5)) | |
| ggplot(ABC, aes(x=condition, y=response, fill=condition))+ | |
| geom_boxplot()+ | |
| theme_bw() | |
| ggdotplotstats( | |
| data = ABC, | |
| y = condition, | |
| x = response, | |
| test.value = 2, | |
| type = "robust", | |
| title = "Response by condition", | |
| xlab = "Response") | |
| my_comparisons <- list( c("A", "B"), | |
| c("A", "C"), | |
| c("A", "D"), | |
| c("A", "E"), | |
| c("B", "C"), | |
| c("B", "D"), | |
| c("B", "E"), | |
| c("C", "D"), | |
| c("C", "E"), | |
| c("D", "E")) | |
| ggboxplot(ABC, x = "condition", y = "response", | |
| fill = "condition")+ | |
| stat_compare_means(comparisons = my_comparisons)+ | |
| theme_bw() | |
| get_prior(response ~ (1|condition), | |
| data = ABC) | |
| m = brm( | |
| response ~ (1|condition), | |
| data = ABC, | |
| prior = c( | |
| prior(normal(0, 1), class = Intercept), | |
| prior(student_t(3, 0, 1), class = sd), | |
| prior(student_t(3, 0, 1), class = sigma)), | |
| control = list(adapt_delta = .99)) | |
| summary(m) | |
| plot(m) | |
| get_variables(m) | |
| m %>% | |
| spread_draws(r_condition[condition,term]) %>% | |
| head(10) | |
| m %>% | |
| spread_draws(r_condition[c,t]) %>% | |
| head(10) | |
| m %>% | |
| spread_draws(r_condition[condition,]) %>% | |
| head(10) | |
| m %>% | |
| spread_draws(b_Intercept, sigma) %>% | |
| head(10) | |
| m %>% | |
| spread_draws(b_Intercept, sigma) %>% | |
| median_qi(b_Intercept, sigma) | |
| m %>% | |
| spread_draws(b_Intercept, sigma) %>% | |
| median_qi() | |
| ABC %>% | |
| data_grid(condition) %>% | |
| add_epred_draws(m, dpar = c("mu", "sigma")) %>% | |
| sample_draws(100) %>% | |
| ggplot(aes(y = condition)) + | |
| stat_dist_slab(aes(dist = "norm", arg1 = mu, arg2 = sigma), | |
| slab_color = "gray65", alpha = 1/10, fill = NA) + | |
| geom_point(aes(x = response), data = ABC, shape = 21, fill = "#9ECAE1", size = 2) | |
| ABC %>% | |
| data_grid(condition) %>% | |
| add_epred_draws(m, dpar = c("mu", "sigma")) %>% | |
| ggplot(aes(x = condition)) + | |
| stat_dist_slab(aes(dist = "norm", arg1 = mu, arg2 = sigma), | |
| slab_color = "gray65", alpha = 1/10, fill = NA, data = . %>% sample_draws(100), scale = .5) + | |
| stat_halfeye(aes(y = .epred), side = "bottom", scale = .5) + | |
| geom_point(aes(y = response), data = ABC, shape = 21, fill = "#9ECAE1", size = 2, position = position_nudge(x = -.2)) | |
| grid = ABC %>%data_grid(condition) | |
| means = grid %>%add_epred_draws(m) | |
| preds = grid %>%add_predicted_draws(m) | |
| ABC %>% | |
| ggplot(aes(x = response, y = condition)) + | |
| stat_halfeye(aes(x = .epred), scale = 0.6, | |
| position = position_nudge(y = 0.175), data = means) + | |
| stat_interval(aes(x = .prediction), data = preds) + | |
| geom_point(data = ABC) + | |
| scale_color_brewer() | |
| m %>% | |
| spread_draws(r_condition[condition,]) %>% | |
| compare_levels(r_condition, by = condition) %>% | |
| ungroup() %>% | |
| mutate(condition = reorder(condition, r_condition)) %>% | |
| ggplot(aes(y = condition, x = r_condition)) + | |
| stat_halfeye() + | |
| geom_vline(xintercept = 0, linetype = "dashed") | |
| ABC %>% | |
| data_grid(condition) %>% | |
| add_epred_draws(m, dpar = c("mu", "sigma")) %>% | |
| sample_draws(100) %>% | |
| ggplot(aes(y = condition)) + | |
| stat_dist_slab(aes(dist = "norm", arg1 = mu, arg2 = sigma), | |
| slab_color = "gray65", alpha = 1/10, fill = NA) + | |
| geom_point(aes(x = response), data = ABC, shape = 21, fill = "#9ECAE1", size = 2) | |
| ABC %>% | |
| data_grid(condition) %>% | |
| add_epred_draws(m, dpar = c("mu", "sigma")) %>% | |
| ggplot(aes(x = condition)) + | |
| stat_dist_slab(aes(dist = "norm", arg1 = mu, arg2 = sigma), | |
| slab_color = "gray65", alpha = 1/10, fill = NA, data = . %>% sample_draws(100), scale = .5) + | |
| stat_halfeye(aes(y = .epred), side = "bottom", scale = .5) + | |
| geom_point(aes(y = response), data = ABC, shape = 21, fill = "#9ECAE1", size = 2, position = position_nudge(x = -.2)) | |
| m %>% | |
| spread_draws(r_condition[condition,]) %>% | |
| compare_levels(r_condition, by = condition) %>% | |
| ungroup() %>% | |
| mutate(condition = reorder(condition, r_condition)) %>% | |
| ggplot(aes(y = condition, x = r_condition)) + | |
| stat_halfeye() + | |
| geom_vline(xintercept = 0, linetype = "dashed") | |
| m_linear = lm(response ~ condition, data = ABC) | |
| summary(m_linear) | |
| par(mfrow = c(1, 3)) | |
| plot(m_linear) | |
| linear_results = m_linear %>% | |
| emmeans::emmeans(~ condition) %>% | |
| broom::tidy(conf.int = TRUE) %>% | |
| mutate(model = "OLS") | |
| linear_results<-as.data.frame(linear_results) | |
| m_r = brm( | |
| response ~ (1|condition), | |
| data = ABC, | |
| prior = c( | |
| prior(normal(0, 1), class = Intercept), | |
| prior(student_t(3, 0, 1), class = sd), | |
| prior(student_t(3, 0, 1), class = sigma)), | |
| control = list(adapt_delta = .99)) | |
| summary(m_r) | |
| plot(m_r) | |
| bayes_results = m_r %>% | |
| spread_draws(r_condition[condition]) %>% | |
| median_qi(estimate = r_condition) %>% | |
| to_broom_names() %>% | |
| mutate(model = "Bayes Random") | |
| bayes_results<-as.data.frame(bayes_results) | |
| bayes_results$condition<-as.character(bayes_results$condition) | |
| ABC_stan <- stan_model(model_code = 'data { | |
| int<lower=1> n; | |
| int<lower=1> n_condition; | |
| int<lower=1, upper=n_condition> condition[n]; | |
| real response[n]; | |
| } | |
| parameters { | |
| real overall_mean; | |
| vector[n_condition] condition_zoffset; | |
| real<lower=0> response_sd; | |
| real<lower=0> condition_mean_sd; | |
| } | |
| transformed parameters { | |
| vector[n_condition] condition_mean; | |
| condition_mean = overall_mean + condition_zoffset * condition_mean_sd; | |
| } | |
| model { | |
| response_sd ~ cauchy(0, 1); // => half-cauchy(0, 1) | |
| condition_mean_sd ~ cauchy(0, 1); // => half-cauchy(0, 1) | |
| overall_mean ~ normal(0, 5); | |
| condition_zoffset ~ normal(0, 1); // => condition_mean ~ normal(overall_mean, condition_mean_sd) | |
| for (i in 1:n) { | |
| response[i] ~ normal(condition_mean[condition[i]], response_sd); | |
| } | |
| }') | |
| m_f = sampling(ABC_stan, | |
| data = compose_data(ABC), | |
| control = list(adapt_delta = 0.99)) | |
| bayes_results2 = m_f %>% | |
| recover_types(ABC)%>% | |
| spread_draws(condition_mean[condition]) %>% | |
| median_qi(estimate = condition_mean) %>% | |
| to_broom_names() %>% | |
| mutate(model = "Bayes Fixed") | |
| bayes_results2<-as.data.frame(bayes_results2) | |
| bayes_results2$condition<-as.character(bayes_results2$condition) | |
| linear_results | |
| bayes_results | |
| bayes_results2 | |
| bind_rows(linear_results, bayes_results2) %>% | |
| mutate(condition = fct_rev(condition)) %>% | |
| ggplot(aes(y = condition, x = estimate, xmin = conf.low, xmax = conf.high, color = model)) + | |
| geom_pointinterval(position = position_dodge(width = .3)) | |
| bind_rows(linear_results, bayes_results, bayes_results2) %>% | |
| mutate(condition = fct_rev(condition)) %>% | |
| ggplot(aes(y = condition, x = estimate, xmin = conf.low, xmax = conf.high, color = model)) + | |
| geom_pointinterval(position = position_dodge(width = .1)) | |
| ms = sampling(ABC_stan, | |
| data = compose_data(ABC), | |
| control = list(adapt_delta = 0.99)) | |
| get_variables(ms) | |
| ms %>% | |
| recover_types(ABC) %>% | |
| spread_draws(condition_mean[condition]) %>% | |
| compare_levels(condition_mean, by = condition) %>% | |
| head(10) | |
| ms %>% | |
| recover_types(ABC) %>% | |
| spread_draws(condition_mean[condition]) %>% | |
| compare_levels(condition_mean, by = condition) %>% | |
| unspread_draws(condition_mean[condition]) %>% | |
| head(10) | |
| ms %>% | |
| recover_types(ABC) %>% | |
| spread_draws(condition_mean[condition]) %>% | |
| compare_levels(condition_mean, by = condition) %>% | |
| unspread_draws(condition_mean[condition], drop_indices = TRUE) %>% | |
| bayesplot::mcmc_areas() | |
| m_rst = rstanarm::stan_glm(response ~ condition, | |
| data = ABC) | |
| summary(m_rst) | |
| plot(m_rst) | |
| bayesplot::mcmc_dens(m_rst) | |
| bayesplot::mcmc_combo(m_rst) | |
| m_rst %>% | |
| recover_types(ABC) %>% | |
| emmeans::emmeans( ~ condition) %>% | |
| gather_emmeans_draws() %>% | |
| median_qi() | |
| m_rst %>% | |
| recover_types(ABC) %>% | |
| emmeans::emmeans( ~ condition) %>% | |
| emmeans::contrast(method = "pairwise") %>% | |
| gather_emmeans_draws() %>% | |
| median_qi() | |
| m_rst %>% | |
| recover_types(ABC) %>% | |
| emmeans::emmeans( ~ condition) %>% | |
| emmeans::contrast(method = "pairwise") %>% | |
| gather_emmeans_draws() %>% | |
| ggplot(aes(x = .value, y = contrast)) + | |
| stat_halfeye() | |
| m%>% | |
| recover_types(ABC) %>% | |
| add_epred_draws(m_rst, dpar = c("mu", "sigma")) %>% | |
| sample_draws(100) %>% | |
| ggplot(aes(y = condition)) + | |
| stat_dist_slab(aes(dist = "norm", arg1 = mu, arg2 = sigma), | |
| slab_color = "gray65", alpha = 1/10, fill = NA) + | |
| geom_point(aes(x = response), data = ABC, shape = 21, fill = "#9ECAE1", size = 2) | |
| ABC %>% | |
| data_grid(condition) %>% | |
| add_epred_draws(m, dpar = c("mu", "sigma")) %>% | |
| ggplot(aes(x = condition)) + | |
| stat_dist_slab(aes(dist = "norm", arg1 = mu, arg2 = sigma), | |
| slab_color = "gray65", alpha = 1/10, fill = NA, data = . %>% sample_draws(100), scale = .5 | |
| ) + | |
| stat_halfeye(aes(y = .epred), side = "bottom", scale = .5) + | |
| geom_point(aes(y = response), data = ABC, shape = 21, fill = "#9ECAE1", size = 2, position = position_nudge(x = -.2)) | |
| MCMCglmm(response ~ condition, | |
| data = as.data.frame(ABC))%>% | |
| recover_types(ABC) %>% | |
| emmeans::emmeans( ~ condition, data = ABC) %>% | |
| emmeans::contrast(method = "pairwise") %>% | |
| gather_emmeans_draws() %>% | |
| ggplot(aes(x = .value, y = contrast)) + | |
| stat_halfeye() | |
| bayesfit = brm( | |
| response ~ (1|condition), | |
| data = ABC, | |
| prior = c( | |
| prior(normal(10, 2), class = Intercept), | |
| prior(gamma(3, 4), class = sd), | |
| prior(gamma(2, 1), class = sigma)), | |
| control = list(adapt_delta = .99), | |
| chains=4, cores=6) | |
| summary(bayesfit) | |
| plot(bayesfit) | |
| pp_check(bayesfit, ndraws=200) | |
| pp_check(bayesfit, type = "error_hist", ndraws = 11) | |
| pp_check(bayesfit, type = "scatter_avg", ndraws = 100) | |
| pp_check(bayesfit, type = "stat_2d") | |
| pp_check(bayesfit, type = "loo_pit") | |
| yrep<-posterior_predict(bayesfit) | |
| y<-ABC$response | |
| ppc_dens_overlay(y, yrep[1:25,]) | |
| ppc_ecdf_overlay(y, yrep[sample(nrow(yrep), 25), ]) | |
| ppc_hist(y, yrep[1:8, ]) | |
| ppc_boxplot(y, yrep[1:8, ]) | |
| ppc_dens(y, yrep[200:202, ]) | |
| ppc_freqpoly(y, yrep[1:3,], alpha = 0.1, size = 1, binwidth = 5) | |
| ppc_stat(y, yrep) | |
| q25 <- function(y) quantile(y, 0.25) | |
| ppc_stat(y, yrep, stat = "q25") | |
| ppc_stat(y, yrep, stat = function(y) quantile(y, 0.25)) | |
| bayesplot_theme_set(ggplot2::theme_linedraw()) | |
| color_scheme_set("viridisE") | |
| ppc_stat_2d(y, yrep, stat = c("mean", "sd")) | |
| bayesplot_theme_set(ggplot2::theme_grey()) | |
| color_scheme_set("brewer-Paired") | |
| ppc_stat_2d(y, yrep, stat = c("median", "mad")) | |
| theme_set(theme_bw()) | |
| color_scheme_set("brightblue") | |
| ppc_intervals(y, yrep) | |
| ppc_intervals(y, yrep, size = 1.5, fatten = 0) | |
| ppc_ribbon(y, yrep) | |
| ppc_ribbon(y, yrep, y_draw = "points") | |
| ppc_ribbon(y, yrep, y_draw = "both") | |
| color_scheme_set("gray") | |
| ppc_intervals(y, yrep, prob = 0.5) + | |
| ggplot2::scale_x_continuous( | |
| labels = rownames(ABC), | |
| breaks = 1:nrow(ABC)) + | |
| xaxis_text(angle = -70, vjust = 1, hjust = 0) + | |
| xaxis_title(FALSE) | |
| ppc_error_hist(y, yrep[1:3, ]) | |
| ppc_error_scatter(y, yrep[10:14, ]) | |
| ppc_error_scatter_avg(y, yrep) | |
| loo1 <- loo(bayesfit, save_psis = TRUE, cores = 4) | |
| psis1 <- loo1$psis_object | |
| lw <- weights(psis1) | |
| ppc_loo_pit_overlay(y, yrep, lw = lw) | |
| ppc_loo_pit_qq(y, yrep, lw = lw) | |
| ppc_loo_pit_qq(y, yrep, lw = lw, compare = "normal") | |
| keep_obs <- 1:30 | |
| ppc_loo_intervals(y, yrep, psis_object = psis1, subset = keep_obs) | |
| ppc_loo_intervals(y, yrep, psis_object = psis1, subset = keep_obs, | |
| order = "median") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment