Created
June 5, 2022 11:05
-
-
Save MJacobs1985/455b577b10b650909435f8bb47627b5c 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()) | |
library(ggpubr) | |
library(rstatix) | |
library(grid) | |
library(gridExtra) | |
require(bayesrules) | |
require(rstanarm) | |
require(bayesplot) | |
require(tidybayes) | |
library(brms) | |
library(modelr) | |
library(MCMCglmm) | |
library(ggstatsplot) | |
theme_set(theme_tidybayes() + panel_border()) | |
df <- ToothGrowth | |
df$dose <- as.factor(df$dose) | |
head(df, 10) | |
p <- ggboxplot(ToothGrowth, | |
x = "supp", | |
y = "len", | |
color = "supp", | |
palette = "jco", | |
add = "jitter") | |
dev.off() | |
ggbetweenstats( | |
data = df, | |
x = supp, | |
y = len, | |
title = "Distribution of len across supp") | |
grouped_ggbetweenstats( | |
data = df, | |
x = dose, | |
y = len, | |
grouping.var = supp, | |
outlier.tagging = TRUE, | |
outlier.coef = 2, | |
ggsignif.args = list(textsize = 4, tip_length = 0.01), | |
p.adjust.method = "bonferroni", | |
palette = "default_jama", | |
package = "ggsci", | |
plotgrid.args = list(nrow = 1), | |
annotation.args = list(title = "Differences in len by dose for different supp")) | |
ggwithinstats( | |
data = df, | |
x = dose, | |
y = len, | |
title = "Tooth growth") | |
grouped_ggwithinstats( | |
data = df, | |
x = dose, | |
y = len, | |
type = "np", | |
xlab = "Dose", | |
ylab = "Length", | |
grouping.var = supp, | |
outlier.tagging = TRUE) | |
gghistostats( | |
data = df, | |
x = len, | |
title = "Length", | |
test.value = 15, | |
binwidth = 1) | |
grouped_gghistostats( | |
data = df, | |
x = len, | |
test.value = 15, | |
type = "nonparametric", | |
xlab = "Length", | |
grouping.var = supp, | |
normal.curve = TRUE, | |
normal.curve.args = list(color = "red", size = 1), | |
ggtheme = ggthemes::theme_tufte(), | |
plotgrid.args = list(nrow = 1), | |
annotation.args = list(title = "Length by supp")) | |
p1 <- ggwithinstats( | |
data = df, | |
x = dose, | |
y = len, | |
type = "p", | |
effsize.type = "d", | |
conf.level = 0.99, | |
title = "Parametric test", | |
package = "ggsci", | |
palette = "nrc_npg") | |
p2 <- ggwithinstats( | |
data = df, | |
x = dose, | |
y = len, | |
xlab = "Dose", | |
ylab = "Length", | |
type = "np", | |
conf.level = 0.99, | |
title = "Non-parametric Test", | |
package = "ggsci", | |
palette = "uniform_startrek") | |
p3 <- ggwithinstats( | |
data = df, | |
x = dose, | |
y = len, | |
xlab = "Dose", | |
ylab = "Length", | |
type = "r", | |
conf.level = 0.99, | |
title = "Robust Test", | |
package = "wesanderson", | |
palette = "Royal2") | |
p4 <- ggwithinstats( | |
data = df, | |
x = dose, | |
y = len, | |
xlab = "Dose", | |
ylab = "Length", | |
type = "bayes", | |
title = "Bayesian Test", | |
package = "ggsci", | |
palette = "nrc_npg") | |
combine_plots( | |
plotlist = list(p1, p2, p3, p4), | |
plotgrid.args = list(nrow = 2), | |
annotation.args = list( | |
title = "Effect of disgust on dose on length ", | |
caption = "Source: Toothgrow dataset")) | |
p <- ggboxplot(ToothGrowth, x = "supp", y = "len", | |
color = "supp", palette = "jco", | |
add = "jitter") | |
# Add p-value | |
p + stat_compare_means() | |
# Change method | |
g1<-p + stat_compare_means(method = "t.test") + theme_bw() | |
g2<-p + stat_compare_means(method = "anova") + theme_bw() | |
g3<-p + stat_compare_means(method = "wilcox.test") + theme_bw() | |
grid.arrange(g1,g2,g3,ncol=3) | |
compare_means(len ~ supp, | |
data = ToothGrowth, | |
paired = FALSE) | |
g<-ggplot(ToothGrowth, aes( | |
x = len, | |
fill = as.factor(supp)))+ | |
geom_density(alpha=0.5)+ | |
labs(fill="supp")+ | |
theme_bw() | |
set_palette(g,palette = "jco") | |
ggpaired(ToothGrowth, x = "supp", y = "len", | |
color = "supp", line.color = "gray", line.size = 0.4, | |
palette = "jco")+ | |
stat_compare_means(paired = TRUE) + theme_bw() | |
compare_means(len ~ supp, | |
data = ToothGrowth, | |
paired = TRUE) | |
my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") ) | |
ggboxplot(ToothGrowth, x = "dose", y = "len", | |
color = "dose", palette = "jco")+ | |
stat_compare_means(comparisons = my_comparisons, label.y = c(29, 35, 40))+ | |
stat_compare_means(label.y = 45) + | |
theme_bw() | |
g<-ggplot(ToothGrowth, aes( | |
x = len, | |
fill = as.factor(dose)))+ | |
geom_density(alpha=0.5)+ | |
labs(fill="dose")+ | |
theme_bw() | |
set_palette(g,palette = "jco") | |
stat.test <- df %>% | |
group_by(dose) %>% | |
t_test(len ~ supp) %>% | |
adjust_pvalue() %>% | |
add_significance("p.adj") | |
stat.test <- stat.test %>% | |
add_xy_position(x = "supp") | |
bxp <- ggboxplot(df, x = "supp", y = "len", fill = "supp", | |
facet.by = "dose") | |
p<-bxp + | |
stat_pvalue_manual(stat.test, label = "p.adj") + | |
scale_y_continuous(expand = expansion(mult = c(0.05, 0.10))) | |
set_palette(p,palette = "jco") | |
g<-ggplot(ToothGrowth, aes( | |
x = len, | |
fill = as.factor(supp)))+ | |
geom_density(alpha=0.5)+ | |
facet_grid(~dose)+ | |
labs(fill="supp")+ | |
theme_bw() | |
set_palette(g,palette = "jco") | |
# Statistical test | |
stat.test <- df %>% | |
t_test(len ~ supp, paired = TRUE) %>% | |
add_significance() | |
bxp <- ggpaired(df, x = "supp", y = "len", fill = "#E7B800", | |
line.color = "gray", line.size = 0.4) | |
stat.test <- stat.test %>% add_xy_position(x = "supp") | |
bxp + stat_pvalue_manual(stat.test, label = "p.signif") | |
bxp + | |
stat_pvalue_manual(stat.test, label = "{p}{p.signif}") + | |
scale_y_continuous(expand = expansion(mult = c(0.05, 0.10))) | |
## De Bayesiaanse manier | |
df <- ToothGrowth | |
df$dose<-as.numeric(df$dose);str(df) | |
get_prior(len ~ dose + supp, | |
data = df, | |
family = gaussian) | |
df_normal_prior<-rstanarm::stan_glm(len ~ dose + supp, | |
data = df, | |
family = gaussian, | |
prior_intercept = normal(7, 1.5), | |
prior = normal(0, 2.5, autoscale = TRUE), | |
prior_aux = rstanarm::exponential(1, autoscale = TRUE), | |
chains = 4, iter = 5000*2, seed = 84735, | |
prior_PD = TRUE) | |
prior_summary(df_normal_prior) | |
plot(df_normal_prior) | |
df_normal <- update(df_normal_prior, | |
prior_PD = FALSE) | |
plot(df_normal, plotfun="dens") | |
df_normal | |
pp_check(df_normal, | |
plotfun = "hist", | |
nreps = 15) + | |
geom_vline(xintercept = 0) | |
pp_check(df_normal, | |
plotfun = "dens", | |
nreps = 15) + | |
geom_vline(xintercept = 0) | |
mcmc_trace(df_normal) | |
mcmc_dens_overlay(df_normal) | |
mcmc_acf(df_normal) | |
df %>% | |
add_fitted_draws(df_normal, n = 50) %>% | |
ggplot(aes(x = dose, y = len, color = supp)) + | |
geom_line(aes(y = .value, group = paste(supp, .draw)), | |
alpha = .2) + | |
geom_point(data = df, size = 0.5) + theme_bw() | |
mn_prediction <- posterior_predict(df_normal, | |
newdata = data.frame(dose = 1.8, | |
supp = "OJ")) | |
mn_prediction | |
mcmc_hist(mn_prediction, binwidth = 1) + | |
geom_vline(xintercept = 0, lty=2, color="red") + | |
xlab("Predicted number of len for dose = 1.8 and supp = OJ") | |
mn_prediction <- posterior_predict(df_normal, | |
newdata = data.frame(dose = c(1.8,1.8), | |
supp = c("OJ","VC")), | |
draws=1000) | |
mn_prediction<-as.data.frame(mn_prediction) | |
mn_prediction$diff<-mn_prediction$`1`-mn_prediction$`2` | |
melt_mn_pred<-reshape2::melt(mn_prediction);str(melt_mn_pred) | |
ggplot(melt_mn_pred, aes(x=value, | |
fill=as.factor(variable)))+ | |
geom_density(alpha=0.5)+ | |
labs(fill="supp", x="len", title="Predicted len for dose = 1.8")+ | |
theme_bw() | |
set.seed(84735) | |
normal_predictions <- posterior_predict(df_normal, newdata = df) | |
ppc_intervals_grouped(df$len, yrep = normal_predictions, | |
x = df$dose, | |
group = df$supp, | |
prob = 0.5, prob_outer = 0.95, | |
facet_args = list(scales = "fixed")) | |
prediction_summary(model = df_normal, | |
data = df) | |
set.seed(84735) | |
normal_cv <- prediction_summary_cv(model = df_normal, | |
data = df, k = 10) | |
normal_cv$cv | |
df$dose_fc<-as.factor(df$dose);str(df) | |
priorget <- get_prior(len ~ dose_fc + supp, | |
data = df, family = gaussian) | |
priorget | |
df_normal_prior2 = brm( | |
len ~ dose_fc + supp, | |
data = df, | |
prior = c( | |
prior(normal(7, 1.5), class=Intercept), | |
prior(normal(0, 2.5), class=b, coef=dose_fc1), | |
prior(normal(0, 2.5), class=b, coef=dose_fc2), | |
prior(normal(0, 2.5), class=b, coef=suppVC), | |
prior(exponential(1), class=sigma)), | |
control = list(adapt_delta = .99)) | |
priorget | |
df_normal_prior2$prior | |
summary(df_normal_prior2) | |
plot(df_normal_prior2) | |
ndraws = 4000 | |
p = df %>% | |
group_by(supp) %>% | |
add_epred_draws(df_normal_prior2, ndraws = ndraws)%>% | |
ggplot(., aes(x=.epred, fill=supp))+ | |
geom_density(alpha=0.5)+ | |
facet_wrap(~dose_fc, scales = "free")+ | |
labs(x="Predicted len", | |
title="Distributions of len by supp and dose provided via Bayesian inference (ndraws=4000)")+ | |
theme_bw() | |
set_palette(p,palette = "jco") | |
get_prior(len ~ dose + supp, | |
data = df, family=gaussian()) | |
df_normal_prior3 = brm( | |
len ~ dose + supp, | |
data = df, | |
prior = c( | |
prior(normal(7, 1.5), class=Intercept), | |
prior(normal(4, 1), class=b, coef=dose), | |
prior(normal(3, 0.5), class=b, coef=suppVC), | |
prior(exponential(1), class=sigma)), | |
control = list(adapt_delta = .99)) | |
get_prior(len ~ dose + supp, | |
data = df, family=gaussian()) | |
df_normal_prior3$prior | |
get_variables(df_normal_prior3) | |
summary(df_normal_prior3) | |
ndraws = 4000 | |
try<-df_normal_prior3 %>% | |
recover_types(df)%>% | |
spread_draws(b_dose, b_suppVC) | |
ggplot(try, aes(x=b_suppVC, fill=as.factor(.chain)))+ | |
geom_density(alpha=0.5)+ | |
labs(fill="Chain")+ | |
theme_bw() | |
ggplot(try, aes(x=b_dose, | |
y=b_suppVC, | |
color=as.factor(.chain)))+ | |
geom_point(alpha=0.7)+ | |
labs(color="Chain")+ | |
theme_bw() | |
df <- ToothGrowth | |
df$dose<-as.numeric(df$dose);str(df) | |
priorget <- get_prior(len ~ (1|supp) + (1|dose), | |
data = df, family = gaussian) | |
priorget | |
df$len | |
df_normal_prior4 = brm( | |
len ~ (1|supp) + (1|dose), | |
data = df, | |
prior = c( | |
prior(normal(7, 1.5), class=Intercept), | |
prior(gamma(3,3), class=sd, coef=Intercept, group=dose), | |
prior(exponential(2), class=sd, coef=Intercept, group=supp), | |
prior(exponential(1), class=sigma)), | |
control = list(adapt_delta = .99)) | |
priorget | |
df_normal_prior4$prior | |
summary(df_normal_prior4) | |
df %>% | |
recover_types(df) %>% | |
add_epred_draws(df_normal_prior4, | |
dpar = c("mu", "sigma")) %>% | |
ggplot(aes(x = supp)) + | |
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 = len), data = df, shape = 21, fill = "#9ECAE1", size = 2, position = position_nudge(x = -.2))+ | |
facet_wrap(~dose)+ | |
theme_bw() | |
df_normal_prior4 %>% | |
spread_draws(r_supp[supp]) %>% | |
compare_levels(r_supp, by = supp) %>% | |
dplyr::ungroup() %>% | |
mutate(supp = reorder(supp, r_supp)) %>% | |
ggplot(aes(y = supp, x = r_supp)) + | |
stat_halfeye() + | |
geom_vline(xintercept = 0, linetype = "dashed") +theme_bw() | |
df_normal_prior4 %>% | |
spread_draws(r_dose[dose]) %>% | |
compare_levels(r_dose, by = dose, comparison="ordered") %>% | |
dplyr::ungroup() %>% | |
mutate(dose = reorder(dose, r_dose)) %>% | |
ggplot(aes(y = dose, x = r_dose)) + | |
stat_halfeye() + | |
geom_vline(xintercept = 0, linetype = "dashed") +theme_bw() | |
df_normal_prior4 %>% | |
spread_draws(r_dose[dose]) %>% | |
compare_levels(r_dose, by = dose, comparison="pairwise") %>% | |
dplyr::ungroup() %>% | |
mutate(dose = reorder(dose, r_dose)) %>% | |
ggplot(aes(y = dose, x = r_dose)) + | |
stat_halfeye() + | |
geom_vline(xintercept = 0, linetype = "dashed") +theme_bw() | |
df_normal_prior4 %>% | |
spread_draws(r_dose[dose]) %>% | |
compare_levels(r_dose, by = dose, comparison="control") %>% | |
dplyr::ungroup() %>% | |
mutate(dose = reorder(dose, r_dose)) %>% | |
ggplot(aes(y = dose, x = r_dose)) + | |
stat_halfeye() + | |
geom_vline(xintercept = 0, linetype = "dashed") +theme_bw() | |
get_variables(df_normal_prior4) | |
summary(df_normal_prior4) | |
ToothGrowth %>% | |
add_predicted_draws(df_normal_prior4) %>% | |
ggplot(aes(x = len, y = .prediction, | |
color = ordered(dose), | |
fill = ordered(dose))) + | |
stat_lineribbon( | |
.width = c(.95, .80, .50), | |
alpha = 1/4) + | |
geom_point(color="black", alpha=0.2) + | |
scale_fill_brewer(palette = "Set2") + | |
scale_color_brewer(palette = "Dark2")+ | |
theme_bw()+ | |
facet_wrap(~dose, scales="free") | |
ToothGrowth %>% | |
add_predicted_draws(df_normal_prior4) %>% | |
ggplot(aes(x = len, y = .prediction, | |
color = ordered(supp), | |
fill = ordered(supp))) + | |
stat_lineribbon( | |
.width = c(.95, .80, .50), | |
alpha = 1/4) + | |
geom_point(color="black", alpha=0.2) + | |
scale_fill_brewer(palette = "Set2") + | |
scale_color_brewer(palette = "Dark2")+ | |
theme_bw()+ | |
facet_wrap(~supp, scales="free") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment