## ----setup_lies,warning=FALSE-------------------------------------------------
library(EcoEnsemble)
set.seed(1234)

## ----eval = FALSE, message=FALSE, warning=FALSE, results='hide', silent=TRUE----
# cor_pri_st <- rstan::stan_model(model_code = " functions{
#   real priors_cor_hierarchical_beta(matrix ind_st_cor, int N, matrix M){
#     real log_prior = 0;
#     for (i in 1:(N-1)){
#       for (j in (i+1):N){
#         log_prior += beta_lpdf(0.5*(ind_st_cor[i, j] + 1)| M[i, j], M[j, i] );
#       }
#     }
#     return log_prior;
#   }
# 
#   real beta_conj_prior(real alpha, real betas, real r, real s, real k){
#     real rl = 1/(1 + exp(-r));
#     real sl = 1/(1 + exp(-s));
#     real p = (sl * rl)^k;
#     real q = (sl * (1 - rl))^k;
#     real ret = alpha * log(p) + betas * log(q) - k * lbeta(alpha,betas);
#     return ret;
#   }
# 
# }
# 
# data {
#   vector[3] cor_p;
# }
# 
# parameters {
#   matrix <lower=0>[5,5] beta_pars;
#   corr_matrix[5] rho[4];
# }
# 
# model {
#   for (i in 1:4){
#     for (j in (i+1):5){
#       target += beta_conj_prior(beta_pars[i,j], beta_pars[j,i], cor_p[1], cor_p[2], cor_p[3]);
#     }
#   }
# 
#   for (i in 1:4){
#     target += priors_cor_hierarchical_beta(rho[i],5,beta_pars);
#     diagonal(beta_pars) ~ std_normal();
#   }
# 
# }
# 
# generated quantities {
# 
#   matrix [5,5] rhovars;
#   for (i in 1:4){
#     for (j in (i+1):5){
#       rhovars[i,j] = 4 * (beta_pars[i,j] * beta_pars[j,i])/(square(beta_pars[i,j] + beta_pars[j,i]) * (beta_pars[i,j] + beta_pars[j,i] + 1));
#       rhovars[j,i] = (2 * beta_pars[i,j]/(beta_pars[i,j] + beta_pars[j,i])) - 1;
#     }
#   }
# 
#   for (i in 1:5){
#     rhovars[i,i] = 4;
#   }
# 
# }
# ")
# library(ggplot2)
# rhoplots <- list()
# kvals <- c(0.05, 5)
# parvals <- do.call(expand.grid, c(rep(list(c(0.25, 3)), 2), list(kvals)))
# #Sampling and gathering outputs for plotting
# for (i in 1:nrow(parvals)){
#   fit_cor <- rstan::sampling(cor_pri_st, data = list(cor_p=as.numeric(parvals[i,])), iter = 2000, chains=4)
#   ex.fit <- rstan::extract(fit_cor)
#   rho_density <- density(ex.fit$rho[,1,1,2], from = -1, to = 1)
#   rhoplot_data <- data.frame(rho_density$x, rho_density$y)
#   names(rhoplot_data) <- c("rho", "Density")
#   rhoplot_data <- cbind(rhoplot_data, rep(parvals[i,1], nrow(rhoplot_data)), rep(parvals[i,2], nrow(rhoplot_data)), rep(parvals[i,3], nrow(rhoplot_data)))
#   names(rhoplot_data)[3:5] <- c("r", "s", "k")
#   rhoplots[[i]] <- rhoplot_data
# }
# #Construct plots
# rhoplot_data <- do.call(rbind, rhoplots)
# rhoplot_data <- cbind(rhoplot_data, rep("Beta conjugate prior", nrow(rhoplot_data)))
# names(rhoplot_data)[6] <- "Prior"
# unif_range <- seq(-1, 1, length.out = nrow(rhoplots[[1]]))
# unif_data <- data.frame(cbind(rep(unif_range, nrow(parvals)), rep(dbeta((unif_range+1)/2,5/2,5/2)/2, nrow(parvals)), rhoplot_data[,3:5], rep("Uniform prior", nrow(rhoplot_data))))
# names(unif_data) <- names(rhoplot_data)
# rhoplot_data <- rbind(rhoplot_data, unif_data)
# rhoplot1 <- ggplot(rhoplot_data[which(rhoplot_data$k == kvals[1]),]) + geom_area(aes(x = rho, y = Density, color = Prior, fill = Prior), alpha = 0.3, position = "identity") + scale_x_continuous(bquote(rho), sec.axis = sec_axis(~., name = "r", breaks = NULL, labels = NULL)) + scale_y_continuous(sec.axis = sec_axis(~., name = "s", breaks = NULL, labels = NULL)) + theme(aspect.ratio = 1) + facet_grid(rows = vars(r), cols = vars(s)) + scale_color_manual(values = c("blue", "green")) + scale_fill_manual(values = c("blue", "green"))
# rhoplot2 <- ggplot(rhoplot_data[which(rhoplot_data$k == kvals[2]),], aes(x = rho, y = Density)) + geom_area(aes(color = Prior, fill = Prior), alpha = 0.3, position = "identity") + scale_x_continuous(bquote(rho), sec.axis = sec_axis(~., name = "r", breaks = NULL, labels = NULL)) + scale_y_continuous(sec.axis = sec_axis(~., name = "s", breaks = NULL, labels = NULL)) + theme(aspect.ratio = 1) + facet_grid(rows = vars(r), cols = vars(s)) + scale_color_manual(values = c("blue", "green")) + scale_fill_manual(values = c("blue", "green"))

## ----echo = FALSE, out.width="700px", out.height="700px"----------------------
knitr::include_graphics("data/rhoplot1.png")

## ----eval = FALSE, fig.dim = c(7,6), echo = FALSE-----------------------------
# rhoplot1

## ----echo = FALSE, out.width="700px", out.height="700px"----------------------
knitr::include_graphics("data/rhoplot2.png")

## ----eval = FALSE, fig.dim = c(7,6), echo = FALSE-----------------------------
# rhoplot2

## ----message=FALSE, warning=FALSE,eval=FALSE, results='hide', silent=TRUE-----
# kvals <- c(0.1, 0.2, 0.4, 0.8, 1.6, 3.2)
# #parvals <- cbind(rep(0.3, 6), rep(-1, 6), kvals)
# parvals <- cbind(rep(-0.3, 6), rep(3, 6), kvals)
# rhovarplots <- list()
# rhomeanplots <- list()
# for (i in 1:6){
#   fit_cor <- rstan::sampling(cor_pri_st, data = list(cor_p=parvals[i,]), iter = 2000, chains=4)
#   ex.fit <- rstan::extract(fit_cor)
#   rhovar_density <- density(ex.fit$rhovars[,1,2])
#   rhomean_density <- density(ex.fit$rhovars[,2,1])
#   rhovar_data <- data.frame(cbind(rhovar_density$x, rhovar_density$y, rep(kvals[i], length(rhovar_density$x))))
#   rhomean_data <- data.frame(cbind(rhomean_density$x, rhomean_density$y, rep(kvals[i], length(rhomean_density$x))))
#   names(rhovar_data) <- c("Variance", "Density", "k")
#   names(rhomean_data) <- c("Expectation", "Density", "k")
#   rhovarplots[[i]] <- rhovar_data
#   rhomeanplots[[i]] <- rhomean_data
# }
# rhovarplot_data <- do.call(rbind, rhovarplots)
# rhomeanplot_data <- do.call(rbind, rhomeanplots)
# rhovarplot <- ggplot(rhovarplot_data) + geom_area(aes(x = Variance, y = Density), color = "blue", fill = "blue", alpha = 0.3, position = "identity") + geom_vline(xintercept = 0.2, color = "green", linetype = "dashed", linewidth = 0.8) + facet_wrap(vars(k), nrow = 2, ncol = 3) + scale_x_continuous(sec.axis = sec_axis(~., name = "k", breaks = NULL, labels = NULL))
# rhomeanplot <- ggplot(rhomeanplot_data) + geom_area(aes(x = Expectation, y = Density), color = "blue", fill = "blue", alpha = 0.3, position = "identity") + geom_vline(xintercept = 0, color = "green", linetype = "dashed", linewidth = 0.8) + facet_wrap(vars(k), nrow = 2, ncol = 3) + scale_x_continuous(sec.axis = sec_axis(~., name = "k", breaks = NULL, labels = NULL))

## ----echo = FALSE, out.width="600px", out.height = "500px"--------------------
knitr::include_graphics("data/rhovarplot.png")

## ----eval = FALSE, echo = FALSE-----------------------------------------------
# rhovarplot

## ----echo = FALSE, out.width = "600px", out.height = "500px"------------------
knitr::include_graphics("data/rhomeanplot.png")

## ----eval=FALSE, fig.dim = c(8,5), echo = FALSE-------------------------------
# rhomeanplot

## ----eval = FALSE, message = FALSE, warning = FALSE, silent = TRUE, results = 'hide'----
# fit_cor <- rstan::sampling(cor_pri_st, data = list(cor_p=c(0.25, 3, 4), iter = 2000, chains=4))
# ex.fit <- rstan::extract(fit_cor)
# rhoplot_data  <- data.frame(ex.fit$rho[,1,1,2])
# names(rhoplot_data) <- "rho"
# rhoplot <- ggplot(rhoplot_data) + geom_histogram(aes(x = rho), color = "blue", fill = "blue", alpha = 0.3, binwidth = 0.05) + scale_x_continuous(bquote(rho))

## ----echo = FALSE, out.width = "400px", out.height = "400px"------------------
knitr::include_graphics("data/rhoplot.png")

## ----eval = FALSE, echo = FALSE, warning = FALSE, fig.dim = c(4,3)------------
# rhoplot

## ----eval=FALSE,message=FALSE, warning = FALSE, results = 'hide',silent=TRUE----
# priors <- EnsemblePrior(4,
#                         ind_st_params =IndSTPrior("hierarchical_beta_conjugate",list(-3,1,8,4),
#                                                   list(0.25,3,4),AR_params=c(2,2)),
#                         ind_lt_params = IndLTPrior("lkj",list(1,1),1),
#                         sha_st_params = ShaSTPrior("lkj",list(1,10),1,AR_params=c(2,2)),
#                         sha_lt_params = 5
# )
# prior_density <- prior_ensemble_model(priors, M = 4)
# samples <- sample_prior(observations = list(SSB_obs, Sigma_obs),
#              simulators = list(list(SSB_ewe, Sigma_ewe,"EwE"),
#                    list(SSB_fs ,  Sigma_fs,"FishSums"),
#                    list(SSB_lm ,  Sigma_lm,"LeMans"),
#                    list(SSB_miz, Sigma_miz,"mizer")),
#              priors=priors,
#              sam_priors = prior_density)

## ----eval = FALSE, fig.dim = c(7, 6)------------------------------------------
# plot(samples)

## ----echo = FALSE, out.height="500px", out.width="800px"----------------------
knitr::include_graphics("data/p_priors_beta_conj.png")

